Blog / Categories

One vocabulary, every bank

The same lunch is Restaurants at one bank, Entertainment at another and nothing at all at a third. None of them is wrong — they were never trying to agree. What a mapping layer is, and the two things it does that no bank can.

Three ragged columns of bank category labels on the left collapsing through a mapping table into one clean column of owned categories on the right.

Lunch at the same café, paid by card, on three different accounts.

The first bank files it as Restaurants. The second calls it Entertainment. The third does not categorise card payments at all, so it arrives as Card payment and nothing else.

None of them is wrong. They were never trying to agree.

That is fine while you only have one account. The moment you have three, your eating-out total is not slightly off — it is unknowable, and nothing on screen tells you so. You are adding up three vocabularies as though they were one.

Every bank has its own opinion

A bank's categories exist for the bank. They are tuned to its own product analytics, its own merchant relationships, its own idea of what a customer looks like. They were never designed to be reconciled with another institution's, because no institution has ever needed to do that.

Two consequences follow, and both are structural rather than accidental.

The taxonomy stops at that bank's accounts. It cannot see the card you keep elsewhere, the crypto exchange, the brokerage — so it can never produce a total that means anything about your money as a whole, only about the part of it that happens to sit there.

And the taxonomy is not yours to keep. It lives in that bank's app. Close the account and the labels go with it; the history survives as amounts and dates with the meaning stripped out.

A mapping is one stored line

The fix is unglamorous. A mapping is a stored line between what the institution called a row and what you call it. Entertainment at that bank means Personal → Eating out in your books. Made once, kept against that institution, applied to every import afterwards.

That is the whole mechanism, and its value is entirely in the second half of the sentence. The first time you see a merchant you make a decision. The second time, and every time after, nobody asks you anything. An importer that does not accumulate your decisions costs the same amount of work every month forever, which is precisely the point at which people stop.

Merchant category codes do the boring majority automatically — the four-digit number the payment networks attach to card transactions, which is stable in a way merchant text never is. But an automatic guess is labelled as a guess and shown to you in its own pile, and it never overwrites a decision you made yourself. Your answer always wins.

$3,940
One card · one month · after mapping
Personal$2,049 Work$1,300 Transfers, not spending$591 Rows the bank filed as "Card payment"38%
One physical card, one month, split into two results the bank has no way of separating. The bottom-right figure is the share of rows that arrived with no usable category at all — and it is the ordinary case, not the bad month.

Personal and business, on the same card

Categories here are settings, not code. Rename them, add your own, hide the ones you never use, split them the way your accounts actually need to be split.

Two expense trees ship by default — Personal and Work — and that single line at the top of the tree is what turns a spending chart into a profit-and-loss view. Below it, the sub-categories are yours to invent. Pet care and client entertainment are not in anybody's standard list, which is exactly why you should be able to add them.

The important case is the boring one: most people run personal and business spending through the same physical card. The bank sees one card and one stream. The mapping decides, row by row, which side of the line each purchase falls on — so the pet groomer and the contractor stop appearing in the same total.

The split has to be structural, not a tag

A "business" label bolted onto a category set that was designed for households will hold for about a quarter. Making it the top level of the tree means every category underneath inherits an answer, and there is no row that can quietly avoid the question.

A category does not say who

The part that has no equivalent at a bank at all.

A mapping carries more than a category. It can attach the person, the company or the project behind the row — so the same import that decides what kind of expense something was also decides who it involved.

Pay a car-painting service by card and it becomes an expense and the company that did the work. Tip a waiter or a barber and it becomes Eating out or Beauty and the person who received it. A card number already saved against somebody fills the counterparty in on its own, without being asked twice.

Your bank has a merchant string and a card number. There is no field for who, because a bank has no concept of your suppliers, your clients or your household. However good its categories become, it cannot tell you what one person or one company cost you this year, and it cannot tell you whether a project made money.

A bank categorises your spending for its own purposes and lends you the result. The categories were never yours, and they were never portable.

Why every consolidation attempt starts here

What a bank cannot do

Not an oversight it could fix in the next release — a consequence of what a bank is.

Your bank A mapping layer
Owns the categories The bank does You do — rename, add, split
Scope Its own accounts only Every institution, one set
Personal vs business Not a distinction it makes Drawn at the top of the tree
Who the money went to A merchant string Person, company or project
Your corrections Live inside that bank Saved once, reused everywhere
If you leave The meaning leaves with you The mapping is yours

One lunch, three banks, three answers, and none of them yours. Everything else follows from fixing that.

See your own number instead of reading about someone else’s.

Import a statement, add your accounts, and get a real net-worth figure in an evening. Six months free, no card required.

Start free
6 months free · no cardStart free