Skip to main content
Convert·Into
Accounting6 min read

How OCR accuracy is measured, and why it matters for bank statements

A plain look at how OCR accuracy is actually measured, and why running-balance verification, not a headline percentage, is what catches the misreads on a converted bank statement.

The Convert·Into team
Published · Updated

Skip the read

convert your statement now

PDF or scan

reconciled Excel in seconds

A scanned bank statement converts cleanly except for one row: a 3 that should have been an 8, a comma dropped from a five-figure balance. Everything else on the sheet looks fine. That single misread digit is the reason ocr accuracy in bank statement conversion is not a number you check once and move on from. It is a property of the specific statement in front of you, and it has to be verified line by line, every time.

Vendors like to quote a single accuracy figure because it is easy to print on a page. It is also close to useless on its own. A rate calculated across a large sample of test documents describes the average behaviour of a model, not the outcome of the one conversion you are looking at right now. Your statement might have a coffee ring over the closing balance, or a fax-quality scan from a bank that has not updated its export format in a decade. The number on the marketing page does not know that.

How OCR accuracy is actually measured

Accuracy claims usually come from one of three measures, and they answer different questions.

  • Character-level accuracy counts how many individual characters the software reads correctly against a labelled test set. It rewards models that get most letters and digits right, even if the few they miss land in the worst possible place, like a balance column.
  • Field-level accuracy checks whether an entire field, a date, an amount, a description, was extracted correctly as a unit. A single wrong digit inside an otherwise correct-looking amount still counts as a failed field.
  • Document-level accuracy asks whether the whole statement came through usable, with every row and every balance intact. This is the measure that actually matters to a bookkeeper, and it is also the hardest one to quote as a tidy percentage, because it depends heavily on document quality.

None of these measures tell you, in advance, whether the specific document you just uploaded is one of the ones that came through clean. That is why a stated accuracy figure, however it is calculated, is not the safeguard. The safeguard is checking the output of this conversion against the numbers printed on this statement.

Why a single misread digit breaks the balance

OCR errors on bank statements cluster around a small set of confusion pairs: 3 and 8, 1 and 7, 5 and 6, a comma read as a period or dropped entirely. Most of these errors are harmless on a description field. A misread letter in a merchant name is annoying but does not change what the ledger says happened.

An amount column has no such tolerance. Every transaction amount feeds into a running balance, and a running balance is arithmetic: each row's balance equals the previous balance plus that row's debit or credit. Change one digit anywhere in that chain and every balance after it is wrong, even though every other digit on the page was read correctly. This is what makes bank statement OCR different from OCR on a contract or an invoice: the numbers are not just displayed, they are supposed to add up, and any conversion tool that does not check that arithmetic is trusting you to catch the error yourself.

Running-balance verification catches what a percentage cannot

This is the mechanism that actually protects a converted statement, and it has nothing to do with the accuracy figure printed anywhere. After extraction, the engine recalculates the running balance for every row using only the extracted debit and credit values, then compares that recalculated figure against the balance the bank printed on the statement for that same row. When the two match all the way down, the arithmetic is internally consistent and any residual character-level noise has not touched a number that matters. When they diverge, the row where the mismatch first appears gets flagged, because that is almost always where the misread digit lives.

CHECK
EXPECTED
STATUS
Opening balance
4,213.55
match
Row 14 running balance
9,842.10
mismatch
Closing balance
10,015.42
match

A single mismatched row inside an otherwise matching statement is a strong signal, not noise. It usually means one of two things: the OCR misread a digit in that row's amount, or the bank itself printed an adjustment you have not accounted for yet. Either way, the row is worth opening before you file anything.

If you want to see the exact patterns that produce these mismatches, catching OCR digit errors in converted bank statements walks through the most common confusion pairs and where they tend to appear on a page. For scanned documents specifically, it helps to know upfront whether you are dealing with a scan at all; telling a scanned statement from a text one in five seconds covers the quick check.

Verifying a flagged row

When a row comes back flagged, the fix is mechanical, not guesswork. Treat it as a short, repeatable procedure rather than a one-off investigation.

  1. 1

    Open the source statement

    Go to the exact page and row the flag points to, not the general area.
  2. 2

    Compare the printed figure to the extracted one

    Read the amount and running balance directly off the statement and set them next to what the conversion produced.
  3. 3

    Correct or reject the row

    If the printed value differs from the extracted one, fix the cell by hand. If the statement itself looks altered or illegible at that point, flag it for the client rather than guessing.
  4. 4

    Re-run the balance check

    Recalculate the running balance from the corrected row forward and confirm it now matches the statement through to the closing balance.

This is also where how to verify a converted bank statement in four checks is worth keeping open in a second tab: it covers the checks that sit alongside the balance comparison, including date order and duplicate rows, which OCR errors can also produce.

For statements that arrive as clean, text-native documents rather than scans, misreads are rare but not impossible: a corrupted export or an unusual font can still produce a stray character. The same balance check applies regardless of how the document was produced, which is why it runs on every conversion rather than only on the ones that look scanned.

Verify a statement now

Convert a statement and see the row-by-row balance check run automatically, with any mismatch flagged before you download the file.

When the mismatch will not resolve

Occasionally the recalculated balance never lines up, no matter how many rows you correct. That usually points to something other than an OCR misread: a fee or adjustment the statement shows but does not itemise as a normal transaction, a page missing from the upload, or a statement where the bank's own running balance skips a correction it applied later. If you have checked every flagged row against the source document and the totals still will not reconcile, your converted statement balance does not reconcile covers how to isolate the cause systematically rather than re-checking the same rows repeatedly.

The takeaway for anyone converting statements at volume is straightforward: treat any quoted OCR accuracy figure as background information about a model, not as a guarantee about the file in front of you. The guarantee, such as it is, comes from the arithmetic the balance check performs on that specific statement, row by row, every time.

Frequently asked questions

What does OCR accuracy actually measure?

It measures how often the software reads a character, word or field correctly against the source document, usually expressed as a rate across a large sample of test pages. A rate calculated across thousands of pages tells you almost nothing about whether the one statement you just uploaded came through clean.

Can OCR ever be completely accurate on a scanned bank statement?

No. Scanned and photographed statements carry noise that text-native documents do not: skewed pages, faint toner, folded corners, low resolution from a phone camera. Any of these can turn a 3 into an 8 or drop a decimal point, no matter how good the underlying model is.

How does running-balance verification catch OCR errors?

The engine recalculates the running balance from the extracted debits and credits, row by row, and compares each result against the balance printed on the statement. A misread digit almost always breaks that arithmetic, so the row where the mismatch first appears gets flagged for review instead of being passed through silently.

Does a text-based statement still need this check?

Yes. Text-native PDFs are far less prone to misreads than scans, but the check still runs, because the risk is not zero and the cost of running it is negligible compared with the cost of an unreconciled ledger.

What should I do if a row comes back flagged?

Open the source statement next to the flagged row and compare the two figures directly. If the printed statement shows a different value than the extracted one, correct the row by hand and re-run the balance check before you use the file for anything downstream.