Invoice & Utility Bill Data Extractor: Totals, kWh, Line Items avatar

Invoice & Utility Bill Data Extractor: Totals, kWh, Line Items

Pricing

from $1.70 / 1,000 extracted documents

Go to Apify Store
Invoice & Utility Bill Data Extractor: Totals, kWh, Line Items

Invoice & Utility Bill Data Extractor: Totals, kWh, Line Items

Bulk extract vendor, dates, totals, tax, kWh and line items from invoice and utility bill PDFs and photos. Auto-detects each document, runs one or several AI models, checks the arithmetic and flags what to review.

Pricing

from $1.70 / 1,000 extracted documents

Rating

0.0

(0)

Developer

Youssef Farhan

Youssef Farhan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Categories

Share

Turn a folder of invoices and utility bills (PDF, scans or phone photos) into one clean spreadsheet row per document. It reads the vendor or provider, invoice or account number, dates, subtotal, tax, total, amount due, currency, kWh or other usage and every line item, then checks the arithmetic itself and tells you which documents a person should look at.

PDF / scan / phone photo one row per document
┌──────────────────────┐ ┌─────────────────────────────────────────────┐
│ ACME Ltd INV-1042 │ AI vision model │ vendor invoice_no date total conf. │
│ Hosting 120.00 │ ───────────────▶ │ ACME Ltd INV-1042 2026-03-02 144.00 high │
│ Tax 20% 24.00 │ + free math checks│ + line_items, tax, currency, review flag │
│ Total 144.00 │ └─────────────────────────────────────────────┘
└──────────────────────┘ subtotal + tax = total? lines = subtotal? dates in order?

Built for accounts payable teams, bookkeepers, energy audits, ESG and carbon reporting, and property managers: anyone who types numbers from invoices and bills into a sheet by hand.

What makes it different

  • Invoices and utility bills in one run. Auto-detect reads each file as an invoice or a utility bill and fills the matching columns, so a mixed folder just works. Or pick one type.
  • You choose the AI models, one or several. Pick any vision model on OpenRouter. With two or more, every document is read by each model and the answers are compared field by field.
  • Confidence you can act on. Free arithmetic checks run on every document (line items against subtotal and total, subtotal plus tax against total, charge lines against the bill total, meter readings against usage, date order, currency code). Optional: a cheap referee model re-reads the page, but only for fields where models disagree or a check failed.
  • Bulk without babysitting. Hundreds of files from links or one ZIP upload. A bad link, a password-protected PDF or a file that is not a document becomes a line in a failure list, never a stopped run. Interrupted runs resume where they stopped.
  • Any other document too. Switch to "custom fields only" and define your own fields for insurance letters, delivery notes, contracts or forms.
  • Full text is optional and off by default, because AI models bill per output token.

What you get per document

Columns for the other document type are left out of the row in auto-detect mode.

ColumnMeaning
document_typeinvoice, utility_bill or other (auto-detect mode)
invoice_number, vendor_name, vendor_tax_id, customer_nameInvoice header
invoice_date, due_date, po_number, payment_terms, ibanInvoice dates and payment details
subtotal, tax_totalBefore-tax total and total tax
line_itemsEach invoice line with description, quantity, unit price and amount
provider, service_type, account_number, service_addressUtility bill header (electricity, gas, water, sewer, combined)
statement_date, billing_period_start, billing_period_endUtility bill dates
usage_kwhElectricity kWh for the bill, empty for gas and water
usage_value, usage_unit, previous_reading, current_reading, tariffMain consumption with its printed unit, meter readings, rate plan
charges, previous_balanceEach utility charge line (credits negative) and the carried balance
total_amount, amount_due, currencyDocument total, what is still payable now (0 if paid), ISO currency code. Kept apart on purpose
confidence, needs_review, review_reasonsSee below
models_used, models_agree, field_confidence, by_modelMulti-model runs: who answered and where they differ
full_textWhole transcription, only when you turn it on
cost_usd, tokensModel usage for that document (billed separately, see Pricing)

Dates are ISO (YYYY-MM-DD). Fields the document does not show are empty, never guessed. A water bill returns no kWh.

How confidence works

LabelMeaning
highTwo or more models agree on every field and every check passes
mediumOne model with every check passing, or a referee settled a disagreement or a failed check
lowAn unresolved disagreement, a failed check, or a key field is missing (invoices: number, vendor, date, total, currency; utility bills: provider, account, period, total, currency). needs_review is true and review_reasons says why

Honest limits: agreement between models is evidence, not proof, and a single model can still be wrong in a way no check catches. Handwritten or very damaged documents often come back low, and that is the intended signal to look at them.

The referee option

Turn on "Check confidence with a cheap referee model" and, for each document, the referee looks at the page again but only for the disputed fields, and answers with the value it reads. This costs a fraction of a full read. The referee can only pick a value one of your models gave, unless an arithmetic check failed on that field, so it cannot invent new data.

Input

FieldWhat it does
Documents (links)PDF, PNG, JPG, WEBP, TIFF or GIF links. Upload a text file with one link per line for big batches. Google Drive file links work when shared with anyone with the link
Documents (ZIP upload)One ZIP with all files, any folder depth
What are you extracting from?Auto-detect, invoices, utility bills, or any other document with your own fields
Extra fieldsOne per line, name: what to look for. Each becomes a column
Extra instructionsFree text, for example "amounts are in CAD"
AI modelsOne or more. The first is primary. Prices per million tokens are shown in the list
Referee modelOptional second look at disputed fields
Full textOff by default
Extract every line itemOn by default, used for the totals check
Cheaper, faster readingTurns the models' hidden thinking off. Cheaper and faster, a little less accurate on dense documents
Maximum pages per documentDefault 5. Raise it for long statements
Documents in parallelDefault 4

The form is pre-filled with three public samples (a Toronto Hydro bill and two invoices), so you can press Start and see a result.

Example:

{
"documentUrls": [{ "url": "https://example.com/invoices/2026-05.pdf" }],
"documentType": "auto",
"models": ["google/gemini-2.5-flash", "anthropic/claude-haiku-5.5"],
"useRefereeModel": true
}

Choosing models

Measured in October 2026 on documents I could check against the right answers: three sample invoices from the open-source invoice2data test set and two utility bills.

ModelResultTypical model cost per document
Gemini 2.5 Flash (default)Invoice number, date, vendor, totals, tax and currency right on all three invoices. One of two utility bills had a wrong total choice and an adjusted kWh, and was correctly flagged for reviewabout $0.002
Gemini 3 FlashEvery checked utility-bill field right on all three test billsabout $0.002 to $0.003
Claude Haiku 5.5Every checked utility-bill field right on all three test billsabout $0.001
Gemini 2.5 Flash LiteCheapest and fastest, misses some dense linesabout $0.0002
Mistral Medium 3.1Good values, but its line sums often fail the total checkabout $0.001
DeepSeek V4.1 FlashVery cheap but unreliable as a main reader, so it is the default referee onlyunder $0.001

A public benchmark (ArbitrAI OCR mini-bench, July 2026) also places Gemini models at or near the top on cost for quality across receipts, invoices and logistics documents. Treat it as a hint, not proof.

These are model costs measured on a handful of documents, not a promise, and prices change. The model list in the input form is refreshed from OpenRouter and always shows current prices. Dense multi-page statements cost more than a one-page invoice.

For an invoice-heavy workload, running two models together with the referee gives the best accuracy and flags the rest.

Pricing

You pay per extracted document. Documents that could not be read are not charged and are listed in the FAILED_DOCUMENTS record. The current rate is shown on this Actor's Store page.

Model usage is a separate cost, and this Actor does not add a token meter on top of it:

  • Default: AI usage runs through Apify's built-in OpenRouter access and is billed to your Apify account. No key needed.
  • Your own key: add an OpenRouter key under "Bring your own API access" and usage is billed by OpenRouter on your account.

Free plan

Free runs read the first 3 documents with one model. Apify's built-in AI access is not available on the free plan, so free runs need your own OpenRouter key. A paid Apify plan removes both limits.

Good to know

  • PDFs are rendered to page images and, when they have a real text layer, that text is sent too, so digital invoices are read exactly.
  • Day/month order on ambiguous dates is resolved from the document itself. If it cannot be resolved the date is left empty and the document is flagged.
  • Files over 30 MB, password-protected PDFs, HEIC photos and nested ZIPs are reported as failures. Convert HEIC to JPG first.
  • Documents in any language work. Values are copied in the language printed on the document.
  • Who is the vendor and who is the customer is decided from the layout, so a document that shows only one party can read ambiguously. Check needs_review rows first.

Support and custom work

Found a bug or a document that reads wrong? Open an Issue on this Actor and attach the file if you can.

💼 Need a custom version or another document type? Contact me through my Apify profile