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.
Click to upload or drag and drop
Supported formats:
Up to 25MB · PDF → JSON
All uploads are encrypted for your security
How it works
How to convert a bank statement PDF to JSON
Upload the statement
Drop in a bank or credit card PDF — a digital export or a scan. No keys, no setup.
AI extracts the rows
Each transaction — date, description, amount, balance — is read from the statement, scanned or digital.
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.
{
"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.
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.
JSON FAQ
Converting to JSON — common questions
QWhat does the JSON look like?
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?
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?
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?
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?
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?
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?
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?
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?
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?
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.
Keep going
Related converters
Bank Statement to QFX
Quicken Web Connect (.qfx) for direct import into Quicken.
Convert now →Bank Statement to CSV
A clean column import for spreadsheets and tools that take CSV.
Convert now →Bank Statement to Excel
A working .xlsx with real numbers and formulas for review.
Convert now →Bank Statement to QBO
QuickBooks Web Connect (.qbo) files, ready to import — no manual entry.
Convert now →Bank Statement to OFX
The universal bank-feed format most finance apps accept.
Convert now →Bank Statement to QIF
The plain-text QIF format that keeps categories — for GnuCash and legacy Quicken.
Convert now →