How whatwatercosts.org measures water bills
Version v0.2.1 · View on GitHub
whatwatercosts.org shows what a typical household pays for water, utility by utility, across the United States. This page explains where those numbers come from, how we check them, and where they can be wrong. For more about the project, see About.
At a glance
| What the number means | The monthly water bill for a single-family home using 6,000 gallons, calculated from the utility's own published rates. |
| Coverage | Our AI agent has tried to find and read the rates of every community water system that serves 10,000 or more people (4,609 systems). We research smaller systems as we can, or when a state or local agency or organization asks. In California, for example, the agent has tried every system. |
| How it's made | An AI agent, working from a tested set of instructions written for water rates, finds and reads each utility's rate schedule. Ordinary code calculates the bill and checks it. |
| How accurate | In a random sample checked by hand, 17 of 18 published bills were within 5% of the correct amount. 16 were within 50 cents. |
| When we don't publish | When our checks can't confirm a bill, we say so on the page instead of showing a number. Common reasons: no current rate schedule online, two readings of the schedule that disagree, or a schedule that doesn't say how often customers are billed. |
| Biggest limits | Many small systems don't post rates online. Rates change, and a bill is only as current as the schedule it came from. Water only: no sewer, trash or stormwater. |
| Updated | October 8, 2026. Each bill shows when its rates took effect and when we last checked. |
| Cite as | whatwatercosts.org, U.S. Residential Water Rate Database, methods v0.2.1, /methodology. |
Rates effective 2026-07-01 · Updated Oct 2026
Average cost per 1k gal
At 6,000 gal, fixed charge included.
Read by an AI agent (a large language model) from the utility's official rate schedule.
Meter charge (5/8-inch meter): $12.40 per month First 2,000 gallons at $3.10 per 1,000 gallons: $6.20 Next 4,000 gallons at $5.25 per 1,000 gallons: $21.00 State water quality fee: $0.30 Total for 6,000 gallons: $39.90 per month
Every utility page shows the bill, the date its rates took effect, how we calculated it, and a link to the source. (Simulated utility.)
1. What it's for, and what it isn't
Use it to:
- Compare typical household water bills across utilities, cities and states. Start from the map, a state page, or search for a city or utility.
- Find utilities whose bills are unusually high or low for their region. Each utility page compares its bill with nearby utilities.
- Start research or reporting on water affordability.
Don't use it for:
- Your exact bill. Your bill depends on how much water you use, your meter size, where you live in the service area, and the sewer and other charges on the same bill.
- Legal filings, rigorous studies or rate cases without checking the utility's own schedule. Every bill links to its source so you can.
- Year-over-year comparisons without checking the effective dates. Two utilities' rates may be from different years.
2. What we measure
We compare every utility at the same amount of water: 6,000 gallons a month. At average indoor water use (83 gallons per person per day), that's about what a household of two to three people uses (Patterson, Bryson and Doyle, 2023). Researchers use the same amount to study water affordability nationwide. The UNC Environmental Finance Center also reports bills at 6,000 gallons in its rates dashboards.
The bill is for a single-family home on the smallest standard household meter, inside the city or standard service zone. If rates change by season, we use the season with the highest bill. All bills are converted to a monthly amount, whether the utility bills monthly, every two months or quarterly.
These rules decide which charges count:
| Charge | Counted? | Why |
|---|---|---|
| Fixed charge (meter or base charge) | Yes | Every household pays it. |
| Usage charges, including tiers | Yes | The bill at 6,000 gallons. |
| Required water fees (supply, infrastructure, environmental, state per-connection fees) | Yes | Every customer pays them for water service. Leaving them out was the most common error in our earlier data. |
| Fees that depend on usage | Only if they apply at 6,000 gallons | A surcharge above 4,000 gallons counts. A low-use discount doesn't. |
| Minimum charges | As a floor, not added on top | That's how a minimum works on a bill. |
| Sewer, stormwater, trash | No | Separate services, even when they're on the same bill. |
| Taxes, franchise fees, payments in lieu of taxes, right-of-way fees, property-tax charges | No | They are payments to a government, not the price of water. The UNC Environmental Finance Center and the AWWA rate survey leave them out too. We still record them. |
| Drought or emergency surcharges not currently in effect | No | We use the rates in effect when we checked. |
Read by an AI agent (a large language model) from the utility's official rate schedule.
Meter charge (5/8-inch meter): $12.40 per month First 2,000 gallons at $3.10 per 1,000 gallons: $6.20 Next 4,000 gallons at $5.25 per 1,000 gallons: $21.00 State water quality fee: $0.30 Total for 6,000 gallons: $39.90 per month
The calculation behind each bill, step by step. Here: a $12.40 meter charge, two usage tiers, and a 30-cent state fee add up to $39.90. Open "How we calculated this" on any utility page to see the real one. (Simulated utility.)
3. How a bill is made
- Find and read. An AI agent searches the web for the utility's current, official rate schedule. It follows instructions we wrote and tested for water rates. It copies every rate into the Open Water Rate Specification (OWRS), a standard format from the California Data Collaborative that holds a utility's full rate structure. It must quote the text behind each number.
- Read it again. We do the first step twice, in two independent sessions that don't see each other's work. AI agents don't give the same answer every time, so one reading isn't enough. When both readings produced a bill, they agreed 79% of the time.
- Save the sources. We download and keep a copy of every page and document the agent cited, with a digital fingerprint (a SHA-256 hash). Utility websites change. A saved copy means any bill can be checked later.
- Calculate. Ordinary code, not AI, calculates the bill from the rates stored in OWRS. It follows the rules in section 2. If a unit, billing period or tier is missing or contradicts itself, the code produces no bill rather than guess.
- Check. Automatic checks decide whether to publish the bill or hold it for review (section 4).
Why AI only does the reading. Every utility publishes its rates differently: web pages, PDFs, ordinances, scanned tables. Finding and reading them is the part fixed rules can't do well. Arithmetic is different. It should give the same answer every time, and anyone should be able to check it. When we looked at wrong bills in our earlier data, most came from our own rules and code, not from the reading. Keeping the math in plain code makes those errors visible and fixable.
The agent's rules. The agent follows a written set of instructions. Among them: use only official sources (the utility's own site, a city ordinance or a state regulator filing); confirm the document covers this exact system; use current adopted rates, not proposed or old ones; and say "not found" rather than guess. The full instructions are published on GitHub. The agent tool also reads an earlier version of our instructions (AGENTS.md), which we publish alongside them. We'll drop it in the next version.
Models. The agent is OpenAI's GPT-6 Luna, run through OpenAI's Codex tool. We chose it for its balance of cost and accuracy, and we keep testing other models. Every bill records the model, the version of the instructions, and the version of our code that produced it.
When the two readings disagree
We never average two readings or take a vote. Instead:
- If they used schedules with different effective dates, we use the newer schedule that's already in effect, as long as its date appears in the saved document. A common cause is one reading using last year's rates.
- If a schedule has no date, we show both bills and explain why.
- Otherwise, a third AI session, with no web access, looks only at the saved documents and the one point where the readings differ, and picks one. It must quote the saved text to back its choice. If it can't, the bill is held for review and the site shows both amounts.
4. When we hold a bill back
A missing number is better than a wrong one. When our checks can't confirm a bill, the utility's page says so and gives the reason. We hold a bill back when:
- we couldn't find a current, official rate schedule;
- the two readings gave different bills and we couldn't settle it;
- the schedule doesn't say how often customers are billed, or what unit of water its prices use;
- a charge appeared twice in a reading;
- the rates depend on each household's own water budget or usage history, so there is no single typical bill;
- the bill came out below $10 or above $300 a month, outside a plausible range we can confirm automatically.
Some systems don't sell water to households at all. They sell to other utilities, or serve a single campus or base. We mark these "Doesn't bill households." To catch them, we look at how many people EPA says a system serves for each connection. A wholesaler that serves 2 million people through 200 connections is not a household utility.
Monthly Rate
The rate schedule's unit of water couldn't be confirmed. We're giving it a second, more careful reading.
Monthly Rate
Bill under review. Two independent readings of the rate schedule gave different bills. The actual bill is most likely one of these two amounts; we're checking which.
The four ways a bill can appear. (Simulated utilities.)
These are the most common reasons a bill is under review, for systems that serve 10,000 or more people:
| Why the bill is under review | Share |
|---|---|
| No current, official rate schedule found online | 54% |
| A detail the bill depends on is missing or unclear (billing period, unit, minimum charge, meter size, a surcharge) | 14% |
| The two readings disagree | 12% |
| A reading didn't add up (a charge recorded twice, tiers that overlap or skip) | 9% |
| The system may not bill households | 4% |
| Rates set by each household's own water budget | 2% |
| Bill outside $10 to $300 a month | 1% |
| Other | 6% |
Shares as of October 8, 2026. They change as we recheck utilities.
A second reading. Since October 2026 (version v0.2.1), bills under review for systems serving 10,000 or more people get a second, more careful reading: the same model, with more reasoning and more time. The new bill is published only if it passes the same checks. We start with the readings that disagreed, then the ones the calculator couldn't finish, then the systems where no schedule was found, larger systems first, up to 25 a day. We skip bills held back for a reason more reading can't fix, such as rates set by each household's own water budget. In our first tests, this published about three in four of those bills, and none we could check against a known answer was wrong. Bills already published under v0.2.0 stay until their next scheduled refresh.
If you know where a utility posts its rates, you can send us the schedule.
5. How well it works
A random sample, checked by hand. Before this release, we drew 25 utilities at random from the systems that serve 10,000 or more people: 10 large (100,000 people or more), 10 mid-size (25,000 to 99,999) and 5 small (10,000 to 24,999). We drew more large systems than a plain random draw would, because they serve most people. A person found each utility's official schedule and worked out the correct bill using the rules in section 2.
This is a held-out test. None of these utilities were used to develop or tune the agent's instructions, so the results show how the agent does on utilities it hasn't seen.
| Measure | Result |
|---|---|
| Sampled utilities with a published bill | 18 of 25 |
| Published bills within 5% of the correct amount | 17 of 18 (likely range: 74% to 99%) |
| Published bills within 50 cents | 16 of 18 |
| Median error | $0.00 |
| Published bills more than 5% off | 1 (about 10% low) |
Twenty-five utilities is a check, not a precise measurement. That's why we give the likely range. Of the 7 without a published bill, 6 were held for review and 1 was correctly marked as not billing households.
Learning from past mistakes. Our earlier data had errors, such as bills that didn't match the utility's schedule and required fees that were left out. Each confirmed mistake becomes a test case, and every new version must get it right or hold it back before release. Reports from readers and utilities are how we find many of them (section 9).
6. Where it goes wrong
Finding the wrong document. The agent sometimes uses a budget summary, last year's schedule, or a page from a different utility. Small systems are most at risk. When a small system has no rates online, a nearby city's rate sheet can look like a good match. In a hand check of small California systems, this happened for about 1 to 3% of them. These bills look normal and pass our checks, which makes them hard to catch.
No rates online. Many small systems share their rates only by mail, on a paper bill, or at a board meeting. When we researched every small system in California (fewer than 10,000 people), we found no current schedule online for about 7 in 10. We show these as under review, not as missing.
Hard-to-read rate designs. Charges per day, tiers that depend on each household's usage history, water included in a minimum charge, and fees listed on a separate page are easy to misread. Rate tables published only as images are harder still.
Wrong bills that pass every check. Our checks catch bills that are implausible or that the two readings disagree on. They can't catch a wrong bill that both readings got wrong the same way. In the random sample, 1 of 18 published bills was wrong in this way.
Rates change. Many utilities change rates every year, often on January 1 or July 1. A bill is only as current as the schedule it came from. Every bill shows its effective date.
Rate schedules with their own errors. Some schedules contradict themselves, for example by giving a unit or billing period that doesn't fit the numbers. We don't fix these ourselves. We hold the bill back and, where we can, let the utility know.
7. Coverage
We start from EPA's Safe Drinking Water Information System (SDWIS), which lists about 49,000 community water systems. EPA records give us each system's name, location, population served, number of connections, owner type and water source. Service area maps come from EPA's Community Water System Service Area Boundaries.
Our AI agent has tried to find and read the rates of every system that serves 10,000 or more people, since together they serve most Americans. A system counts as covered once the agent has tried, whether or not it found a bill we could publish. We research smaller systems on request. If you work with a state or local agency or organization and need rates for smaller systems, email [email protected].
To see coverage in your area, open your state's page or search for your city on the home page.
8. Versions, data and API
Releases. Each release has a version number, like v0.2.0. The methods on this page, the agent's instructions and the code all carry the same version. Every bill records the release, the code version and the instruction version that produced it. Each release's code, instructions and methods are published on GitHub, one tagged version per release, so earlier versions stay available.
What we store. For each utility we store the full rate structure in OWRS, not just the 6,000-gallon bill: every customer class, fixed charges by meter size, usage tiers, fees, billing periods and effective dates. That means bills at other usage levels, or for businesses, can be calculated later without collecting the data again.
Getting the data.
- Bulk download:
/api/export.json - Search by name:
/api/utilities?q= - Guide for AI tools and crawlers:
/llms.txt - Code and instructions: GitHub
- License: code under MIT; this methods doc, its figures and the agent's instructions under CC BY 4.0
Source documents. Each bill links to its source and records the fingerprint of the saved copy. We keep the copies so bills can be checked, but we don't redistribute them.
9. Corrections
Every utility page has a Report a problem link. A person reviews every report. When a correction is accepted, we add a new record rather than change the old one, so every change can be traced. Corrected bills are marked "Human verified."
For journalists. Bills change as utilities change their rates and as we recheck them. Please cite the date and link the utility's page, and email [email protected] before publishing: we'll confirm the current figure and how it was calculated.
For utilities. If your bill is wrong or out of date, or you'd like us to use a specific page for your rates, use Suggest a correction on your utility's page, submit your rate schedule, or email [email protected] with a link to your current schedule.
10. Water burden
Each utility page also shows water burden: the yearly water bill as a share of the area's median household income.
water burden = (monthly bill × 12) ÷ median household income
EPA's affordability guidance uses 4% of income for water and sewer together. Since we report water only, we use 2% as the matching mark for water alone (EPA Financial Capability Assessment Guidance).
Income comes from the Census Bureau's American Community Survey (2022 five-year estimates). Where EPA has mapped a utility's service area, we weight the income of the census tracts it covers by population. Otherwise we use the ZIP code. Service area maps are approximate, so a utility's real customers may differ from its mapped area.
Changelog
| Version | Data release | Date | What changed |
|---|---|---|---|
| v0.2.1 | v0.2.1 | 2026-10-09 | Bills under review for systems serving 10,000 or more people get a second, more careful reading (more reasoning and more time). Bills that then pass the same checks are published. Bills published under v0.2.0 are not re-read. |
| v0.2.0 | v0.2.0 | 2026-10-08 | First release of the water agent. Two independent readings, saved sources, bills calculated in plain code, and bills held back when checks fail. Covers systems serving 10,000 or more people nationwide and all California systems. |
Acknowledgments
- UNC Environmental Finance Center, for decades of rate research and the North Carolina rate data we use to check our work.
- California Data Collaborative, for the Open Water Rate Specification.
- U.S. EPA, for the Safe Drinking Water Information System and service area boundaries.