AgenTomte

September 5, 2026 · 6 min read

Automate bank statement processing without letting it guess

By Sahan, co-founder, systems and delivery

Automating bank statement processing means turning a document your bank wrote into ledger entries your accountant will sign, with nobody retyping anything in between. The reading part is close to solved. The part that still breaks is that a bank line hands you a truncated description and an amount, while your books need a counterparty, a category, and a match to a specific invoice.

So the system worth building is not an OCR tool. It is a pipeline that checks the whole statement before it trusts any line in it, proposes each match with a confidence score, and refuses to write anything to the ledger it cannot justify.

We run this on our own books across three operating companies. The pipeline is a tomte, our word for one production agent with one defined job, and this one’s job is to get bank documents into the ledger without inventing anything.

What automating bank statement processing actually covers

Five jobs, not one. Extract the lines from a PDF, image, or export. Validate that the statement is internally consistent. Categorise each line against known patterns. Match lines to existing records like invoices, payouts, and bills. Then post to the ledger, or queue for a human. Most tools sold as “bank statement automation” only do the first job.

The last two are where the money is. Extraction errors are loud and get caught. A wrongly matched payment is quiet, and it sits in your books until someone chases a customer who already paid.

The bank line is the problem, not the PDF

Payment rails are getting richer, slowly. The Federal Reserve completed the Fedwire Funds Service migration to the ISO 20022 message standard on 14 July 2025, announced 15 July 2025, across a service that moves more than $4.7 trillion in wire transfers on an average day. Swift retired its legacy MT payment messages in November 2025.

That should mean structured, machine-readable remittance data arriving with every payment. It largely does not. The Bank for International Settlements CPMI, in Brief No 11 in April 2026, found that the adoption of rich data “remains constrained by the prevalence of like-for-like message formats and underdeveloped usage guidelines for structured remittance information in several jurisdictions”.

The same brief notes that only a limited number of institutions have upgraded their core banking systems to be ISO 20022-native. In Japan, it reports, 40% of participants in one major clearing system had done so as of summer 2025.

Translation for anyone running a business: your bank migrated the envelope, not the letter. The description field on your statement is still a squashed string with the counterparty’s name half cut off, because the old format truncated it and the new format is being filled in the old way. BIS names truncation as one of the long-standing problems ISO 20022 exists to fix, which tells you it is not fixed yet.

Do not assume a bank API will rescue you

In the United States, the legal route to clean bank data is unsettled. The Consumer Financial Protection Bureau released its Personal Financial Data Rights final rule under Section 1033 on 22 October 2024, then published an advance notice of proposed rulemaking to reconsider it on 22 August 2025. On 29 October 2025, in Forcht Bank, N.A. v. CFPB, Judge Danny Reeves of the Eastern District of Kentucky granted a preliminary injunction barring the CFPB from enforcing the rule while that reconsideration runs.

Plan accordingly. Where a bank feed exists and is reliable, use it. Build the document path anyway, because feeds are incomplete for older periods, for accounts at smaller banks, and for the statement your auditor actually asks for.

How ours works, from a PDF to a queued entry

The sequence matters more than the model choice.

  1. A statement lands in a monitored intake location, tagged to a company and an account.
  2. Text is extracted, with a confidence score per line. Scans and screenshots go through image reading rather than being rejected.
  3. Lines are normalised. Dates are canonicalised and each amount is derived from the movement in the running balance, not trusted as printed.
  4. The whole statement is validated. Opening balance plus every movement must roll forward to the closing balance, and printed totals must foot. If it does not tie, the entire document is quarantined. No partial loads.
  5. Each line is categorised against a rulebook of known patterns. Every proposal carries a confidence score and a reference to the rule that produced it, so a human can see why.
  6. Payment lines are matched to existing records, including one payout covering many orders.
  7. A fingerprint is computed per line, so re-uploading the same statement cannot double-record anything.
  8. Proposals land in a review queue with their confidence and flags. Nothing reaches the ledger from here on its own.
  9. A human approves, edits, or rejects. Corrections become new rules rather than one-off fixes.
  10. Approved entries post through one write path that re-checks for an existing match before creating anything.

Auto-posting exists, and it is off by default. It turns on per account, only where the mapping is complete and someone deliberately enabled it. Any period without a real source document that ties out is marked unverified rather than assumed clean.

Spreadsheet, accounting-software rules, or an agent

Manual spreadsheetBank feed rules in your accounting softwarePurpose-built agent
Handles PDF and scanned statementsYes, by retypingNo, feed onlyYes
Validates the statement rolls forwardOnly if someone checksNo, lines arrive individuallyYes, and quarantines the whole file if not
Says how confident it isNoNo, a rule either fires or does notYes, per line, with the rule shown
Matches one payout to many invoicesManuallyRarelyYes
Behaviour when unsurePerson guessesFalls to uncategorisedHolds for a human, never books
Who owns itYouThe vendorYou, on your own infrastructure

What actually breaks

Six things, in our experience, and each one has to be designed for rather than discovered.

Netted fees. A marketplace or processor deducts its cut before paying out. Booked net, your revenue is understated and the fee never appears as an expense. The agent splits the settlement back into gross revenue, fee, and tax legs.

Partial payments. A customer pays part of an invoice, or one transfer covers three. Anything that does not sum exactly goes to a manual allocation step instead of being force-matched to the nearest bill.

Duplicates. Someone uploads January twice. The fingerprint catches it.

Statements that do not foot. A bad scan or a missing page. Quarantine the file, do not load the readable 90%.

Ambiguous internal transfers. Money leaving one company account and arriving at another. Categorised by a human, always, because guessing here silently invents intercompany balances.

Old periods. Data from before the system existed is reference-only and barred from posting.

The pattern under all six is the same one behind our ad-spend truth engine, where a platform-claimed 4.87x return turned out to be 0.33 to 0.50 against the actual ledger, figures as of July 2026. A number nobody reconciled is not a number. It is a guess with a decimal point.

This is the mirror image of the purchase order problem. There, you wrote the document, so you can fix it at source. Here you wrote nothing. The bank’s format is the bank’s decision, and the agent has to survive whatever arrives.

What it costs to install

A working version on your accounts, your document sources, and your accounting system is an AI Workforce Sprint: from $9,500, four to six weeks, built on your infrastructure, documented, handed to your team at the end. Fixed price and fixed scope. If you want the rules mapped before committing to a build, the $1,900 audit does that first. Both prices are public, as of July 2026.

You own the result. The code sits in your repository, the data in your database, and if we vanished tomorrow your controller still has the keys.

If you want one, describe your setup at /start: which banks, what format the statements arrive in, and which accounting system they need to reach. You get a written reply within one business day, with a fixed price and a scope. No call, ever.

Tell us what you want automated

Describe the work in writing. You get a written reply within one business day: a fixed-price proposal, a scoping question, or an honest referral out.

Start at /start

▸ written reply within one business day · no call scheduled, ever

Doesn't fit a package? Tell us what you need anyway.

Questions? Ask in writing

no chatbot · a human replies

Ask us anything, in writing

A founder replies within one business day. That is the same promise clients get.