Skip to content
Banking Converter
PDF → JSONFree · 25 pages a month

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.

1 · Upload your bank statement
  • PDF
  • Scanned
  • Password-protected

Drop a PDF statement here

or

Choose file
2 · Format
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.

northgate-2210-2026-08.jsonvalidation.reconciled: true
{
  "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

01

Precise money

Amounts are decimal strings, never floats, so 0.10 stays 0.10. Parse them with Decimal, BigDecimal or your language's equivalent.

02

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.

03

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.

04

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.

05

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.

06

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

Bank statement to JSON: questions

Why are amounts strings and not numbers?

JSON numbers are usually parsed as binary floats, which cannot represent 0.10 exactly. Decimal strings keep cents precise; parse them with a decimal type.

What is the difference between normalized and raw?

Normalized gives you parsed values only. Raw keeps the original text of each cell next to the parsed value, which is useful when you want to audit the parser or handle an unusual layout yourself.

How do I map a row back to the PDF?

Use 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?

Field names are part of the documented API contract. Multi-account envelopes carry a schema_version; every document carries parser_version. Breaking changes are announced on the changelog.

Can I get the JSON without using the website?

Yes. The API accepts a PDF and returns the same JSON once the conversion completes. API access is included in paid plans.

Is JSON available on the free plan?

No. This format starts on Starter; the free plan converts to CSV and Excel. Every plan reconciles and reviews the statement the same way; only the export format differs. See pricing.

Convert your bank statement to JSON now.

Free plan: 25 pages a month, no card required.

Convert to JSON