Bank statement parser
PDF statements into structured rows.
Drop in a bank statement and get clean, validated transactions (date, narration, amount, balance, and account source) with opening and closing balances reconciled before you ever look at the data.
50 free page credits · No card · Cancel anytime
- No per-bank templates
- Scanned & password-protected PDFs
- Balance-checked output

Statement PDFs are laid out for humans, not machines.
Every bank formats its statements differently: multi-line narrations, columns that shift between pages, running balances that only appear sometimes, carried-forward totals in the header. Copying that into a spreadsheet by hand is slow and error-prone, and generic PDF-to-Excel tools tend to produce a table that is structurally right and financially wrong. A statement parser has to understand the document as a ledger.
How it works
How the parser works
- 1
Ingest
Upload PDF, CSV, XLSX, or JSON up to 50 MB by drag and drop, by forwarding the statement email, or by POSTing to the API.
- 2
Extract
Text and table structure are read from the document, including scanned pages that need OCR and multi-page statements where the layout shifts.
- 3
Normalize
Rows become typed transactions: parsed dates, cleaned narration, signed amounts, and a running balance where the statement provides one.
- 4
Validate
Opening and closing balances are checked against the extracted rows, and anything that does not reconcile is flagged for review.
Built for statements specifically
Any bank, no setup
There is no template picker and no per-bank configuration. The parser reads the document itself, so an unfamiliar bank works the same as a common one.
Scanned and locked files
Scanned PDFs, multi-page statements, and password-protected files are all handled, no separate unlock or OCR step on your side.
Balance reconciliation
The parse is only reported as clean when the extracted rows agree with the statement's own opening and closing balances.
A reviewable ledger, not a dump
Output lands in a sortable grid with narration search, date and amount filters, and shift-click bulk editing, so correcting an edge case takes seconds.
Forward-to-parse inbox
Get a private import address, allow specific senders, and let statement attachments parse themselves as they arrive.
Parser API and webhooks
POST a file to /api/v1/parse with a personal access token, list or export stored transactions, and register webhooks for statement and transaction events.
Fields the parser returns
Every parsed transaction carries these fields into the ledger, the exports, and the API.
| Field | Notes |
|---|---|
| Date | Normalized to a single date format regardless of how the statement wrote it. |
| Narration | Cleaned description text, joined back together when a bank splits it across lines. |
| Amount | Signed value, with debit and credit columns reconciled into one consistent sign convention. |
| Balance | Running balance carried through where the statement supplies one: used for validation. |
| Merchant | Canonical merchant derived from the narration, so variants of the same vendor group together. |
| Category & subcategory | Assigned automatically and fully editable, individually or in bulk. |
| Tags | Custom labels such as #reimbursable or #tax-deductible, applied by hand or by rule. |
| Source | Which uploaded statement and account the row came from. |
FAQ
Common questions
What is a bank statement parser?
Software that reads a bank statement file and converts its transaction lines into structured data (dates, descriptions, amounts, and balances) that a spreadsheet, ledger, or accounting system can use.
Which file formats can I parse?
PDF, CSV, XLSX, and JSON, up to 50 MB per file. PDFs may be text-based or scanned, single or multi-page, and may be password-protected.
Does it work with my bank?
There is no bank list to check against, because the parser reads the document rather than applying a bank-specific template. If your statement is a readable PDF, CSV, XLSX, or JSON file, it can be parsed.
How do I know the parse is correct?
The parser reconciles the extracted rows against the statement's own opening and closing balances and flags rows that need a look. Review is still part of the workflow: the point is that you review flagged rows rather than re-checking every line.
Can I parse statements programmatically?
Yes. Generate a personal access token, POST a file to /api/v1/parse, then list or export the stored transactions. Webhooks let you react to statement and transaction events instead of polling.
What happens to my statement files?
See the security page for how documents are handled and stored. Email import never requires inbox access. You forward to a private address rather than connecting your mailbox.
Keep exploring
Live example
A real Bank of America statement read into transactions you can trace back to the page.
Bank Statement Analyzer
Categorize spend and read cash flow from bank statements.
Credit Card Statement Parser
Extract transactions from credit card statement PDFs.
Bank Statement → Excel
Download a clean XLSX of every parsed transaction.
Bank Statement → QuickBooks
Categorize first, then export an OFX/QBO QuickBooks imports.
Parse your first statement in a minute.
Drop in a PDF and watch it come back as validated, categorized, export-ready transactions.