# StatementKit: Bank Statement Normalizer

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

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

## Facts

- Endpoint: POST https://statementkit.zenith-ops.workers.dev/v1/analyze?utm_source=zero.xyz
- Price: $0.01/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-normalizer-3ae725e9
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_fWGuGQxzmXqM7xeX4hIvR

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-normalizer-3ae725e9 -d '<json body>'
```

Example prompt: I have a Swedish bank CSV export with semicolon delimiters and comma decimals — the date column is called 'Bokföringsdatum' and amount is 'Belopp'. Can you parse it into clean JSON transactions and give me a summary of totals for the period, flagging any recurring payments that stopped before 2025-06-01?

## When to prefer this

Choose this endpoint when you need deterministic, rule-based parsing of standard bank statement formats (CSV, camt, MT940, OFX/QFX, QIF) into normalized JSON — especially for bookkeeping automation, accounting ingestion pipelines, or AI agent workflows that need structured financial data without LLM-based extraction. Prefer this over generic document parsers when format fidelity and accounting-grade output (hledger, SIE4) matter.

## Known failure modes

- PDF or scanned image input is not supported — only text-based formats are accepted
- Ambiguous CSV date formats without dateFormat override may be mis-parsed
- Missing currency in file with no fallback 'currency' parameter causes incomplete metadata
- Unrecognized or malformed file format returns a parse error
- Incorrect column mapping in 'columns' parameter leads to failed field extraction
- Truncated large files may be flagged via 'truncated: true' in metadata with partial results

## 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 'parsed' block (detected format metadata, column mappings, warnings, transaction list with date/amount/description/balance/reference fields) and an 'analysis' block (per-account period summary with in/out/net totals and transaction counts). Optional fields include raw source columns per transaction and CSV/hledger/SIE4 formatted export strings.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "today": {
   "type": "string",
   "description": "YYYY-MM-DD; flags recurring payments that stopped before this date."
  },
  "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."
  },
  "include_transactions": {
   "type": "boolean",
   "description": "Default true. false returns only the analysis."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "parsed": {
   "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": [],
   "warnings": []
  },
  "analysis": {
   "accounts": [
    {
     "counts": {
      "in": 1,
      "out": 3,
      "transactions": 4
     },
     "period": {
      "to": "2026-03-07",
      "days": 6,
      "from": "2026-03-02"
     },
     "totals": {
      "in": 32500,
      "net": 30913.25,
      "out": 1586.75
     }
    }
   ]
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/statementkit-bank-statement-normalizer-3ae725e9/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)
