Companies routinely overpay their banks 10–20% in fees. Not because banks are dishonest. Because almost nobody checks the math.
The business model is almost elegant in how little friction it has. The bank charges you for accounts, transactions, payments, wires, portal users, data, all of it rolled into one tidy fee, and then deducts it straight from your account before you’ve had a chance to look at it. No invoice to approve. No purchase order. It just happens, every month, automatically.
The question I asked, every single time I sat down with a bank fee statement, was never complicated. Was what I should have been charged, and what I paid, actually right?
I have the data. That was never the problem. I’ve got an 822, or a TWIST file, or at worst a PDF, listing every charge. I know, or I’m supposed to know, my own accounts, my own transaction volumes, and my contracted rate for every fee type at every bank. So the information exists on both sides of the ledger. The problem is that almost nobody sits down and reconciles them against each other, every month, on a recurring basis.
Three numbers that are probably wrong
Accounts. Start with the simplest check: is the number of accounts the bank is billing you for the actual number of accounts you have. If you’ve grown through M&A, and most companies of any size have, the answer is very often no. Banks that have grown the same way, through their own acquisitions, are notorious for never fully integrating their own systems, and that shows up as you paying maintenance fees on accounts you closed years ago, or, on occasion, accounts that were never yours to begin with. I see it constantly, and it’s rarely intentional on the bank’s part. It’s just entropy.
Volumes. Next: are the volumes right. If you ran twenty ACHs this month, are you being billed for twenty, or for some other number nobody’s checked against your own records. If you have ten portal users, is that what shows up on the statement. You have this data sitting in your own systems. The gap is having a mechanism that actually reconciles them against each other, instead of assuming they do because the bill looks roughly the same as last month.
Rates. My contracted rate is $15 a wire. The statement says $20. If it’s a one-off, no big deal. At twenty wires a day, it’s material, and it’s rarely the only leak on the page.
There’s a structural wrinkle underneath all three of these: every bank codes its fee line items differently. Code 123 at one bank and Code 456 at another can both mean “wire fee,” and nothing forces them to agree. Before you can even ask whether the number is right, you need something that normalizes those codes across banks, which isn’t really an AI problem so much as it is a “does anyone actually own this” problem.
The compensating balance trap
If you’re using compensating balances and an ECR to offset your fees, ask yourself honestly whether that’s the smart choice or just the easy one. Nine times out of ten it’s the latter.
| Rate | |
|---|---|
| Market rate | 4.0% |
| Bank’s earnings credit rate | 1.0% |
| Yield given up per dollar of balance | 3.0 points |
If the market rate is four percent and your bank is crediting you one percent, or something close to it, against your balances, you are giving up three points of yield to avoid paying a fee directly. Depending on the size of the balance, that’s either a rounding error or a real number. The only way to know which is to actually run the comparison: what would it cost to pay the fees outright and invest the cash instead, versus what you’re giving up today. Most companies have never quantified what that idle balance is actually costing them, because the arrangement was set up years ago and nobody has revisited it since.
What getting it right is actually worth
Here’s the part that surprises people: this isn’t just an efficiency exercise, it’s often a source of real, recoverable cash. When you catch an overcharge and go back to the bank, the typical outcome is a credit covering roughly the past six months of fee errors. Sometimes that number is large enough on its own to cover a meaningful chunk of a treasury technology project, before you even count the future savings from the leak being closed. It’s also, in my experience, the area people care about least going in, and the one that most reliably pays for itself.
Slow bank fee review isn’t just an oversight. It’s a subscription you keep paying without knowing the price.
None of the mechanics here are exotic. Importing fee statements, scraping PDFs, reconciling volumes and rates automatically, normalizing codes across banks, it’s all conceptually simple and practically tedious, which is exactly the profile of work agents are good at. An agent can check a wire fee the moment the wire happens, instead of thirty days later on a statement nobody reads closely. It can notice a fee-code drift across banks that a human would need a spreadsheet and an afternoon to spot. It can watch account usage over time and flag when it’s cheaper to consolidate volume with one bank than split it across three.
None of this takes a bigger team. It takes an agent whose only job is comparing the contracted rate against the charged rate, every single month, whether or not anyone remembers to look. That’s what Nilus agents are built to do.