Microproduct Data GuideIntermediate

EPA SDWIS Bulk Submission Archive

EPA Safe Drinking Water Act public-system and violation bulk tables for reproducible compliance analysis.

Report a Problem

At a Glance

Difficulty
Intermediate — some data preparation helps
Size
Medium · 0.3–5.2 GB
Formats
ZIP, CSV
Access
Download
API Key
Not Required
Provider
U.S. Environmental Protection Agency
Updates
Quarterly
Last Verified
Sep 28, 2026
Source Type
Government Source
  • Python Syntax Checked

From Source to Product Signal

Test a Product Idea in Four Steps

HouseHunter pins EPA's 2026Q2 SDWIS bulk ZIP, not the ECHO web-service response. Start with a bounded byte range from the current official archive to verify its ZIP member and submission quarter. The current URL may advance; do not use a later quarter as if it were HouseHunter's pinned input.

1

Check the Setup

  • Python 3.10 or newer
  • An internet connection
  • The requests Python package
2

Access the Data

  1. 1.Read EPA's bulk-download dictionary and public-domain notice.
  2. 2.Fetch a bounded first range of the official ZIP and inspect its first member.
  3. 3.Download and pin the full archive only when you need to join system and violation tables.
Open Official Source
3

Run the Python Example

Install the packages, then run the notebook cell.

python -m pip install requests

import csv
import io
import struct
import zlib
import requests

response = requests.get(
    "https://echo.epa.gov/files/echodownloads/SDWA_latest_downloads.zip",
    headers={"Range": "bytes=0-131071"}, timeout=30,
)
response.raise_for_status()
assert response.status_code == 206, "Server did not honor bounded byte range"
chunk = response.content
header = struct.unpack_from("<IHHHHHIIIHH", chunk)
assert header[0] == 0x04034B50 and header[3] == 8
start = 30 + header[-2] + header[-1]
name = chunk[30:30 + header[-2]].decode()
text = zlib.decompressobj(-15).decompress(chunk[start:]).decode()
rows = csv.DictReader(io.StringIO("\n".join(text.splitlines()[:3])))
print(name, [(row["SUBMISSIONYEARQUARTER"], row["PWSID"]) for row in rows])
4

Check a SDWIS Submission Quarter

Verify the archive's reported quarter before combining public-system tables.

  1. 01Inspect a bounded archive member and its SUBMISSIONYEARQUARTER values.
  2. 02Record the archive URL, retrieval time, and hash before full download.
  3. 03Explain why system records and violation records need quarter-aware joins.

Dataset Details

U.S. Environmental Protection Agency is a government source. Last verified 2026-09-28. Temporal coverage: quarterly submissions, with HouseHunter pinned to 2026Q2.

Geography

Formats

Provider

U.S. Environmental Protection Agency

Data Terms

EPA-produced data are public domain unless otherwise specified; cite EPA and preserve submission-quarter, system, reporting, and data-quality limitations.

Send Feedback