Skip to main content
BankFlow logoBankFlow

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
Uploading…
chase_2024_03.pdf14p
The activity panel while a Chase statement is parsed, showing the pipeline stage and elapsed time
A statement moving through the pipeline: each stage named, so you can see where it is rather than watching a spinner.

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. 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. 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. 3

    Normalize

    Rows become typed transactions: parsed dates, cleaned narration, signed amounts, and a running balance where the statement provides one.

  4. 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.

FieldNotes
DateNormalized to a single date format regardless of how the statement wrote it.
NarrationCleaned description text, joined back together when a bank splits it across lines.
AmountSigned value, with debit and credit columns reconciled into one consistent sign convention.
BalanceRunning balance carried through where the statement supplies one: used for validation.
MerchantCanonical merchant derived from the narration, so variants of the same vendor group together.
Category & subcategoryAssigned automatically and fully editable, individually or in bulk.
TagsCustom labels such as #reimbursable or #tax-deductible, applied by hand or by rule.
SourceWhich 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.

Parse your first statement in a minute.

Drop in a PDF and watch it come back as validated, categorized, export-ready transactions.