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.

  1. Map each demand line to a canonical component — facilities, coincident, TOU-on-peak — regardless of the utility's wording.
  2. Capture measured and billed demand separately, and record the ratchet basis when they differ.
  3. Handle mid-cycle splits as one pro-rated component across two rates, not two charges.
  4. 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.

#FAQ

Why doesn't the billed demand match the metered kW printed on the bill?
A ratchet is the most common reason, but not the only one. Many C&I tariffs also adjust billed demand for power factor, bill demand in kVA (apparent power) rather than kW, or enforce a contract/minimum demand floor independent of any ratchet. Any of these makes "metered kW × rate" disagree with the charged amount — which is why extraction has to capture the billed demand and how it was derived, not just the metered peak.
Can you reconstruct demand charges from interval or meter data instead of the bill?
Yes. Given interval data, the billing demand for a period is the peak interval average inside the tariff's demand window, with TOU windows and any ratchet applied on top — the same rules the utility uses. This is how a bill gets reconstructed when the PDF is missing or incomplete, and it's what lets you check a printed demand charge against the metered reality instead of taking it on faith.
What happens when a bill bundles demand into one line, or doesn't print the rate?
Some bills show a single "demand" charge that actually combines facilities and TOU components, or print the dollar amount with no $/kW rate beside it. Mapping the line to the tariff it's an instance of recovers the split and the implied rate. When the bill genuinely doesn't carry enough to resolve it, the line is flagged for review rather than guessed at.
How do I extract demand charges from a scanned or image-only bill?
The reading layer (OCR) handles a scan the same as a digital PDF; the part that matters — mapping each demand line to its tariff component, separating measured from billed kW, reconciling to the total — is independent of how the page was captured. The tie-out against the printed total is the safety net: if a scan artifact corrupted a demand figure, the bill wouldn't balance and would be flagged.
Why not just write a regex or template per utility to grab the demand line?
Because there isn't one demand line, the labels vary within a utility by meter and plan, ratchets pull the billed value off-page, and rate changes split a charge in two. A template matches the bills you built it on and breaks silently on the next format — and you find out from a wrong number downstream. Modeling the tariff component generalizes where a per-format template can't keep up.
Can demand charges be extracted across a whole portfolio of bills at once?
Yes — the same pipeline runs one bill or a thousand. What makes it usable at that scale is reconciliation: every bill either ties out to its printed total or is flagged with the discrepancy, so you review the handful of demand lines that didn't reconcile instead of re-checking every bill by hand.