Methodology
How the espresso water map works
This is the sober sibling of our data work: 81 of the 100 largest US cities with a verified hardness figure, 66 with full scores, every number traceable to the utility that published it. Rigor is the product here, so every judgment call is on this page.
Judgment calls, in the open
- Official sources only, with verbatim receipts. Every value comes from the city utility's own published report or official water quality page (or an archived copy of that same official document where a site blocks retrieval). Each number was extracted together with a verbatim quote from the source, and a verification script rejects any value whose quote is not literally present in the cached document. Values from documents we could only read visually (image-based PDFs) or remotely are flagged as such in the dataset's source column.
- Missing data is excluded, never estimated. If a utility does not publish a parameter, that city is scored without it or excluded. No value was ever estimated, interpolated, or filled from third-party databases. A full score needs at least three of the five taste parameters plus hardness or alkalinity.
- A freshness cutoff. Values published for 2021 or later are included, with the data year recorded per row (most are 2024 or 2025). Where a utility's only published figure is older (Newark 2019, New Orleans 2007, Colorado Springs 2011 to 2015, Milwaukee's alkalinity and pH from 2015, Dallas alkalinity from 2002), we excluded it rather than blend decade-old numbers into a current map. Honolulu is excluded from hardness because its utility publishes only an island-wide 25 to 300 ppm range across many separate systems.
- Units normalized, conversions disclosed. Grains per gallon convert at 17.12 ppm per grain; Denver's ppb figures divide by 1000; bicarbonate alkalinity converts to CaCO3 equivalent at 50/61. Where a report gives only a range, we use the midpoint and mark the row estimated_avg in the dataset.
- The SCA targets, and where they come from. Hardness 17 to 85 ppm (target 68), alkalinity near 40, pH 6.5 to 7.5, TDS 75 to 250, low chloride. The SCA's own handbook is paywalled, so these figures are corroborated across multiple published summaries of the standard and stated here as working targets. Scoring gives full points inside a range and decays linearly outside it, reaching zero one full range-width beyond the edge. Hardness and alkalinity carry the most weight because they dominate extraction and scale.
- Machine mortality is comparative, not a warranty claim. The score is driven by carbonate hardness, the scale former at boiler temperature, taken as the lesser of total hardness and alkalinity. The descaling interval shown is an indicative figure for a home machine pulling two double shots a day, anchored to common manufacturer guidance, and exists to compare cities, not to override your machine's manual.
- Report vintages are mixed by design. Utilities publish on their own cycles. Roughly half the dataset covers calendar 2025, most of the rest 2024, a handful 2022 to 2023 where that is the newest published edition (noted per row). The study refreshes annually as new reports drop.
Reproducibility
The full pipeline (fetch scripts, extraction with quote verification, scoring code with unit tests) is public in our repository, and every download is logged to a manifest with URL, timestamp, and HTTP status. The dataset CSV carries each city's report URL and data year. Download the dataset or head back to the study. Fact-checking a number? Email hello@baristabench.com. We answer.