Invoice & Statement PDF to Rows
Pricing
$20.00 / 1,000 page parseds
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
Maintained by CommunityActor 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.unreadable— a page with no text layer is never guessed at. It is reported with the warningscanned-page-no-text-layerand 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/2026is read day-first and the row carries the warningassumed-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.