Convert PDF bank statements to JSON
Get machine-readable transactions from PDF statements, with ISO dates, numeric amounts and per-statement metadata, ready for your scripts, databases and apps.
or drag and drop statements here · files never leave your device ·
Click any cell to correct it. Shaded rows don’t add up with the running balance on the statement.
Secure
Statements are converted inside your browser and never uploaded to a server, so there is nothing to store, leak or share.
Institutional
Built for accountants, bookkeepers and legal teams: bulk statements, multi-page PDFs and exports for Excel, QuickBooks and Xero.
Accurate
Every row is checked against the running balance. If a file doesn’t convert as expected, email us and we’ll improve it.
Need help?
Statement not converting the way you expected, or have a different kind of document to process? Tell us about it and we’ll help you get your data out.
More information & FAQ
How to convert a bank statement to JSON
- Add your PDF statements. Drag one or more PDF bank or credit card statements into the converter, or click to choose them. Password-protected files ask for the password, which is used only on your device.
- Check the preview. Transactions appear in an editable table with dates, descriptions, money in, money out and balance. The balance check flags any row that does not add up, so you can fix it in a click.
- Download JSON. Export to Excel (.xlsx), CSV, OFX or JSON, or copy the table straight into Google Sheets. Nothing is uploaded at any point.
More about converting statements to JSON
JSON structure
Each export is a single object. Here is a shortened example:
{
"generator": "bank-statements-converter.online",
"generatedAt": "2026-11-03T10:15:00.000Z",
"statements": [{ "file": "october.pdf", "pages": 1, "currency": "GBP",
"dateOrder": "DMY", "openingBalance": 2500, "closingBalance": 4061.23,
"balanceCheck": { "checked": 14, "passed": 14, "totalsMatch": true } }],
"count": 14,
"transactions": [
{ "date": "2026-10-02", "rawDate": "02/10/2026",
"description": "Salary ACME Widgets Pty Ltd", "reference": null,
"debit": null, "credit": 3200, "amount": 3200, "balance": 5700 },
{ "date": "2026-10-03", "rawDate": "03/10/2026",
"description": "Rent Payment October", "reference": null,
"debit": 1450, "credit": null, "amount": -1450, "balance": 4250 }
]
} Designed for code
- ISO 8601 dates (
YYYY-MM-DD), with the original text kept inrawDatefor auditing. - Numeric amounts with consistent signs:
amountis negative for money out. - Nulls, not empty strings, for missing values, so type checks stay simple.
- Metadata including the balance-check result, so your pipeline can reject statements that do not reconcile.
Typical uses
Load the file into pandas with pd.json_normalize(data["transactions"]), insert it into PostgreSQL or SQLite, feed a
categorisation model, or seed test data for a fintech app. If you prefer tabular data, the same preview exports to
CSV and Excel.
Privacy for sensitive data
Because parsing happens in the browser, you can turn real statements into JSON without sending them to a third-party API. That keeps you clear of data-processing agreements for this step and keeps customer data on your own machine.
Related converters and guides
What does the JSON output contain?
A transactions array where each item has date (ISO), rawDate, description, reference, debit, credit, amount and balance, plus metadata per statement such as page count, detected currency, date order, opening and closing balances and the balance-check result.
Is there an API?
Not at the moment. The converter runs entirely in the browser so that statements are never uploaded. You can export JSON from the page and load it into your own application.
Are amounts numbers or strings?
Numbers. Debit and credit are positive numbers or null, amount is signed (money out negative), and balance is a number or null when the statement has no running balance.