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.

  • Balances checked before download
  • No card required
  • Original PDF deleted after 24 hours

Convert a statement to JSON

STEP 1 / 3

Drop a PDF statement here, or

Choose a PDF
  • PDF only
  • text-based or scanned
  • password-protected
  • up to 5 MB on the free plan

No card required. Files are checked as soon as they are added; originals are deleted 24 hours after processing.

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.json✓ validation.reconciled: true

Excerpt

{
  "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"
}

Shape of the normalized profile (fictional statement, abbreviated)

Shape of the normalized profile (fictional statement, abbreviated)
PathExample valueNotes
institution"Northgate Bank"Detected from the header; may be null
account_number_masked"****2210"Only the last digits are kept
statement_start_date / statement_end_date"2026-08-01" / "2026-08-31"ISO 8601 dates
opening_balance / closing_balance"8420.00" / "9300.63"Decimal strings, never floats
transactions[2].description"Check 1042"Wrapped lines merged
transactions[2].amount"-1200.00"Signed; debit and credit also provided
transactions[2].source_page / source_bbox1 / [72.0, 412.5, 540.0, 424.0]Where the row sits on the PDF page
validation.reconciledtrueBalance and continuity tests passed
validation.confidence1.0Weighted score between 0 and 1

Why convert bank statements to JSON here.

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

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

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

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

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

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

Bank statement to JSON: questions

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.

Convert your bank statement to JSON now.

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

25 pages per month · No card required · No bank login