How to Extract Transactions from a Scanned Bank Statement
A scanned statement is a page image. The job is to recover its text, reconstruct its rows, and prove the numbers still fit together.
Confirm that the statement is really image-only
Open a page containing transactions and try to select a single description. If nothing selects, or the page behaves as one image, it needs OCR. A cover page is not a useful test because many statements combine different page types in one PDF.
Check whether the scan is readable at normal zoom. Skew, shadows, compression blocks, faint print, handwritten marks, and pages photographed at an angle all reduce recognition quality. If you control the scan, use a flat, well-lit page, correct rotation, and enough resolution for small decimal points and minus signs.
Recognize text, then reconstruct transaction rows
OCR converts pixels into candidate characters; it does not automatically understand a transaction table. The extractor must decide where each row begins, whether a second line continues the description, which amount column is populated, and whether a trailing value is a running balance.
Keep the visible page number and original sequence with every extracted row. That makes ambiguous digits and wrapped descriptions reviewable without searching the full document. Do not discard rows merely because they lack a date: some banks print the date only on the first line of a multi-line transaction.
- Watch for 0/O, 1/I, 5/S, missing decimal points, and lost minus signs.
- Treat a blank amount as unknown until the neighboring columns establish its meaning.
- Use the statement period to resolve transaction years.
- Keep printed totals separate from transaction rows.
Verify numbers at several levels
Start locally: if running balances are printed, each row’s balance should follow from the prior balance and transaction effect. Then check the page boundary so the last balance on one page connects to the first activity on the next. Finally, compare the complete period’s opening balance, closing balance, and printed debit or credit totals.
A failed check is a review signal, not proof the bank statement is wrong. The usual causes are an omitted row, duplicated page header, misread amount, wrong sign, or a transaction category that does not affect the displayed balance as assumed. Return to the source page and correct the smallest explainable set of rows.
Before you call it done
- Inspect transaction pages
- Correct rotation and skew
- OCR at readable resolution
- Preserve page references
- Join wrapped descriptions
- Resolve account direction
- Test running and period balances
Frequently asked questions
Should I OCR the entire statement?+
Only pages needed for the task. Summary and transaction pages may both matter for verification, while blank pages, notices, and generic disclosures usually do not. Minimizing pages also reduces processing cost and data exposure.
What if the scan has no printed running balances?+
Use other independent controls such as opening and closing balances or printed debit and credit totals. If none exist, disclose that arithmetic verification was unavailable and perform targeted source checks.
Sources and further reading
We prioritize regulators, public agencies, and first-party product documentation. Sources support the general guidance above; StatementMint’s workflow recommendations are our own.
- Recognize text in scanned PDF documentsAdobe Acrobat
Educational information only—not financial, accounting, tax, or legal advice. Institution terms and your facts control.