Skip to main content
๐Ÿ’ง TapWaterData

US Water Hardness Dataset โ€” free CSV & JSON

The full city-level water hardness dataset behind this site, free to download and reuse under CC BY 4.0. No email, no sign-up โ€” every value with its source, tier, and sample date.

Data updated July 6, 2026. 16,561 cities per file; built and verified as documented in the data & methodology.

water-hardness.csv

One row per city, pinned 17-column header, license and citation in # comment rows. Opens in Excel, Sheets, R, pandas.

3.0 MB ยท 16,561 cities

Download CSV
water-hardness.json

The same 17 fields as the CSV, as structured JSON, plus a _meta block (license, suggested citation, generatedAt, schemaVersion).

5.4 MB ยท 16,561 cities

Download JSON

What's included

  • 16,561 US cities (88.2% of the 18,775 cities we track, reaching 97.5% of tracked city population), one row per city.
  • 6,778 cities with utility-reported hardness (tier T1), cited with the utility name and PWSID.
  • 836 cities with hardness computed from utility-reported calcium and magnesium (tier T2, USGS/Standard Methods 2340 B formula).
  • 8,947 cities with a labeled county ambient estimate from EPA/USGS Water Quality Portal samples (tier T3) โ€” always carrying the sample count behind the median.
  • Cities whose tap-tier values conflict beyond tolerance are flagged disputed with the conflicting range โ€” currently 1,556 cities. The 2,214 tracked cities with no defensible value in any tier are honestly absent, never guessed.

Column dictionary

All 17 CSV columns, in file order. The JSON entries carry the same fields (optional ones are omitted instead of empty; range_min/range_max appear as a range pair).

ColumnTypeDescription
slugstringCity identifier in "state/city" path form, e.g. "il/chicago" โ€” matches tapwaterdata.com city URLs.
citystringCity display name.
statestringFull state name.
stateCodestringTwo-letter USPS state code.
latnumber | emptyCity latitude (WGS 84), resolved from the city's ZIP codes; empty when no ZIP resolves.
lngnumber | emptyCity longitude (WGS 84), resolved from the city's ZIP codes; empty when no ZIP resolves.
populationintegerPeople served across the city's tracked water utilities.
hardness_mg_lnumberCanonical water hardness in mg/L as calcium carbonate (population-weighted across the city's utilities).
hardness_gpgnumberThe same value in grains per gallon (1 gpg = 17.1 mg/L, NIST SP 811).
categoryenumUSGS classification band: soft | moderately_hard | hard | very_hard.
tierenumSource tier: T1 (utility-reported) | T2 (computed from utility-reported calcium + magnesium) | T3 (labeled county ambient estimate).
sourcestringPrimary citation for the value (utility name + PWSID, the T2 formula reference, or the county Water Quality Portal pull).
sourceDatedateMost recent contributing sample/report date, ISO YYYY-MM-DD.
nSamplesinteger | emptyT3 only: number of Water Quality Portal samples behind the county median; empty for measured (T1/T2) cities.
disputedboolean | empty"true" when the city's tap-tier values conflict beyond tolerance (ยฑ15% or ยฑ10 mg/L, whichever is larger); empty otherwise.
range_minnumber | emptyLower bound of the conflicting values for disputed cities (mg/L); empty otherwise.
range_maxnumber | emptyUpper bound of the conflicting values for disputed cities (mg/L); empty otherwise.

License

The dataset is published under Creative Commons Attribution 4.0 (CC BY 4.0). You may copy, share, and republish it โ€” including commercially and in modified form โ€” under one condition: attribution. Credit TapWaterData and link back to this site (the suggested citation below satisfies it). Both files carry the license and citation in their metadata, so a downloaded copy stays self-describing.

Suggested citation

TapWaterData Water Hardness Dataset, 2026. https://www.tapwaterdata.com/water-hardness โ€” CC BY 4.0

Journalists and researchers: how every value is sourced, tiered, verified, and where its limits are is documented on the methodology page.

Embed the hardness checker

Prefer a live widget over the raw files? Paste this snippet to put the ZIP-code hardness checker โ€” backed by this same dataset โ€” on your own site. Free to use with the credit link.

<iframe src="https://www.tapwaterdata.com/embed/hardness-checker" width="100%" height="420" style="border:1px solid #e5e7eb;border-radius:8px;" title="Water hardness checker by TapWaterData" loading="lazy"></iframe>
<p><a href="https://www.tapwaterdata.com/water-hardness">Water hardness data: TapWaterData</a></p>

Free to use. Please keep the credit link below the widget โ€” it tells your readers where the data comes from.

By TapWaterData Editorial.

Stay Informed About Your Water Quality

Get EPA reports, filter recommendations, and safety alerts for your area.

Join 10,000+ people protecting their families. Unsubscribe anytime.