ZeroParse
HomeHelp

Convert a scanned bank statement

A scanned statement is a picture of text, so it has to be read with OCR, and OCR can misread a digit. ZeroParse reads it, then checks the result against the totals the statement prints, so a misread shows up instead of slipping into your books.

No AI. No Hallucinations. Just Deterministic Math.

How it works

  1. Upload the scan

    Scanned pages are detected automatically and read with OCR. Pages with a real text layer are read directly.

  2. Check it against the statement

    We add up the rows we found and compare them with the opening and closing balance, the column totals, or the running balance your statement prints. You see whether they match before you export, and which figure disagrees if they don't.

  3. Fix, then export

    Everything lands in an editable table. Correct a row, untick one, then export CSV or Excel, or .QBO and Xero on a subscription.

A staged file row for sample-statement.pdf reading “17 rows standardized” and “17 transactions reconcile against the statement’s printed opening (12,480.55) and closing (18,566.15) balances.”
Every file is checked against the totals the statement prints about itself, before you export.

What to know

Slower than a text PDF

OCR reads every page character by character, so a long scan takes minutes rather than seconds. The answer below gives the measured time per page.

The check is the point

When a statement prints totals or a running balance, we test every row against them. When it prints nothing to check against, we say so instead of claiming a match.

What it costs

The same as any PDF: 1 credit per page. New accounts get 50 free PDF credits, no card required. CSV, Excel and OFX files are always free.

Common questions

Why is my scanned PDF taking so long when my other ones are instant?
Because they're two different jobs. Most bank statements carry a text layer — the words are really in the file — and we read that in a fraction of a second a page. A scan has no text layer, just a picture of a page, so every page has to be turned into an image and read character by character. That takes roughly eight seconds a page on our hardware, so a thirty-page scan is about four minutes of genuine work rather than something being stuck. We'll tell you which one you've got within a second or two of uploading, along with how long it should take and whether anything is ahead of it in the queue. While it runs you'll see the page it's on and the time left, so you can tell it's moving. One scanned document is read at a time, deliberately — running two at once on the same machine makes both slower rather than faster, so queueing is what keeps them predictable. Text PDFs don't queue behind scans at all; they go straight through. If you can choose, a PDF downloaded from your bank's website will always be faster and more accurate than a scan or a photo of a printed statement — and it costs the same either way, one credit per page.
What does the badge on each file mean — "Matches statement totals", "Doesn't match statement", or "Verify against the statement"?
After extraction, we check whether the rows we found add up to what your statement says about itself — its opening and closing balance, its own column totals, or the running balance printed beside each row. "Matches statement totals" means they do, to the cent. The running balance is the most useful of the three when a file has one, because it is checked at every row rather than once at the end, so it can tell you which row something goes wrong at — and it catches a case the totals cannot: a file that is missing transactions whose amounts happen to cancel out. "Doesn't match statement" means they don't, and we show you exactly which figures disagree. "Verify against the statement" means your statement didn't print anything we could check against — no balances, no totals, no running balance — so we're telling you to eyeball it yourself rather than pretending it's fine. It's a common enough outcome that we publish the actual rate across our own test corpus on the benchmark page rather than asking you to take a number on trust. None of this is the same as an accountant reconciling your account against an independent record; it only checks that what we extracted is internally consistent with what your own statement says. Edit an amount or delete a row afterward and we re-run the same check automatically, so the badge always reflects what you're about to export — and because that recheck runs entirely in your browser, fixing a flagged row never sends anything back to our servers or creates a new copy of your data there.
How accurate is the extracted data?
PDF extraction uses each page's real text layer where available, with OCR as a fallback for scanned statements. CSV columns are auto-mapped to Date/Description/Amount from common header names — or, when a file's headers say nothing useful (some bank exports really do label their columns "Column 1" to "Column 7"), from the data itself. Both are best-effort: bank statement formats vary too much to guarantee perfect extraction, which is why every upload lands in an editable table where you can adjust the column mapping and deselect or delete any row before exporting. We also check our own work: after extraction, we compare the rows we found against the totals your statement prints about itself, and show you the result as a badge next to the file rather than asking you to just trust the table.

All questions and answers

Try it on your own statement: 50 free PDF credits

No card required. CSV, Excel and OFX files are free on every plan.