TL;DR
Bank fee analysis is the practice of reconciling what your banks actually charge against what you agreed to pay, then investigating every difference. It matters because charges are voluminous and described in the bank’s own language, while pricing sits in contracts written in different terms. The difficulty is not arithmetic. It is that the two documents describe the same services differently, so they cannot be compared until someone translates one into the other.
Key Takeaways: Banks bill treasury services through an account analysis statement, often thousands of line items monthly across multiple accounts and institutions. AFP Service Codes exist to standardize this, but AFP publishes them without policing them, so banks apply them inconsistently and mix them with proprietary codes. Earnings credits complicate the picture further. Reconciliation surfaces billing errors, off-contract pricing, and services being paid for but not used.
What is bank fee analysis?
Bank fee analysis is the systematic review of what your banks charge for treasury and cash management services, reconciling the actual charges against agreed pricing, identifying errors and overcharges, and benchmarking costs across providers.
It exists because commercial banking charges are unusually difficult to verify. A large organization may be billed for thousands of individual services each month, across many accounts and often many institutions, described in inconsistent and bank-specific language, against pricing that sits in agreements nobody has reopened in years.
The consequence is that overcharges do not announce themselves. They accumulate quietly, and they persist not because treasury teams are careless but because verification is genuinely hard to perform by hand.
The topic has more attention in 2026 than usual. After several years of modest increases, many corporates are seeing banks move fees back toward the rising cost of delivering the underlying services, which makes the gap between contracted and charged pricing more consequential than it was.
The account analysis statement
The document at the center of this is the account analysis statement, the bank’s monthly accounting of the services provided, the volumes used, the charges applied, and the balances held.
It serves several purposes at once. It shows what you were charged and for what. It shows how account balances were used to offset those charges through earnings credits. And it functions as the audit trail justifying banking expense internally.
Two mechanisms interact in it and are frequently confused. Hard charges are fees billed directly. Earnings credits are imputed interest on demand deposit balances, calculated using an earnings credit rate that is negotiated and typically applied in tiers as balances move above or below agreed thresholds. Balances can therefore offset fees rather than paying them in cash, which is why the headline number on a statement does not necessarily represent what the banking relationship costs.
That distinction has consequences beyond treasury. Paying fees directly rather than through earnings credits carries different tax, budgeting, and forecasting implications, so the choice is not purely a cash management one.
AFP Service Codes, and why they fall short
Because bank statements were historically incomparable, the Association for Financial Professionals introduced standardized service codes in 1986. Domestic codes are six characters; the global codes, designed for the camt.086 statement format, run to eight digits and cover more than nine hundred banking services across Europe, the Middle East, Latin America, Africa, and the Pacific.
The intent is sound: a common dictionary means a service is identifiable regardless of which bank is describing it, which should make comparison and error detection straightforward.
In practice it falls short, for a reason AFP itself has been candid about. AFP publishes the codes but does not police their use, so the customer ends up doing that job.
The symptoms are consistent. Banks mix standard AFP codes with their own proprietary codes. Different institutions map the same service to different codes. One bank bundles several services under a single code while another itemizes them separately, which makes like-for-like comparison impossible without normalizing first. Treasury practitioners describe exactly this difficulty, particularly for services such as positive pay, where bundling practices diverge sharply between institutions.
Scale compounds it. It is not unusual for a large organization to hold accounts across dozens of institutions, and a treasury manager on an AFP advisory call described working at a company with accounts at 87 different financial institutions. Each brings its own coding conventions.
What reconciliation actually involves
The process itself is well defined, which makes the difficulty of executing it more striking.
Collect the statements, ideally in a standard electronic format such as camt.086 rather than PDF, since parsed data is the precondition for everything downstream.
Normalize the charges into comparable categories, mapping each bank’s codes and descriptions onto a common taxonomy.
Reconcile the actual charges against agreed pricing, line by line, using the rates in the contract or negotiated rate schedule rather than the rates you assume apply.
Investigate every variance, since a difference is a signal rather than a conclusion. It may be a rate error, a volume error, an off-contract service, a service you no longer use, or a correctly applied change you had forgotten about.
Track results over time, because fee schedules change and a reconciliation performed once is accurate for one month.
Why it is hard
The obstacle is worth naming precisely, because it explains why this work is so widely skipped.
The statement and the contract are written in different languages. The statement describes services in the bank’s terms and codes. The contract describes them in the terms negotiated at the time of signing, often years earlier, sometimes by people who have since left. Neither document was written with the other in mind.
So reconciliation is not a lookup. It is a translation exercise performed at the line level across thousands of items, where determining that a charge is wrong first requires establishing which contractual rate it should have been compared against. That determination is the hard part, and it must be repeated for every line, every month, for every bank.
Add to that a second difficulty: some charges are genuinely opaque by construction. FDIC assessments, for example, are notoriously hard to decipher from statement data, and practitioners compare them by examining the ratio of fees to dollars insured rather than trying to reverse the calculation.
The result is an economics problem. Any individual line item is small enough that investigating it costs more than it recovers, while the aggregate across accounts, banks, and months is frequently material. Rational behavior at the line level produces a poor outcome in total.
What a proper analysis surfaces
Organizations that do this work consistently find a recognizable set of issues.
Billing errors, where the rate applied differs from the rate agreed.
Off-contract pricing, where a service is charged at a standard rate because it was never brought under the negotiated schedule.
Redundant services, billed monthly and no longer used, often surviving a system migration or a process change that nobody reported to the bank.
Volume and tier errors, where an agreed threshold was not applied.
Earnings credit misapplication, where the rate or the tier used does not match what was negotiated.
Beyond recovery, the analysis produces something arguably more valuable: the evidence base for the next negotiation. Renegotiating from your own reconciled data is a materially different conversation from renegotiating from the bank’s summary.
Where automation fits
The work described above has a specific character. It is reading two documents written in different vocabularies and determining, line by line, which item in one corresponds to which term in the other. It is interpretation rather than calculation, which is why parsing statement files, while necessary, does not by itself solve the problem.
Automation that can read unstructured documents and reason about their contents addresses the translation layer directly: interpreting the statement whatever form it arrives in, mapping each charge to the corresponding contractual term, comparing the applied rate and volume against what was agreed, and escalating the variances that genuinely require a treasury judgment rather than a mechanical correction.
The economics of checking change when the cost per line approaches zero. Verification stops being something reserved for the largest charges and becomes something applied to the population, which is where the aggregate sits.
Because these findings are used to challenge a bank and to adjust accounting entries, each determination needs to be traceable to the statement line and the contract clause it rests on. A recovery claim you cannot evidence is not a claim.
To be clear about scope, Kognitos is not a bank fee management platform. It does not maintain AFP code libraries, hold benchmark data, or replace the specialist providers and advisory firms that do this as a service. What it addresses is the document reading and cross-referencing underneath: turning statements and contracts into a reconciled comparison with a record of how each conclusion was reached.
For related material, see our guides on bank reconciliation automation, working capital management, supplier statement reconciliation, account reconciliation automation, and cost accounting. To see how deterministic AI reconciles documents that describe the same thing differently, book a demo or try the platform.
Getting started
Two steps before any tooling decision.
Request your statements in a standard electronic format rather than PDF. Data you can parse is the precondition for everything else, and many banks will provide camt.086 or an equivalent on request. Where a bank will not, that is itself worth knowing.
Then locate the actual pricing documents. A surprising number of organizations discover at this point that the negotiated rate schedule is not readily available, or that several amendments exist without a consolidated version. Reconciliation is impossible without a definitive statement of what you agreed to pay, and assembling that is frequently the real first task.



