TapWaterMap

How this is built

Methodology & Sources

Every page on TapWaterMap is built from one source: the U.S. EPA's Envirofacts Safe Drinking Water Information System (SDWIS), a public database with no login required. We do not add data, estimate missing values, or generate prose about your water with AI. The numbers on a page are computed directly from EPA records, and you can verify each one.

The data chain

For each seed state, we pull two EPA tables and join them:

  1. WATER_SYSTEM — every active community water system (the year-round systems that serve residents), with its name, the population it reports serving, and its primary water source. We deliberately exclude inactive systems and transient non-community systems (e.g. a restaurant's own well), which do not represent a city's drinking water.
  2. VIOLATION — every violation the EPA has on record for those systems: the contaminant, whether the EPA classifies it as health-based, the dates, and whether it has returned to compliance.

A city page is generated only where a genuine active community water system exists in the EPA's records for that city (our "match-gate"). We would rather publish fewer real pages than many empty ones.

Code translations

The EPA stores contaminants, violation types, and statuses as codes. We translate them using the EPA's own published reference tables (SDWA_REF_CODE_VALUES), bundled at build time — so a code like "2950" becomes "TTHM" exactly as the EPA defines it.

What we report — and what we don't

How fresh the data is

EPA SDWIS data updates roughly quarterly. We rebuild every page weekly from a fresh pull, and each page shows the month its data was retrieved.

Verify it yourself

The EPA's Envirofacts data service is public and documented at epa.gov/enviro. Every figure we show traces to a row in it (the service base is data.epa.gov/efservice; it needs a table path to return data).