Invoice & Statement PDF to Rows avatar

Invoice & Statement PDF to Rows

Pricing

$20.00 / 1,000 page parseds

Go to Apify Store
Invoice & Statement PDF to Rows

Invoice & Statement PDF to Rows

Turn invoice and bank-statement PDFs you already have into structured rows. Scanned pages are reported, never guessed.

Pricing

$20.00 / 1,000 page parseds

Rating

0.0

(0)

Developer

Toolkit Labs

Toolkit Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

What it got wrong, first, because that is what you need to price the risk. On a held-out set of 13 real vendor invoices taken from a public MIT-licensed test corpus (Amazon Web Services, Flipkart, Coolblue x2, Free, OYO, Saeco, QualityHosting, Netpresse, Azure Interior and three others), scored once and never tuned afterwards: 9 of 13 produced line items with parsed amounts; 4 of 13 did not — those four fell back to raw table rows, which is useful output but not parsed line items. On 7 non-invoice control documents run through the same pass, 6 were reported correctly (5 as unreadable, no text layer) and 1 produced 4 invoice_line rows that should not exist — a Google-Docs export whose text happens to look like line items. Run: 20 documents, 22 pages, 176 rows, 16 pages parsed, 6 pages unreadable, 0 fetch failures.

What it does

You give it direct HTTPS links to PDF files you already have. It downloads exactly those files and turns each page into rows:

  • invoice_line — description, amount, quantity, plus the document's invoice number, date, currency, VAT rate, VAT amount and total.
  • statement_txn — date, description, amount and running balance, one row per transaction line.
  • table_row — every cell of a detected table grid, when the page is a table rather than a document.
  • unreadablea page with no text layer is never guessed at. It is reported with the warning scanned-page-no-text-layer and it is not charged.

Nothing is crawled, searched or scraped. No third-party site is visited, no account is needed, no API key, no proxy, no model call. Every number is returned as a normalised string (1.234,56 EUR becomes 1234.56 with currency: EUR), never a rounded float.

Price

One charged event: page-parsed, $0.02 per page that yielded at least one row. A page with no text layer fires no event at all — it appears in your results as unreadable and it costs nothing. (Apify's pricing model will not accept an event priced at zero, so the refusal is free by never being charged rather than by being charged $0.00.)

What it does not do (v1)

  • No OCR. A scanned page is refused, not interpreted.
  • Ambiguous dates: 01/07/2026 is read day-first and the row carries the warning assumed-day-first-date. It is stated, never hidden.
  • No dashboard, no webhook, no storage beyond the run's own dataset.

Input

{ "pdfUrls": ["<a direct https link to your own PDF>"], "mode": "auto", "maxPages": 0 }

mode is auto (detect per page), invoice, statement or table. pdfUrls takes 1-200 links.

Honesty notes

The 46-check selftest runs inside the Docker build, so a build that succeeded is a selftest that passed. The held-out scores above were produced by one run against files this actor had never seen, and the parser has not been changed since that run. n=13 invoices is a small set and is quoted as a count, never as a rate.