How Hard Water Map is built

Hard Water Map is built from 2,814,161 laboratory hardness measurements at roughly 367,000 USGS and EPA monitoring stations, aggregated to 2,977 US counties under one fixed quality-control contract. Every number on the site traces to public data at the point it is shown; where data is insufficient, we say so rather than estimate.

This page describes the whole system end to end — every source, the quality-control contract each number passes, the gate that decides whether a place is published, and the things we deliberately refuse to do. It invents nothing: each figure here is one you can trace back to public data, the conversion registry, or the build reports. The short version is that we publish measured hardness where the public record supports it, and we say so plainly where it doesn't.

Compiled and maintained by Marko Visic, MPharm, BSc Physics. Sources last verified (see the dates in the source table).

Sources

Data sources

Everything on the site is built from public records. The hardness layer is the backbone; the companion parameters, service-area boundaries, aquifer geometry, and population figures each come from a named federal source with a retrieval date. Where a dataset is version-pinned, we pin it: the USGS Principal Aquifers geometry is fixed to its published DOI and verified by sha256 so the map can never silently drift onto a different edition of the file.

SourceWhatWindow / vintageRetrieved
USGS/EPA Water Quality PortalHardness (characteristic “Hardness, Ca, Mg”)full history2026-07-18
USGS/EPA Water Quality PortalpH · TDS · alkalinity · calcium · magnesiumpH ≥2015 · TDS ≥2010 · Ca/Mg/alkalinity ≥20002026-07-21
EPA Public Water System Service Area Boundaries (SAB v3)44,656 community-water-system service-area polygonsv3, March 20262026-07-18
EPA SDWA (ECHO)Water-system name, type, source, size, population served~FY2021 (population served approximate)2026-07-18
US Census ACS 5-year (B01003)County population (for band-population)20232026-07-21
US Census ZCTA520→county relationship fileZIP→county mapping20202026-07-22
USGS Principal Aquifers (aquifrp025, Ground Water Atlas)Principal-aquifer geometry for the interactive map — DOI 10.5066/P9Y2HOUJ, public domain (sha256-pinned)1:2,500,0002026-08-10

Quality control

The quality-control contract

Raw monitoring data is messy — mixed units, lab flags, the occasional impossible number. Every hardness value passes one fixed contract before it counts. Units are normalized to mg/L as CaCO₃: mg/L, ppm, and “mg/L as CaCO₃” are used as-is; grains per gallon are multiplied by 17.118; µg/L by 0.001; the codes none, mmol/L, meq/L, µS/cm, mL are dropped as unmappable rather than guessed at.

Rows flagged as quality-control activities are excluded from the hardness lane — those are the lab's own blanks and spikes, not the water. Readings dated outside 1900–2026 are dropped as data-entry errors. Values above 2,000 mg/L are kept in the sample count but excluded from medians as physically extreme, so one transcription slip can't drag a county's number upward. The contract is fixed and versioned: a change to it is a change to every number, so it doesn't change casually.

Companion-parameter medians (pH, TDS, alkalinity, Ca, Mg) may include a small share of quality-control samples; the hardness lane is fully QC-filtered.

Gate

Publication gate and absence

Not every place has enough data to earn a number. A county is published only when it clears a fixed gate: at least 8 results, at 2 or more distinct stations, with at least one reading since 1995. The three conditions guard three different failure modes — too few samples to be stable, a single station standing in for a whole county, and a value so old it no longer describes today's water.

Counties that don't clear the gate are drawn in gray on the map, and their pages state the absence in plain words — “no public measurements” — instead of filling the hole with an estimate. Absence is a finding, not a gap to paper over; a reader who sees gray knows exactly what we don't know.

The gate is deliberately conservative. It is better to show fewer counties and have every one of them stand up to scrutiny than to publish a thin, wobbly number for the sake of a full map. Of the roughly 3,100 counties with any data at all, 2,977 clear the gate; the rest are honest gray.

County value

How a county value is computed

Each county's hardness is the median of all non-extreme measurements at monitoring stations attributed to it — a pooled value across every site and every year, not a single reading. We use the median rather than the mean on purpose: hardness distributions are skewed and carry occasional extreme values, and the median is the number that best answers “what is a typical sample here” without being pulled by a handful of outliers. The pages also show the 10th and 90th percentiles so the spread is visible, not just the middle.

Companion parameters (pH, TDS, alkalinity, calcium, magnesium) are attributed only at stations that also report hardness, so their per-place coverage is narrower than hardness and their medians are read with that caveat. A small number of results come from stations with no county code; these are counted in the totals but shown only as a per-state footnote, never assigned to a county they might not belong to.

Bands

The hardness bands

Every color on the map is the US Geological Survey's hardness classification, applied to the county median, in mg/L as CaCO₃: soft below 60, moderately hard 60 to 120, hard 120 to 180, and very hard 180 and above. The same value in grains per gallon — the unit US softeners are set in — is simply mg/L ÷ 17.118, so 120 mg/L is about 7 gpg. The bands are a fixed scale, not our opinion; we classify, we don't re-draw the thresholds.

Coverage

Lookup coverage and ZIP routing

70.2% of the US population lives in a ZIP whose centroid falls within a mapped community-water-system service area (a conservative zip-centroid lower bound). For context, EPA reports that about 87% of Americans are served by community water systems, so real utility coverage is higher than this aggregate measures.

A ZIP is a resolution layer, never a measured claim of its own. When you look up a ZIP, the hardness figure it shows is the county aggregate routed to that ZIP — the same gated county median described above — while the utility match comes from the service-area boundary. An address-level answer would be more precise than either; we say so rather than imply the ZIP number was measured at your street.

Geography

Population and geography handling

Band-population uses ACS 2023 county totals. Connecticut populations use 2020 decennial counts on legacy county FIPS, because ACS reports Connecticut as planning regions that do not match the USGS county coding. Two Alaska areas renamed after their data was collected are carried under current names — Wade Hampton → Kusilvak Census Area, Valdez-Cordova → Chugach & Copper River census areas (populations summed from their current FIPS). Puerto Rico's 78 municipios and five “county-unknown” aggregates fall outside band-population scope and are reported as such, not folded into national totals.

Scope

What we deliberately don't do

The discipline is as much about what we leave out as what we publish. We do not estimate or interpolate hardness between stations — no smoothing a value across a county that has none, no borrowing a neighbor's number. We make no address-level measured claim, because nobody has street-scale hardness data and pretending otherwise would be the opposite of the site's point. Places that fail the gate get honest absence, not a modeled guess.

We also carry no product reviews, no affiliate links, and no health advice — the effects covered are limited to appliances, plumbing, and cleaning. US territories sit outside band-population scope rather than being approximated into it. Each of these is a line we hold on purpose: the value of a measured-data product is that its numbers are measured, and its blanks are honest.

Conversions

Conversion constants

Unit× to mg/L as CaCO₃Basis
grains per gallon (gpg)17.1181 grain / US gallon
°dH (German)17.84810 mg/L CaO × 100.087/56.077
°fH (French)10definition
mmol/L100.087molar mass CaCO₃
mEq/L50.043equivalent weight CaCO₃
ppm1≡ mg/L (dilute)

Worked examples: the water-hardness scale.

Limitations

Known limitations

Measured data has real edges, and naming them is part of the method. Station coverage is uneven: monitoring stations cluster where studies and permits happened, not on a uniform grid, so a county median describes the water that was sampled, which is not always a random sample of every tap. Records span decades: a median can pool a reading from the 1980s with one from last year, which is why each place also carries its newest and oldest years and a since-2000 count. And a service-area boundary is not a survey line at street scale — the SAB polygons and ZIP centroids place you in the right system and the right county, not at a surveyed property line. None of these sink a measured figure; they set the confidence you should read it with.

Standard

Verified or omitted

One editorial rule sits above the rest: every number is verified at a named source at the point it is shown, or it is omitted. Confidence language scales with sample size, and absence is stated plainly rather than filled. It is the same standard whether the number is a county median, a conversion constant, or a coverage percentage — if we can't trace it, it doesn't ship. That's what makes the map citable and the blanks trustworthy.

Freshness

Freshness and corrections

Data was last verified 2026-07-22. We plan quarterly snapshot refreshes; the first scheduled refresh is still pending, and the “last verified” date on every page moves only when the underlying data actually does. Spot an error — a county figure, a utility match, a unit that looks wrong? Report it; corrections are logged, credited, and shipped with the next snapshot.

Cite this page:Methodology — Hard Water Map.” Hard Water Map. Retrieved 2026-07-22, https://hardwatermap.com/methodology/