Turn electricity, gas, water, and telecom bills into structured JSON. Provider, account number, service address, billing period, meter readings with consumption, every charge line, taxes, and the total due - typed and ready for accounts payable, cost allocation, or an energy report.
Send the bill and a schema. Meter readings come back with previous, current, unit, and consumption, and every charge line stays separate from the total.
curl -X POST \
https://api-parse.conversiontools.io/v1/extract \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@bill.pdf" \
-F 'schema={
"provider": "string",
"account_number": "string",
"service_address": "string",
"billing_period_start": "date",
"billing_period_end": "date",
"due_date": "date",
"meter_readings": [{
"meter_id": "string",
"previous": "number",
"current": "number",
"unit": "string",
"consumption": "number"
}],
"charges": [{
"description": "string",
"amount": "number"
}],
"taxes": "number",
"total_due": "number",
"currency": "string"
}'{
"status": "completed",
"pages": 3,
"data": {
"provider": "Northvale Energy",
"account_number": "8840-227-19",
"service_address": "Unit 12, Kestrel Business Park, Sheffield",
"billing_period_start": "2026-06-01",
"billing_period_end": "2026-06-30",
"due_date": "2026-07-21",
"meter_readings": [
{
"meter_id": "E-4471902",
"previous": 184320.0,
"current": 191455.0,
"unit": "kWh",
"consumption": 7135.0
}
],
"charges": [
{ "description": "Standing charge, 30 days", "amount": 41.70 },
{ "description": "Day units, 7135 kWh", "amount": 1314.27 },
{ "description": "Climate levy", "amount": 58.90 }
],
"taxes": 282.97,
"total_due": 1697.84,
"currency": "GBP"
}
}Every provider formats a bill differently, and the number that matters is usually not the one in the big box.
Previous and current readings, the unit, and the consumption for the period come back as fields, which is what an energy or emissions report actually needs. The amount due alone will never build a kWh baseline.
Standing charges, usage tiers, levies, and taxes remain their own lines instead of collapsing into one figure, so a site can be cost-allocated properly and an unexpected charge can be spotted the month it appears.
A multi-site business gets bills from a different provider in every region, each with its own layout and its own wording for the same thing. One schema normalises them into one table.
Electricity, gas, water, waste, and telecom bills all work, because extraction follows the schema you send rather than a fixed bill type. Fields that a given bill does not contain come back empty instead of breaking the request.
Yes. Define meter_readings as an array and each meter comes back with its identifier, previous and current readings, unit, and consumption for the period. Sites with several meters or registers return one object per meter.
Yes. Standing charges, usage tiers, discounts, levies, and taxes are returned as individual charge lines alongside the total due, which is what makes a bill auditable instead of merely payable.
Yes. Submit each bill to the extraction endpoint and poll or take a webhook per document. Repeated identical extractions are cached, so re-running a batch after a downstream fix does not consume your page allowance a second time.
Uploaded documents are deleted automatically within 24 hours. Extracted data is encrypted in transit and at rest and is never used to train models.
The same schema-driven API works across every document type. Define a schema once, extract from thousands of files.
Extract structured JSON from any document with custom schemas.
Parse any PDF into structured JSON, scanned or digital.
Vendor, line items, totals, tax, and dates from invoices.
Store, items, totals, and payment method from receipts.
PO number, vendor, buyer, and SKU-level line items.
Transactions, running balances, and dates for reconciliation.
Box-level data from W-2, 1099, and other tax forms.
Parties, dates, governing law, and key clauses.
Carrier, parties, ports, containers, and cargo.
Credit amounts matched back to the original invoice.
Payments split across invoices for cash application.
Line items and periods from balance sheets and reports.
Vendor quotes in one shape so you can compare them.
Earnings, deductions, taxes, and year-to-date totals.
Experience, education, and skills from any CV layout.
Fields and MRZ from passports and ID cards.
Rent, term, deposits, and renewal deadlines.
Claim and policy numbers, dates, and claimed amounts.
Packages and SKU-level lines for receiving.
Ordered versus delivered quantities and sign-off.
Free tier covers your first 100 pages a month. No credit card to start.