Convert bank statements to JSON
The JSON export is the most complete view of a conversion. It contains the normalised transactions, the statement metadata (institution, masked account number, period, opening and closing balances), the reconciliation result with each test's outcome, and a confidence value and flag list on every row.
- Scanned
- Password-protected
Drop a PDF statement here
or
Choose file- Profiles
- Normalized / Raw
- Money
- Decimal strings
- Dates
- ISO 8601
No card required. Originals deleted after 24 hours.
What the JSON contains
The complete view of a conversion: statement metadata, typed transactions with a confidence value and flag list on every row, the reconciliation result for each test, and the parser version that produced it.
{
"institution": "Northgate Bank",
"account_number_masked": "****2210",
"currency": "USD",
"statement_start_date": "2026-08-01",
"statement_end_date": "2026-08-31",
"opening_balance": "8420.00",
"closing_balance": "9300.63",
"transactions": [
{
"ordinal": 1,
"transaction_date": "2026-08-02",
"description": "Payroll deposit ACME Design LLC",
"debit": null,
"credit": "2500.00",
"amount": "2500.00",
"balance": "10920.00",
"source_page": 1,
"confidence": 1.0,
"flags": []
}
],
"validation": { "reconciled": true, "confidence": 1.0, "issues": [] },
"parser_version": "1"
}Why convert bank statements to JSON here
Precise money
Amounts are decimal strings, never floats, so 0.10 stays 0.10. Parse them with Decimal, BigDecimal or your language's equivalent.
Every row traceable
Each transaction carries source_page and source_bbox in PDF points, so you can render the page and highlight the row exactly as the review screen does.
Validation you can act on
The validation object reports the balance test, running-balance chain, period, duplicate, page-boundary and totals tests, plus a weighted confidence score and an issues list.
Normalized or raw
Normalized gives parsed values only. Raw keeps the original cell text next to each parsed value, useful for auditing the parser or handling an unusual layout yourself.
Stable, documented schema
Field names are part of the API contract. Multi-account envelopes carry schema_version and every document carries parser_version, so pipelines can detect changes.
Same data through the API
The JSON you download is the response to GET /api/v1/statements/{id}, so an integration built against the download works unchanged with the API.
How to convert a bank statement to JSON
- 1
Upload your statement
Drop a PDF into the converter above. Text and scanned files are accepted on every plan, password-protected PDFs from Starter, and you see the page count before anything else happens.
- 2
Choose JSON
Select JSON as the output, then normalized (clean, typed data) or raw (parsed values alongside the original cell text) in the export options.
- 3
Review the result
The extracted rows are shown next to the original page. Flagged rows carry a reason; click any row to see where it came from and edit, merge or split it.
- 4
Download or fetch
Download the .json file, or fetch the same document from the API once the conversion completes. Exports are regenerated whenever you edit.
JSON technical notes
What each part of the document guarantees, so downstream code can rely on it without defensive parsing.
Types
money: "1234.56" strings · dates: YYYY-MM-DD · debit, credit and signed amount on every row
Flags
MERGED_DESCRIPTION · LOW_OCR_CONFIDENCE · AMBIGUOUS_DATE · AMBIGUOUS_AMOUNT
Validation object
reconciled · confidence · component scores (balance, continuity, amounts, dates, structure, OCR, period) · issues[]
Envelope and versions
single account: flat object · multi-account: { schema_version, accounts[] } · parser_version, generated_at
API referenceBank statement to JSON: questions
Why are amounts strings and not numbers?
What is the difference between normalized and raw?
How do I map a row back to the PDF?
source_page (1-based) and source_bbox (x0, y0, x1, y1 in PDF points) to draw a highlight over the page image, the same way the review screen does.Is the schema stable?
schema_version; every document carries parser_version. Breaking changes are announced on the changelog.Can I get the JSON without using the website?
Is JSON available on the free plan?
Other bank statement converters
Convert your bank statement to JSON now.
Free plan: 25 pages a month, no card required.
Convert to JSON