parsr.

Belgium · Bank statement parser

Parse KBC statements into structured JSON

Belgium's largest retail bank — IBAN-formatted statements, Dutch + French + English layouts.

KBC bank statements come in three language variants (Dutch, French, English) depending on the customer's preference. The pagination layout is consistent across all three: account header at the top of page 1, transaction table running across pages, balance summary at the foot of the final page. Statement periods can be monthly or quarterly; the parsing pipeline handles both. The transaction table format is dense — one line per transaction with date, description (sometimes wrapping to two lines), value date, and amount. KBC stamps the IBAN as a single space-separated string; parsr normalizes that to the canonical no-space form. Closing balances are printed both numerically and in words on retail accounts; we read the numeric form. Joint accounts list both holders in the header.

Format notes

What's specific to KBC

  • Three language variants (NL / FR / EN), shared layout
  • IBAN printed with spaces; parsr normalizes to canonical form
  • Two-line transaction descriptions handled correctly
  • Closing balance shown in numerical + written form (we use numerical)
  • Joint accounts list both holders

What we extract

Fields you get back

  • Account holder + IBAN + statement period
  • Opening / closing balance with currency
  • Per-transaction: posted_date, value_date, description, amount, balance_after, type (debit/credit)
  • Counterparty IBAN when present
  • Confidence + bbox per field

Sample response

Real shape, real bank

POST /v1/parse → 200 OKschema bank_statement.v2
{
  "schema_version": "bank_statement.v2",
  "result": {
    "institution_name": "KBC Bank",
    "account_holder": "Pieter Janssens",
    "account_iban": "BE68539007547034",
    "currency": "EUR",
    "opening_balance":  { "amount": "2840.50", "currency": "EUR" },
    "closing_balance":  { "amount": "1956.30", "currency": "EUR" },
    "transactions": [
      {
        "posted_date": "2026-04-03",
        "description": "Maandelijkse loon",
        "amount":      { "amount":  "2400.00", "currency": "EUR" },
        "type": "credit"
      },
      {
        "posted_date": "2026-04-05",
        "description": "Huur — KBC Wonen",
        "amount":      { "amount": "-1100.00", "currency": "EUR" },
        "type": "debit"
      }
    ]
  },
  "validation": {
    "balance_chain": { "valid": true, "diff": "0.00", "transaction_count": 14 }
  }
}

Try it on a real KBC statement.

200 free pages/mo. No credit card. EU residency by default — your borrowers' data stays in the EU.

Get an API key