Water quality intelligence
for every US address.
One API call. Municipal systems, private wells, PFAS, lead, 30+ contaminants. A–F grades your users actually understand.
Send an address
GET /api/v1/water?address=123 Main St, Denver COAny US address, lat/lng coordinates, or water system ID.
Get a grade
Overall A–F water quality grade plus per-contaminant breakdown. Municipal or private well — the API figures out which.
Display it
Letter grades, risk flags, contaminant details — everything you need for a listing page, disclosure report, or risk dashboard.
What you get in every response
PFAS detection
Per-compound PFAS detection and MCL exceedance flags from EPA’s fifth Unregulated Contaminant Monitoring Rule.
Lead risk tier
Service line material inventory data — known lead lines, unknown lines, and worst-case percentages.
Violation history
Ten-year health violation count, open violations, and trend direction from EPA compliance records.
CCR contaminant data
Utility-reported contaminant concentrations extracted and normalized from Consumer Confidence Reports. Coverage: ~49% of US population. Actively expanding.
Well chemistry
Nearby monitoring well results and USGS modeled risk for PFAS, arsenic, and nitrate at any US coordinate.
Address resolution
Any US address geocoded and matched to the correct water system or classified as a private well area.
Real API responses
These are actual responses from the WaterScore API. Not mock data.
{
"request_id": "a3f2d1b0-7c4e-4abc-8def-112233445566",
"pwsid": "CA1910067",
"system_name": "LOS ANGELES-CITY, DEPT. OF WATER & POWER",
"water_type": "municipal",
"state": "CA",
"population_served": 4041284,
"service_area": "LOS ANGELES",
"overall_grade": "B",
"grades": {
"pfas": {
"grade": "A",
"detected": false,
"detected_compounds": [],
"above_mcl": false
},
"lead": {
"grade": "A",
...
}API Reference
Request Parameters
| Field | Type | Description |
|---|---|---|
address | string | Any US street address. Geocoded automatically. |
lat, lng | number | Coordinates. Use instead of address for precision. |
pwsid | string | 9-character EPA water system ID. Fastest lookup. |
Priority: pwsid → lat/lng → address. At least one required.
Top-Level Response
| Field | Type | Description |
|---|---|---|
request_id | string | Unique ID for this request |
pwsid | string | EPA water system ID (municipal only) |
system_name | string | Water system name (municipal only) |
water_type | "municipal" | "well" | Whether address is on public water or a private well |
overall_grade | A–F | Composite water quality grade |
data_sources | string[] | Which data sources contributed (SDWIS, UCMR5, CCR, WQP) |
data_confidence | object | Per-source data maturity: "verified" (federal/state data) or "preliminary" (WaterScore-extracted, expanding coverage) |
Grades Object (Municipal)
| Field | Type | Description |
|---|---|---|
grades.pfas.grade | A–F | N/T | PFAS contamination grade. N/T = not tested under UCMR5. |
grades.pfas.detected | boolean | Whether any PFAS compounds were detected |
grades.pfas.above_mcl | boolean | Whether any PFAS exceed federal limits |
grades.lead.grade | A–D | ? | Lead risk based on service line inventory data |
grades.lead.risk_tier | string | none, low, medium, high, unknown_high, no_data |
grades.violations.grade | A–F | Based on EPA compliance history (10-year window) |
grades.violations.has_open_violations | boolean | Currently unresolved health violations |
grades.violations.trend | string | improving, stable, or worsening |
grades.chromium6.grade | A | C | F | Hexavalent chromium (Erin Brockovich contaminant) |
grades.lithium.grade | A | B | C | Naturally occurring lithium levels |
CCR Object (Municipal, when available)
| Field | Type | Description |
|---|---|---|
ccr.available | boolean | Whether CCR data exists for this system |
ccr.report_year | number | Year of the Consumer Confidence Report |
ccr.overall_grade | A–F | null | Grade based on worst federal primary standard contaminant |
ccr.contaminants | array | Per-contaminant breakdown |
ccr.contaminants[].name | string | Contaminant name |
ccr.contaminants[].grade | A–F | Individual contaminant grade |
ccr.contaminants[].value | number | Detected level |
ccr.contaminants[].mcl | number | Federal limit (MCL, action level, or secondary standard) |
ccr.contaminants[].pct_of_mcl | number | Detected level as fraction of limit (1.0 = at limit) |
ccr.contaminants[].limit_type | string | federal, action_level, secondary, or who |
Well Object (Private well)
| Field | Type | Description |
|---|---|---|
nearby_wells.count_in_radius | number | Monitored wells within search radius |
nearby_wells.radius_miles | number | Search radius used |
nearby_wells.grades | object | Per-contaminant grades from nearby monitoring wells |
modeled_risk | object | USGS statistical model predictions (pfas, arsenic, nitrate) |
modeled_risk.*.grade | A–F | Risk grade from model probability |
modeled_risk.*.probability | number | Probability of exceedance (0–1) |
Grade Scale
| Field | Type | Description |
|---|---|---|
A | Excellent | Well within limits (<10% of MCL) or not detected |
B | Good | Detected at low levels (10–30% of MCL) |
C | Moderate | Moderate levels (30–70% of MCL) or informational finding |
D | Concern | Approaching limits (70–100% of MCL) |
F | Failing | Above federal limits |
N/T | Not Tested | PFAS only — system not included in EPA monitoring |
? | Unknown | Lead only — service line inventory data unavailable |
Water quality is a material risk factor — and nobody’s data covers it.
PFAS contamination depresses property values. Lead service line replacement costs fall on homeowners. Private well contamination kills rural land deals. Proptech platforms, lenders, and environmental consultants integrate flood, wildfire, and air quality data — but drinking water quality has been a blind spot. The data exists — it’s buried across 48,000 individual utility reports, state databases, and federal monitoring programs. Nobody had stitched it together.
WaterScore extracts, normalizes, and grades that data so you don’t have to.
Built for proptech
Property listings
Add a water quality grade badge to every listing. Flag properties with PFAS detections or lead risk before your buyers ask.
Mortgage & risk
Screen addresses for water quality risk at origination. 48,000+ municipal systems and private well coverage nationwide.
Relocation tools
Help movers compare water quality across cities. One API call returns everything — no hydrogeology degree required.
Need the full dataset?
For platforms that want to integrate WaterScore data into their own infrastructure — not query it per-address — we offer bulk data licensing. You get the complete graded dataset for 48,000+ US water systems, CCR contaminant extractions covering ~49.4% of the US population, and quarterly refresh delivery. Private well chemistry remains real-time via API (coordinate-dependent, can’t be pre-cached).
Pricing is based on coverage scope, refresh frequency, and distribution rights. Contact us to discuss.
Get your API key
You’ll receive your API key via email within 24 hours. No credit card required for Trial.