# StatementKit: Bank Statement Parser

> StatementKit: Bank Statement Parser is a paid API for AI agents from statementkit.zenith-ops.workers.dev, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-23).

Parses bank statement files (CSV, camt.052/053/054, MT940, OFX/QFX, QIF) into normalized JSON transactions with optional CSV/hledger/SIE4 export

## Facts

- Endpoint: POST https://statementkit.zenith-ops.workers.dev/v1/parse?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-23
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/statementkit-bank-statement-parser-e4f1ce97
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_q3_Ga-flqh9bG5lgdJn7y

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability statementkit-bank-statement-parser-e4f1ce97 -d '<json body>'
```

Example prompt: I have a Swedish bank statement exported as CSV with semicolon delimiters and comma decimals — can you parse it into clean JSON transactions? The date column is called 'Bokföringsdatum' and the amount column is 'Belopp'.

## When to prefer this

Choose StatementKit when you need deterministic, schema-stable parsing of real bank statement files across a wide range of formats (CSV from any bank, camt.052/053/054, MT940, OFX/QFX, QIF) into a unified normalized JSON schema. Prefer it over general-purpose LLM parsing when you need consistent transaction IDs, reliable amount/direction normalization, and structured metadata like IBAN and balances. Ideal for bookkeeping automation, accounting integrations, and financial data pipelines where schema consistency and format breadth matter more than AI-based interpretation.

## Known failure modes

- Unsupported file format (PDF or scanned images are explicitly not supported)
- Ambiguous date format causes mis-parsing if dateFormat not specified
- Wrong decimal or delimiter separator causes amount parsing errors
- Missing currency in file with no fallback provided results in null currency
- Column mapping mismatch if CSV headers don't match provided 'columns' map
- Malformed or truncated file may yield partial results with truncated:true in meta

## How this service works

Deterministic bank statement normalizer for AI agents and bookkeeping tools: CSV from any bank, camt.052/053/054, MT940, OFX/QFX and QIF in; normalized JSON, analysis and CSV/hledger/SIE4 export out.

## Output

Returns a JSON object with a 'format' field identifying the detected format, 'meta' with parsing details (row count, detected columns, delimiter, date format), 'accounts' array containing normalized transactions (each with id, date, amount, currency, direction, reference, valueDate, description, balanceAfter, counterparty), and 'warnings' for any parsing issues encountered.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "format": {
   "enum": [
    "csv",
    "camt",
    "mt940",
    "ofx",
    "qif"
   ],
   "type": "string",
   "description": "Skip auto-detection."
  },
  "columns": {
   "type": "object",
   "description": "CSV: map field names (date, amount, description, ...) to exact header names.",
   "additionalProperties": {
    "type": "string"
   }
  },
  "content": {
   "type": "string",
   "description": "The statement file as text (UTF-8). PDF and scanned images are not supported."
  },
  "decimal": {
   "enum": [
    ",",
    "."
   ],
   "type": "string",
   "description": "CSV decimal separator override."
  },
  "currency": {
   "type": "string",
   "description": "Fallback ISO 4217 currency when the file has none, e.g. SEK."
  },
  "delimiter": {
   "type": "string",
   "description": "CSV delimiter override: comma, semicolon, tab or pipe."
  },
  "dateFormat": {
   "enum": [
    "ymd",
    "dmy",
    "mdy"
   ],
   "type": "string",
   "description": "CSV date order override for ambiguous dates."
  },
  "includeRaw": {
   "type": "boolean",
   "description": "Add the raw source fields to every transaction."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "meta": {
   "rows": 4,
   "decimal": ",",
   "delimiter": ";",
   "truncated": false,
   "dateFormat": "dmy",
   "detectedColumns": {
    "date": "Bokföringsdatum",
    "amount": "Belopp",
    "balance": "Saldo",
    "reference": "Verifikationsnummer",
    "valueDate": "Valutadatum",
    "description": "Text"
   }
  },
  "format": "csv",
  "accounts": [
   {
    "iban": null,
    "name": null,
    "currency": "SEK",
    "transactions": [
     {
      "id": "ff1a637e10b6cbbb",
      "ocr": null,
      "date": "2026-03-02",
      "amount": 32500,
      "currency": "SEK",
      "direction": "in",
      "reference": "5001",
      "valueDate": "2026-03-02",
      "endToEndId": null,
      "description": "Lön Acme AB",
      "balanceAfter": 41200.5,
      "counterparty": null
     },
     {
      "id": "3cbcc9a094dcd39a",
      "ocr": null,
      "date": "2026-03-03",
      "amount": -129,
      "currency": "SEK",
      "direction": "out",
      "reference": "5002",
      "valueDate": "2026-03-03",
      "endToEndId": null,
      "description": "Netflix.com",
      "balanceAfter": 41071.5,
      "counterparty": null
     },
     {
      "id": "afaab09a8e366eba",
      "ocr": null,
      "date": "2026-03-05",
      "amount": -842.35,
      "currency": "SEK",
      "direction": "out",
      "reference": "5003",
      "valueDate": "2026-03-05",
      "endToEndId": null,
      "description": "ICA Maxi Stockholm",
      "balanceAfter": 40229.15,
      "counterparty": null
     },
     {
      "id": "470cc2a77723cc1d",
      "ocr": null,
      "date": "2026-03-07",
      "amount": -615.4,
      "currency": "SEK",
      "direction": "out",
      "reference": "5004",
      "valueDate": "2026-03-07",
      "endToEndId": null,
      "description": "Vattenfall Eldistribution",
      "balanceAfter": 39613.75,
      "counterparty": null
     }
    ],
    "accountNumber": null,
    "closingBalance": null,
    "openingBalance": null
   }
  ],
  "warnings": []
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/statementkit-bank-statement-parser-e4f1ce97/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from statementkit.zenith-ops.workers.dev](https://www.zero.xyz/host/statementkit.zenith-ops.workers.dev/llms.txt)
