Data audit · URDB snapshot 2026-08-27
What the free tariff database gets wrong, measured
The NREL Utility Rate Database is the public source behind most residential electricity cost estimates. It is free, comprehensive, and quietly unsafe to use as-is. Three defects account for most of the damage. Each one is counted below on the 2026-08-27 snapshot, with the exact tariff records so you can check them yourself.
Defect 1 · More than half the residential records are expired
Of 13,835 residential tariffs in the bulk file, 7,460 carry an end date that has already passed. The API does not filter them for you. A naive lookup by utility name returns expired and current plans side by side, and the expired ones often have the friendlier names.
| Filter step | Records | Share of total |
|---|---|---|
| All residential records | 13,835 | 100% |
| Has an end date (expired) | 7,460 | 53.9% |
| No end date (nominally current) | 6,375 | 46.1% |
| …of which filed before 2024 | 5,550 | 40.1% |
| Current and filed 2024 or later | 825 | 6.0% |
The is_default flag does not rescue you: it is true on 3% of nominally current records, so it cannot be used to pick the live plan.
Defect 2 · One tariff, two records, 5× apart
In states with retail choice, the same rate schedule is filed twice: once pricing only the utility’s delivery charges, once pricing delivery plus the default supply. The two rows share a name. The only field that distinguishes them is a free-text clause inside energycomments, and 58.7% of current records have no such clause at all.
| ConEd NYC · SC-1 Voluntary TOD (Rate II) | Priced as | July 2 pm | July 2 am | Ratio |
|---|---|---|---|---|
| Rate II [NYC] | Delivery only | 66.93¢ | 4.49¢ | 14.9× |
| Rate II – Zone J [NYC] | Delivery + supply | 93.34¢ | 30.90¢ | 3.0× |
Across the 825 current records we classify by billing scope: 161 are all-in, 150 delivery-only, 28 supply-only, and 486 cannot be determined from the record alone. For the last group we fall back to the ZIP-level service-type field and, in regulated states, to the market structure itself. That fallback is what raises usable ZIP coverage from 13% to 60%.
Defect 3 · Closed plans look open
Whether a plan accepts new customers is not a field. It is a sentence in the description, copied from the tariff:
We extract these clauses with a pattern over the description text. On the current 2024+ set that closes 21 plans that would otherwise be recommended. That is a small count with a large effect: closed legacy time-of-use plans are frequently the ones with the widest peak/off-peak spread, so any optimiser that cannot see the cutoff will recommend a plan the customer cannot join.
The same question, three answers
We asked two frontier AI assistants a concrete question and ran it through the engine:
| Source | Plan cited | July peak window | Monthly saving | Basis |
|---|---|---|---|---|
| Gemini Pro | SC-1 Rate III | 2–6 pm | $30–45 | none given |
| Meta AI | SC-1 Rate III | 8 am–midnight | $75–108 | inline citation |
| plainrates engine | Voluntary TOD (Rate III) – Zone I | 8 am–midnight | $42.27 | URDB tariff record |
- Gemini got the peak window wrong. Rate III peaks 8 am to midnight on summer weekdays. A customer who follows the “2–6 pm” advice and runs the heater at 9 am pays the full 49.19¢ peak rate — the advice costs money.
- Meta AI got the window right but priced it on Rate II, the plan closed to new applicants since 2014, and on its delivery-plus-supply twin — hence a saving nearly double the real one.
- Neither registered that Rate II cannot be joined. Both defects 2 and 3 are in play in a single ordinary question.
What survives the filters
| ZIP codes where… | ZIPs | Share |
|---|---|---|
| URDB has any residential tariff | 36,285 | 92.7% |
| …filed 2024 or later | 28,434 | 72.6% |
| …and open to new customers | 28,434 | 72.6% |
| …and total bill is computable (delivery + supply) | 23,504 | 60% |
Everything on this site — 594 plan pages across 137 utilities — is built from that 60%. For the rest we say we do not know, and we would rather a bill estimate say that than be quietly wrong by 5×.
What the engine does not do
- Demand charges are flagged, not priced. They apply to about 1.5% of residential plans.
- Supply charges in retail-choice states reset monthly and cannot be forecast; we price the current filed value and show delivery and supply separately.
- Holidays are billed as weekdays, which slightly overstates summer peaks for some utilities.
- Net metering: sell rates are parsed but not modelled.
- Rate zones (PG&E climate zones, ConEd load zones) are on the bill, not in any public dataset; we show all and let the user pick.
Reproduce it
The parser, classifiers and engine are TypeScript with 118 tests. The three counts above come from streaming the bulk CSV once; the benchmark is one script.
npm run fetch # pull the 2026-08-27 snapshot + provenance npm run compare # ConEd heat-pump benchmark vs. AI answers npm run coverage # ZIP coverage funnel npm run diagnose -- 10001 4226 "load-zone:zone i|territory:nyc"
Every record cited links to its URDB source page. The filtered dataset is published as CC0 on the data page.
If this shows up in your quotes
If your product estimates bills, sizes systems, or models savings from tariff data, one of these three defects is probably in your numbers today. We would like to know which, and whether a corrected, computable tariff layer would be useful to you — as an API, a dataset, or a one-off audit of the records you rely on.
Write to [email protected] with the utilities you cover. We will run them through the same filters and send back what changes.