Skip to content
All data sources

EPA Drinking Water (SDWIS) API and MCP server

No authepa-sdwis

Public drinking water systems and their compliance record, from EPA's Safe Drinking Water Information System. Find the systems reporting service to a county, city, or ZIP, then read one system's size, water source, ownership, published contact, violation history with health-based findings separated from monitoring paperwork, and the enforcement actions taken against it. Nationwide, no auth. SDWIS carries no geometry, so this narrows a property to a list of candidate systems and never resolves which one serves a given parcel.

EPA Drinking Water (SDWIS) is published by EPA Safe Drinking Water Information System (SDWIS) via Envirofacts and covers All fifty states, the District of Columbia, United States territories, and tribal lands, keyed by EPA public water system id (PWSID), Service areas at county grain in every state, plus city grain and ZIP grain only in the states that report them, and No geometry of any kind: no coordinates, no service area polygons, no boundaries.

It refreshes on a schedule the publisher sets.

Last verified . That is when these facts were last rebuilt from the ParcelOps source registry, not when EPA Safe Drinking Water Information System (SDWIS) via Envirofacts last refreshed the data itself.

API access

Your AI client reaches EPA Drinking Water (SDWIS) through one ParcelOps MCP endpoint, so there is no separate key to hold for it and no per-source client to write. Reaching it takes no credentials of your own.

Where it came from

PublisherEPA Safe Drinking Water Information System (SDWIS) via Envirofacts

Freshness and coverage

FreshnessScheduled · EPA publishes no refresh date for these tables: no Last-Modified header, no metadata endpoint, and no refresh column. asOf is null on every method rather than filled with a plausible-looking date. States report to EPA on their own cadence, and the newest compliance period observed on 2026-08-10 began in June 2026.
Places coveredAll fifty states, the District of Columbia, United States territories, and tribal lands, keyed by EPA public water system id (PWSID), Service areas at county grain in every state, plus city grain and ZIP grain only in the states that report them, No geometry of any kind: no coordinates, no service area polygons, no boundaries
Time covered… → present · EPA describes SDWIS as showing the last ten years of violations, but the table returns older rows too, and how completely a state reported in any given year is not published. Treat the absence of an old violation as weak evidence.
CredentialsNo credentials required

What this source cannot tell you

  • Anything outside All fifty states, the District of Columbia, United States territories, and tribal lands, keyed by EPA public water system id (PWSID), Service areas at county grain in every state, plus city grain and ZIP grain only in the states that report them, and No geometry of any kind: no coordinates, no service area polygons, no boundaries. A request past that edge comes back empty rather than approximated.
  • EPA describes SDWIS as showing the last ten years of violations, but the table returns older rows too, and how completely a state reported in any given year is not published. Treat the absence of an old violation as weak evidence.
  • Anything EPA Safe Drinking Water Information System (SDWIS) via Envirofacts does not publish. ParcelOps returns this source as it stands and never fills a blank field from a different one.
  • SDWIS ties a water system to the counties, cities, and ZIPs it reports serving, which is a coarse service area and not a boundary. The system that actually serves a specific parcel or address has to be confirmed with the utility or the state primacy agency before it is relied on.
  • Violations are system level and historical, not tap-level water quality. A clean record means the system met its monitoring and limit obligations at its compliance points. It says nothing about the pipe entering one building, about lead service lines on private property, or about a private well.
  • SDWIS publishes no geometry. There is no latitude, longitude, polygon, or boundary on any table this connector reads, so no method here can answer a point, radius, or point in polygon question.
  • This connector overlaps the envirofacts connector only in the host it calls. envirofacts covers EPA TRI toxic release facilities, PCS/NPDES discharge permits, and the FRS facility registry, and cannot reach any SDWIS table. epa-echo carries a single rolled-up SDWA compliance flag per regulated facility, keyed by FRS registry id, with no itemized violations and no way to go from a place to a water system. This is the only ParcelOps source for drinking water system identification and violation history.
  • Geography is matched only against the areas a system reports serving. The operator mailing address on the system record is never used as a location filter: for Austin, Texas that filter returns 819 active systems of which only 83 report serving the county, and it misses 58 that do.
  • City and ZIP anchoring is decided state by state. Texas reports service areas at county grain only, with zero city rows and zero ZIP rows, so a Texas city or ZIP search returns an honest empty result and a county search is the query that works.
  • Most drinking water violations are monitoring and reporting failures rather than contamination findings. Read isHealthBased before treating a count as a health signal.
  • A state filter matches the primacy agency, which carries the two-letter state code for state-primacy systems and an EPA region number for tribally regulated ones, so a system on tribal land inside a state can be missed by that state filter.
  • A PWSID is not a CCN. The tx-puct connector answers who is obligated to serve a point in Texas from real certificated service area polygons, and its certificate numbers do not join to these identifiers. Never match the two by name.
  • Lead and Copper Rule sample results, treatment inventories, and lead service line inventories are not read by this connector. Their absence here is not evidence about lead.

Methods (5)

A method is one call your agent can make against this source.

  • findWaterSystems

    read

    Public water systems reporting service to a county, city, or ZIP.

    Records returnedpublic_water_system
    How to get more resultsoffset (offsetField: offset, limitField: limit)
    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "county": {
          "type": "string",
          "minLength": 2,
          "maxLength": 60,
          "description": "County name without the word County, such as Travis. The reliable anchor: every state reports service areas at county grain."
        },
        "city": {
          "type": "string",
          "minLength": 2,
          "maxLength": 60,
          "description": "Served city name. Recorded by some states only, and by Texas not at all."
        },
        "zipCode": {
          "type": "string",
          "pattern": "^\\d{5}$",
          "description": "Served five-digit ZIP. Recorded on a small minority of rows nationwide and by Texas not at all."
        },
        "state": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "Two-letter state or territory code such as TX. Narrows a county name that several states share. Matched against the primacy agency, which is an EPA region number on tribal systems, so leave it off when tribal systems matter."
        },
        "systemType": {
          "type": "string",
          "enum": [
            "CWS",
            "NTNCWS",
            "TNCWS"
          ],
          "description": "CWS is a community system serving year-round residents, NTNCWS a non-transient non-community system such as a school or factory, TNCWS a transient one such as a campground. Use CWS for residential due diligence."
        },
        "includeInactive": {
          "type": "boolean",
          "description": "Include systems EPA marks inactive or merged. Defaults to false."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200,
          "description": "Rows to return. Defaults to 25."
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10000,
          "description": "Rows to skip. Defaults to 0."
        }
      },
      "required": [],
      "additionalProperties": false
    }
    • A county routinely holds a municipal retail system, wholesale systems, and small non-community systems on their own wells, all reporting the same county. This is a candidate list, not a determination.
    • An empty city or ZIP result usually means that state reports service areas at county grain only, not that the area has no water service. Retry by county.

    Pass county, city, or ZIP. County is the anchor that works in every state.

  • getSystemDetail

    read

    One water system: size, water source, ownership, contact, and every area it reports serving.

    What you must providepwsid
    Records returnedpublic_water_system, service_area
    How to get more resultsnone
    UnitspopulationServed: people · serviceConnections: connections
    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "pwsid": {
          "type": "string",
          "pattern": "^[A-Za-z0-9]{7,12}$",
          "description": "EPA public water system id, usually nine characters such as TX0010001. Some tribal and federal systems are all digits, such as 061620001. Find one with findWaterSystems."
        }
      },
      "required": [
        "pwsid"
      ],
      "additionalProperties": false
    }
    • administrativeContact is the mailing address EPA holds for the system operator, not the area the system serves.
    • serviceAreas describes the character of the area served, for example residential or wholesale. It is a classification with no extent and no geometry.

    The published phone and address are how a caller confirms who serves a parcel.

  • getSystemViolations

    read

    Drinking water violation history for one system, health-based findings kept apart from paperwork.

    What you must providepwsid
    Records returneddrinking_water_violation
    How to get more resultsoffset (offsetField: offset, limitField: limit)
    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "pwsid": {
          "type": "string",
          "pattern": "^[A-Za-z0-9]{7,12}$",
          "description": "EPA public water system id, usually nine characters such as TX0010001. Some tribal and federal systems are all digits, such as 061620001. Find one with findWaterSystems."
        },
        "healthBasedOnly": {
          "type": "boolean",
          "description": "Return only violations EPA flags as health based, such as an exceeded limit or a failed treatment technique. Defaults to false."
        },
        "unresolvedOnly": {
          "type": "boolean",
          "description": "Return only violations not marked returned to compliance. Applied after EPA answers, so it disables the total and paging. Defaults to false."
        },
        "sinceDate": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Only violations whose compliance period began after this full ISO date, such as 2020-01-01. EPA rejects a bare year on this column."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200,
          "description": "Rows to return. Defaults to 25."
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10000,
          "description": "Rows to skip. Defaults to 0."
        }
      },
      "required": [
        "pwsid"
      ],
      "additionalProperties": false
    }
    • A monitoring and reporting violation is a failure to sample or report on schedule, not a finding that the water was contaminated. On one probed system all 34 violations were monitoring and reporting and none were health based.
    • rollup covers only the returned page unless it says otherwise. Check rollup.scope before quoting it as a system total.

    Read isHealthBased before quoting a count. Most violations are paperwork.

  • getEnforcementActions

    read

    Formal actions a state or EPA took against one drinking water system.

    What you must providepwsid
    Records returneddrinking_water_enforcement_action
    How to get more resultsoffset (offsetField: offset, limitField: limit)
    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "pwsid": {
          "type": "string",
          "pattern": "^[A-Za-z0-9]{7,12}$",
          "description": "EPA public water system id, usually nine characters such as TX0010001. Some tribal and federal systems are all digits, such as 061620001. Find one with findWaterSystems."
        },
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 200,
          "description": "Rows to return. Defaults to 25."
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10000,
          "description": "Rows to skip. Defaults to 0."
        }
      },
      "required": [
        "pwsid"
      ],
      "additionalProperties": false
    }
    • An enforcement action is a step a primacy agency took against the system, and most are administrative. It is not a finding about any parcel or address.
    • A system can have violations with no enforcement action against it, so a zero here is not a clean compliance record.

    SDWIS carries no penalty amount, so a missing dollar figure is not a zero.

  • getServiceInfo

    read

    Tables read, coverage measured on the probe date, and what SDWIS cannot answer.

    Records returneddata_source
    How to get more resultsnone
    FreshnessScheduled (source-level)
    Input schema
    {
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": false
    }

    States the missing geometry and the Texas county-only reality explicitly.

Where this source is used