Why a converter instead of copy-paste?
A bank statement is a table of transactions trapped in a PDF. You can select and copy it, but the columns collapse, descriptions wrap, and money-in and money-out end up in the wrong places. Retyping it is slow and error-prone, and a single mistyped figure quietly breaks a reconciliation.
This converter reads the statement's layout, pulls out each transaction — date, description, amount — and hands you a clean CSV you can open in Excel or import into accounting software, plus structured JSON if you're building something.
The reconciliation check
This is the part that makes the data trustworthy. Extraction alone can silently drop a row or misread a figure, and you'd never know until the books don't balance. So after extracting the transactions, the converter does the arithmetic itself:
opening balance + credits − debits = closing balance
If the extracted transactions account for the exact change between the statement's opening and closing balances, it's marked reconciled. If they don't, you get the difference and a warning — so you can review that statement instead of importing bad numbers. A copy-paste or a chatbot gives you data; this tells you whether the data is complete.
What you get
- CSV — opens directly in Excel and Google Sheets, ready to import into your accounting workflow.
- JSON — structured transactions plus the reconciliation result, for pipelines and applications.
- The reconciliation summary — credits, debits, computed vs stated closing balance, and whether it ties out.
Digital and scanned statements
Statements come in both forms — a clean digital export from online banking, or a scan or photo of a paper statement. This handles both: digital statements are read directly, and scanned ones are processed with OCR and a vision model, so either way you get structured transactions back.
Convert bank statements in code
Building this into an application or a bookkeeping tool? The same extraction is one API call — POST the PDF to /v1/bank-statement with your key and get the transactions and reconciliation result as JSON. See the API docs.
Is it private?
Statements are sent to the API to be processed and are never used to train a model. They're handled under the current data-retention policy. For sensitive volumes, ask and we'll confirm the retention window for your account.