Bank Statement PDF to JSON

A statement PDF is built to be read, not queried. This pulls out the transactions and hands back JSON — an array of objects, one per row — so your code can use it as-is instead of parsing pages. Digital or scanned, any bank.

No signup to tryOne object per transactionAny stackFree to start

Click to upload or drag and drop

Supported formats:

PDF
PNG
JPEG
TIFF

Up to 25MB · PDFJSON

Secure & Encrypted Conversion

All uploads are encrypted for your security

Trouble converting a file? Tell us — we fix issues fast. Report it

How it works

How to convert a bank statement PDF to JSON

1

Upload the statement

Drop in a bank or credit card PDF — a digital export or a scan. No keys, no setup.

2

AI extracts the rows

Each transaction — date, description, amount, balance — is read from the statement, scanned or digital.

3

Download clean JSON

The file is assembled in your browser: a transactions array of per-row objects, ready for code.

The output

The JSON you'll get

A transactions array of per-row objects, plus a count and timestamp — exactly the shape that downloads. Toggle from the raw statement to the file.

statement.json
Messy PDFClean JSON
{
  "headers": ["Date", "Description", "Amount", "Balance"],
  "transactions": [
    {
      "Date": "2024-03-08",
      "Description": "PayPal Transfer",
      "Amount": "1260.00",
      "Balance": "4760.00"
    },
    {
      "Date": "2024-03-11",
      "Description": "AWS",
      "Amount": "-92.40",
      "Balance": "4667.60"
    }
  ],
  "totalTransactions": 2,
  "exportedAt": "2024-03-20T10:00:00.000Z"
}

Why JSON

Structured data, not a document

The point of JSON is that code can read it immediately — no scraping, no column-guessing, no cleanup.

One object per transaction

Every row is a JSON object keyed by column — Date, Description, Amount, Balance — so you can map over it directly.

Clean, castable values

Amounts as signed numeric strings and normalized dates, so parsing into your own types is trivial.

Loads into any store

Push the transactions array straight into MongoDB, Postgres or a dataframe — no reshaping first.

Ready for AI & analytics

Structured rows are ideal input for an LLM, a categorization model, or a spending dashboard.

Scanned PDFs & any bank

OCR reads scans and photos, and extraction follows each bank's layout — any institution, any country.

Count + timestamp included

The file carries a totalTransactions count and an exportedAt timestamp alongside the data.

What's in the file

The download is one JSON object: a headers array, a transactions array where each entry is keyed by column, plus totalTransactions and anexportedAt timestamp. Nothing exotic — it parses anywhere and maps cleanly onto your own model.

JSON is for code — not accounting software

If your destination is QuickBooks, Quicken or Tally, those want QBO, QFX or Tally XML, not JSON. Reach for JSON when you’re building something — an app, a pipeline, a model, a dashboard.

When to use it

Where the JSON goes

App & integration development

Pull statement data into a product without writing a per-bank PDF parser.

Databases & pipelines

Seed a database, an ETL job or a dataframe with one statement or a month of them.

AI & analysis

Feed clean rows to an LLM or a model for categorization, cash-flow analysis or anomaly checks.

Private by default. Uploads are encrypted, the JSON is built only from the transactions we extract, and the file isn’t kept once you’ve downloaded it — no account needed to try one.

Any bank

Clean JSON from any bank's statement

Because extraction reads each statement's own layout instead of a template, any institution — US or international, checking or credit — produces the same tidy JSON.

ChaseBank of AmericaWells FargoCitiCapital OneUS BankPNCHSBCBarclaysNatWestLloydsRBCTD BankHDFCICICISBIAxis BankANZCommonwealth BankDBS+ any bank worldwide

JSON FAQ

Converting to JSON — common questions

QWhat does the JSON look like?
A

A top-level object with a headers array, a transactions array (one object per row, keyed by column — Date, Description, Amount, Balance), a totalTransactions count, and an exportedAt timestamp. It's plain JSON you can JSON.parse anywhere.

QHow are amounts and dates represented?
A

Amounts are signed strings (money out is negative, e.g. "-92.40"); dates come through normalized as the extractor read them. Both are easy to cast to numbers or date objects in code.

QDoes it include account holder or account number?
A

No — the export focuses on the transaction rows plus a count and timestamp. If you specifically need account metadata, mention it via Contact and we'll point you the right way.

QIs there an API, or is it the download only?
A

Today it's the web tool — you upload a PDF and download the JSON file. For higher-volume or programmatic use, get in touch through the Contact page.

QCan I convert a scanned bank statement to JSON?
A

Yes — scans and phone photos have no selectable text, so OCR runs first and the JSON is built from the recognised transactions.

QIs the JSON built locally or on a server?
A

The PDF is extracted on the server (that's the OCR/AI step), then the JSON file itself is assembled in your browser from the returned rows — nothing extra is stored to produce it.

QWhich banks work?
A

Any bank, anywhere — extraction reads each statement's own layout rather than a fixed template, so non-English and unusual formats still produce clean JSON.

QCan I convert several statements at once?
A

Yes on paid plans — batch a set of statements when you're seeding a dataset or backfilling records.

QIs it free, and what happens to my file?
A

You can convert on the free tier without an account; uploads are encrypted, the JSON is built only from the extracted transactions, and the file isn't kept past the job. Locked PDFs prompt for the password to open them.

QShould I use JSON or CSV?
A

JSON when code consumes it (apps, databases, pipelines, AI). CSV when a spreadsheet or an accounting tool's importer does. Both hold the same extracted rows.