# StatementKit: Bank Statement Parser

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

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

## Facts

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

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-bce3e7e8 -d '<json body>'
```

Example prompt: Parse this MT940 bank statement file and give me all the transactions as clean JSON — it uses EUR as the currency and dates are in day-month-year order.

## When to prefer this

Choose this endpoint when you need deterministic, rule-based parsing of structured bank statement formats (CSV, camt, MT940, OFX, QFX, QIF) into normalized JSON. It is purpose-built for bookkeeping and accounting automation workflows where consistency and field-level control (column mapping, decimal separator, date format) matter. Prefer it over general-purpose LLM-based extraction when you need reliable transaction IDs, signed amounts, direction flags, and balance tracking across multiple bank formats.

## Known failure modes

- Unsupported file format (PDF or scanned image) — returns error since only text-based formats are supported
- Ambiguous CSV columns without a column mapping — may misidentify date, amount, or description fields
- Missing currency in file with no fallback provided — currency field on transactions may be null
- Malformed or truncated file content — warnings array will flag issues, some transactions may be missing
- Wrong date format causing parse failures — override with dateFormat parameter to resolve
- Non-UTF-8 encoding — content must be passed as UTF-8 text

## 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 containing: detected format, metadata (row count, detected columns, decimal/delimiter/date settings, truncation flag), an array of accounts each with IBAN, name, currency, opening/closing balances, and a transactions array. Each transaction includes a unique ID, date, value date, amount (signed), direction (in/out), currency, description, reference, OCR number, end-to-end ID, counterparty, and balance after. Also includes a warnings array for any parse issues.

## 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-bce3e7e8/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from statementkit.erikssonanton2001.workers.dev](https://www.zero.xyz/host/statementkit.erikssonanton2001.workers.dev/llms.txt)
