Extracting demand charges from a utility bill means pulling four things off the page for every demand line — the measured demand in kW, the rate in $/kW, the resulting dollar charge, and which kind of demand it is (coincident, non-coincident, facilities, or a time-of-use window) — and then proving those numbers tie out to the printed total. Reading the kW value is the easy part; OCR does that. The hard part is that one C&I bill can carry half a dozen demand lines under inconsistent labels, a ratchet that sets the billed demand from a month that isn't even on this bill, and a rate that changed mid-cycle. Get any of those wrong and the largest line on the bill is also the wrong one.
This guide covers why demand charges are the single hardest part of a utility bill to extract, what a complete demand-charge extraction actually has to capture, where manual and generic approaches break, and what a pipeline needs to do to get them right at volume.
#Why demand charges are the hardest line to extract
On most C&I bills the demand charge is the largest single line — often 30–50% of the total. (If you need the fundamentals, what is a demand charge covers them.) It's also the line most likely to be extracted wrong, for three structural reasons:
- It's not one number. Energy is billed against a meter total you can read straight off the page. Demand is billed against a measured peak — and a tariff frequently bills several peaks at once: a facilities (non-coincident) demand, a coincident demand tied to the utility's system peak, and one or more time-of-use demand windows, each with its own kW reading and rate.
- The billed kW may not appear on this bill. A ratchet sets the billed demand to a percentage of a peak set in a prior month. The number you're charged on can be a value from last August that this PDF never prints. Extract the kW you see and you get a different figure than the one the dollars were calculated from.
- The label tells you nothing reliable. "Max Demand," "Billing Demand," "On-Peak Demand," "Facilities Related Demand," and "Generation Demand" are not interchangeable, and two utilities use different words for the same concept. The dollar impact of mislabeling them is large.
A residential bill has no demand charge at all. A C&I time-of-use demand bill is a different document class — see why generic OCR fails on utility bills for the broader version of this problem.
#What a complete demand-charge extraction captures
"Extract the demand charge" sounds like one field. It's a small record per demand line, and the record is only useful if every field is present and typed:
| Field | Example | Why it matters |
|---|---|---|
| Demand type | Non-coincident / coincident / TOU on-peak | Drives how it's modeled and compared across bills |
| Measured demand (kW) | 312 kW | The metered peak for the period |
| Billed demand (kW) | 340 kW (ratchet floor) | What the charge is actually computed on — often ≠ measured |
| Rate ($/kW) | $19.71 | The tariff price for that demand component |
| Charge ($) | $8,721.60 | measured-or-billed kW × rate |
| Ratchet basis | 80% of Aug peak (425 kW) | Where the billed demand came from, if not this month |
| Source line | p.3, "Facilities Demand Chg" | Provenance back to the PDF |
Capture only "demand charge: $8,721.60" and you have a number you can't model, can't compare month to month, and can't defend. The measured-vs-billed distinction alone determines whether a solar-plus-storage pro-forma is sizing battery demand savings against the right target.
#Where extraction breaks
Each of these produces confident, wrong output — no error is thrown.
#Ratchets
A demand ratchet bills you on a floor — say 80% of your highest demand in the trailing 12 months — even in months your actual peak was far lower. An extractor that reads the measured kW off the page and multiplies by the rate gets a charge that doesn't match the bill, because the bill computed on the ratchet floor. The right behavior is to capture both the measured demand and the billed demand, and record which one the dollars used.
#Coincident vs. non-coincident demand
Non-coincident demand is your own peak, whenever it occurred. Coincident demand is your draw at the moment the utility's system peaked. They're different kW values, billed at different rates, on the same bill. Collapsing them into one "demand" figure destroys the distinction that storage dispatch is actually optimized against.
#Mid-cycle rate changes
When a tariff's demand rate changes on an effective date inside the billing period, the bill pro-rates: one demand charge prints as two lines at two rates. A generic extractor sees a duplicate, and either drops one or sums them into a blended number that matches no published rate.
#Multiple TOU demand windows
A time-of-use demand tariff bills a separate demand peak per window — maximum on-peak kW, maximum part-peak kW — plus a facilities demand across the whole period. That's three or more demand lines that all contain the word "demand." Flattening them loses the structure that makes the bill worth extracting.
#Totals that don't tie out
Because demand is the biggest line, an error here is the one most likely to break reconciliation. A pipeline that doesn't sum its extracted line items back against the printed total ships a demand figure that's quietly off — and on the largest line, "quietly off" is expensive.
#What reliable demand-charge extraction requires
The fix is the same architectural move that the rest of bill extraction needs: don't transcribe the line, model the tariff component it's an instance of, then prove the result reconciles.
- Map each demand line to a canonical component — facilities, coincident, TOU-on-peak — regardless of the utility's wording.
- Capture measured and billed demand separately, and record the ratchet basis when they differ.
- Handle mid-cycle splits as one pro-rated component across two rates, not two charges.
- Reconcile every demand line back to the printed total. Ties out → accepted. Doesn't → flagged with the delta, not silently corrected.
Done by hand, this is slow and error-prone exactly where errors cost the most. Done with a pipeline built for it, it's the same throughput for one bill or a thousand.
#What Tariform does
Extract is that pipeline. Utility-bill PDFs go in; line-itemized, tariff-aware, source-traceable data comes out — and demand charges come out fully typed: each demand line mapped to its canonical component, measured and billed kW captured separately, ratchet basis recorded, mid-cycle splits handled, every figure reconciled against the printed total or flagged for review. See utility bill data extraction for the full pipeline.
If your demand numbers feed a pro-forma, a proposal, or a savings model, that's the line you can least afford to get wrong. Book a demo — twenty minutes, a real bill, you see the demand breakdown. Prefer to try it yourself? Start a free trial and upload a bill.
Operate C&I solar or storage and want to know what those demand charges actually saved on the bill? That's Verify — the other product on the same extraction backbone.



