Statement Normalizer logo

Statement Normalizer

by Josh FortierGitHubUpdated Aug 1, 2026

Deterministic bank-statement parsing for AI agents: messy CSV/OFX exports in, clean categorized ledger rows out.

finance
csv
ofx
+2
|

How to pay

Subscribe

Monthly billing

Free

Predictable monthly cost with included usage. Best for steady, high-volume traffic.

  • Unlimited tools within plan limits
  • One API key, billed once a month
  • Cancel any time

Your bank data never sticks anywhere. Statement Normalizer parses in memory only: no storage, no external calls, no LLM in the loop. Deterministic rules, identical output every time. MIT open source, so you can verify that claim or run it locally.

The problem: every bank exports transactions differently. Shifted headers, US and EU date formats, split debit and credit columns, currency symbols, parentheses negatives, decimal commas, junk preamble lines, footer totals. Agents doing bookkeeping either write fragile one-off parsing or hallucinate structure.

Four tools:

  • detect_format: identify delimiter, header row, and date convention before committing
  • normalize_statement: full parse to clean ledger rows with ISO dates, signed amounts, and heuristic categories
  • summarize_statement: inflow, outflow, net, and by-category totals
  • to_quickbooks_csv: re-emit as QuickBooks-importable 3-column CSV

See it respond. normalize_statement on a messy CSV row returns:

{
  "date": "2026-07-03",
  "description": "COFFEE SHOP #42",
  "amount": -4.50,
  "direction": "out",
  "category": "dining"
}

Every payload carries parse warnings and a disclaimer. Bookkeeping assistance, not financial advice. The free tier covers evaluation of all four tools; after that, pay only for what you use.