The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Statement Normalizer listing page.
Deterministic bank-statement parsing for AI agents: messy CSV/OFX exports in, clean categorized ledger rows out.
Every bank exports transactions differently: shifted headers, inconsistent date formats, debit/credit sign conventions, junk rows. Agents doing bookkeeping either write fragile one-off parsing or hallucinate structure. This server does the boring part correctly, deterministically, and identically every time.
Your transaction data is processed in memory only:
detect_format(sample) - identify the export format, delimiter, header row, and date conventionnormalize_statement(data, format_hint?) - full parse to clean ledger rows: ISO dates, signed amounts, merchant, categorysummarize_statement(data) - totals by category, month, and direction (income/expense)to_quickbooks_csv(data) - re-emit normalized rows as QuickBooks-importable 3-column CSVTests: python test_server.py - hand-built fixtures covering CSV variants, OFX, sign conventions, and malformed rows.