← All posts

How to automate bank reconciliation with AI (without breaking in production)

You automate bank reconciliation with AI by letting deterministic code do the exact matching and reserving the model for the ambiguous cases a human would otherwise resolve by hand. Done the other way around — asking an LLM to “match the transactions” — it works in a demo and quietly mismatches real money in production.

Why reconciliation is harder than it looks

Reconciliation sounds like a lookup: line up the bank statement against the ledger and flag what doesn’t tie out. In reality it’s references that don’t match, fees and FX spreads that change the amount, one payment that covers three invoices, timing differences across value dates, and the same counterparty spelled four different ways. Generic automation breaks on the first exception, and a wrong match here isn’t a bug ticket — it’s a misstated cash position.

The architecture that actually works

The reliable pattern separates the work into layers:

  • Deterministic matching first. Exact and rule-based matching (amount, date window, reference, counterparty) clears the large majority of lines with zero ambiguity. This is plain code, fully auditable, and fast.
  • AI for the residue, not the bulk. The model only sees what rules couldn’t match, where its job is to propose likely matches with a confidence score — fuzzy references, split and merged payments, messy counterparty names.
  • Confidence thresholds drive routing. High-confidence proposals auto-clear; anything below the line is queued for a human with the reasoning attached.
  • Every decision is logged. Inputs, the match made, who or what made it, and why. Without that trail you can’t pass an audit — or trust the numbers.

Where the AI earns its place

The model is good at exactly the judgement a junior accountant applies: “these two probably go together even though the reference is garbled.” It is bad at arithmetic and at being exact, so you never let it do the sums — a function does that. Used this way, AI removes the manual matching that eats hours each day while the controls stay where finance needs them.

What to measure

Track the auto-match rate (how much clears without a human), the exception queue size, and — critically — the false-match rate. A reconciliation system that clears 99% of lines but occasionally matches the wrong ones is worse than the spreadsheet it replaced. Correctness first, throughput second.

This is the discipline we bring from treasury work, where a wrong number is a board conversation, not a retry. If reconciliation is eating your team’s days, that’s exactly what we build — and we stay until it runs in production.