Skip to main content

Extract data from utility bills

A utility bill looks trivial until a facilities or accounts-payable team has to process one for every meter across a property portfolio. A retailer with 300 stores receives electricity, gas, and water bills from suppliers like Duke Energy and British Gas every month, each on its own template: a two-page electricity bill measured in kWh, a municipal water bill counted in cubic meters, a district-heating statement priced by the megawatt-hour, and a small-site gas bill that tucks a fixed standing charge beneath the consumption charge. Energy managers read the usage figures to catch a leaking pipe or a tariff that jumped 18% at renewal. AP reads the account number, the billing period from 2026-03-01 to 2026-03-31, and the amount due of €1,311.86 to code the invoice and pay it before a €95 late fee hits. Neither team can work from a drawer full of PDFs. The detail that defeats naive parsing sits in the meter and charge lines. A single bill carries a previous reading, a current reading, and a computed usage quantity that all have to agree, and an estimated read has to be told apart from an actual one. Charges split into an energy charge priced per unit, a fixed standing charge per day, and sometimes a demand charge tied to peak load, each with its own VAT or sales-tax rate. Tiered tariffs price the first block of kWh differently from the next. A bill usually shows a previous balance and a payment received before it reaches the amount due, so the closing figure is never simply consumption times price. Talonic reads the bill against a schema aligned to the EN 16931 semantic model that underpins European electronic invoices, extended with meter data. The header returns the document number, the billing period, the due date, the supplier, the account holder, the service address, the utility account number, and the total due in its ISO 4217 currency, whether that is USD, EUR, or GBP. Meter readings and individual charge lines each come back as their own table, so a bill from any supplier or service type lands as one consistent structured record.

What gets extracted from utility bills

Document NumberELEC-2026-0098421Bill or invoice number
Billing Period2026-03-01 to 2026-03-31
Due Date2026-04-19
Service Typeelectricityelectricity, gas, water, heating, or wastewater
Utility Account Number5500-482913
Meter Number1ISK0034219887
Usage Quantity3445 kWhCurrent reading minus previous reading
Total Amount Due€1,311.86
ChargesRows: energy charge, standing charge, grid fee, each with unit price and VAT rate

How extraction works for utility bills

Utility bills reach a facilities or AP team as supplier PDFs, portal downloads, and scans, and every provider lays out the meter and charge detail differently. Talonic classifies each bill by service type, whether electricity, gas, water, heating, or wastewater, and maps it to the utility-bill schema in the Field Registry, which models the header, the meter-readings table, and the charge lines rather than a per-supplier layout. The previous and current readings are checked against the stated usage quantity, an estimated read is flagged distinctly from an actual one, and each charge line keeps its quantity, unit price such as €0.284 per kWh, net amount, and VAT rate. Consumption is normalized to units like kWh, cubic meters, or therms as the source states them. Every captured value returns with a confidence score and a pixel-region pointer into the source PDF under DIN SPEC 91491 conformity, so an energy manager can verify a usage spike or a tariff change against the bill before approving payment.

Sample extraction

A single-meter electricity bill from a European supplier, one monthly period

{
  "document_number": "ELEC-2026-0098421",
  "document_date": "2026-04-05",
  "billing_period_start": "2026-03-01",
  "billing_period_end": "2026-03-31",
  "due_date": "2026-04-19",
  "currency": "EUR",
  "service_type": "electricity",
  "supplier.name": "E.ON Energie Deutschland GmbH",
  "buyer.name": "Meridian Retail GmbH, Store 214",
  "customer.account_number": "5500-482913",
  "meter.number": "1ISK0034219887",
  "meter.reading_previous": 84210,
  "meter.reading_current": 87655,
  "meter.usage_quantity": 3445,
  "meter.unit_of_measure": "kWh",
  "subtotal_amount": 1102.4,
  "tax_amount": 209.46,
  "total_amount": 1311.86,
  "previous_balance": 0,
  "charges": [
    {
      "item_name": "Energy charge",
      "quantity": 3445,
      "quantity_unit_code": "kWh",
      "item_net_price": 0.284,
      "line_net_amount": 978.38,
      "item_vat_rate": 19
    },
    {
      "item_name": "Standing charge",
      "quantity": 31,
      "quantity_unit_code": "DAY",
      "item_net_price": 0.4,
      "line_net_amount": 12.4,
      "item_vat_rate": 19
    },
    {
      "item_name": "Grid usage fee",
      "quantity": 3445,
      "quantity_unit_code": "kWh",
      "item_net_price": 0.0324,
      "line_net_amount": 111.62,
      "item_vat_rate": 19
    }
  ]
}

Frequently asked

Does it work for electricity, gas, and water bills the same way?

Yes. A service-type field records whether the bill covers electricity, gas, water, heating, or wastewater, and the rest of the schema is shared, so a kWh electricity bill and a cubic-meter water bill return the same header, meter, and charge structure. The consumption unit is preserved exactly as the source states it.

How does it handle estimated versus actual meter reads?

The previous and current readings are captured with their reading type, so an estimated read is marked apart from an actual one. The stated usage quantity is checked against the difference between the two readings, and a bill where those two figures disagree is flagged for review.

Can it separate the standing charge from consumption charges?

Yes. Each charge line comes back as its own row with a quantity, unit price, net amount, and VAT rate, so a fixed standing charge, a per-kWh energy charge, and a demand charge based on peak load stay distinct instead of collapsing into one total. This holds for a US electric utility or a European gas supplier alike.

We manage bills for hundreds of sites. Is that supported?

The free tool processes one PDF at a time. For a portfolio with hundreds of meters across many suppliers, the Talonic platform runs the same extraction at volume and routes the structured usage and cost data into an energy-management or ERP system.

Author note

Reviewed by Talonic engineering · last reviewed 2026-07-04