# StatementKit Bank Statement Normalizer

> StatementKit Bank Statement Normalizer is a paid API for AI agents from statementkit.erikssonanton2001.workers.dev, paid per call via x402, $0.01/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 analysis and export options

## Facts

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

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

Example prompt: Can you parse this bank statement CSV for me — the columns are mapped as date=Bokföringsdatum, amount=Belopp, description=Text, and the decimal separator is a comma — and give me a full transaction breakdown with totals as of today 2025-07-15?

## When to prefer this

Choose this endpoint when you need deterministic, rule-based parsing of structured bank statement files (CSV, camt, MT940, OFX/QFX, QIF) into clean normalized JSON — especially when you need consistent output regardless of which bank issued the file. Prefer it over general-purpose LLM-based parsers when auditability and repeatability matter, or when you need accounting-ready exports (hledger, SIE4) directly from the parser output.

## Known failure modes

- Unsupported file format (PDF, scanned images not supported)
- Ambiguous date format causing mis-parsing — use dateFormat override
- Wrong decimal or delimiter separator causing parse errors
- Missing currency in file with no fallback provided — use currency parameter
- Column names don't match — use columns mapping parameter
- Malformed or truncated file content — truncated flag set in response warnings

## 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' section containing transaction list (with date, amount, description, balance, reference fields), metadata about the detected format and column mappings, and a list of warnings; plus an 'analysis' section with per-account summaries including transaction counts (in/out), date period covered (from/to/days), and totals (income, expenses, net). Optionally includes raw source fields per transaction.

## 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-a53a943c/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)
