How to categorise bank transactions in a spreadsheet
By the Banking Converter editorial team
Published
Once a statement is a spreadsheet, categorising it is a matching problem: keep a small table of keywords and the category each implies, apply it with one formula, and review only the rows nothing matched. That scales to a year of transactions far better than tagging rows by hand, and it stays correct next month.
Start from the right shape
Export with the accounting profile so each row has a date, a description and separate debit and credit columns, then add three columns of your own.
| Column | Source | Purpose |
|---|---|---|
| Date | Export | Grouping by month |
| Description | Export | What the rule matches against |
| Debit | Export | Money out |
| Credit | Export | Money in |
| Category | Formula | Assigned by the rules table |
| Month | Formula | First day of the month, for grouping |
| Note | Manual | Anything you want to remember about a row |
Keep the exported columns untouched. Adding your own columns to the right means you can re-export next month, paste the new rows underneath, and drag the formulas down.
A rules table beats tagging by hand
On a second sheet named Rules, keep two columns: a keyword and the category it implies. Twenty rules usually cover most of a personal account, because spending is repetitive.
| Keyword | Category |
|---|---|
| TESCO | Groceries |
| SAINSBURY | Groceries |
| TFL | Transport |
| UBER | Transport |
| NETFLIX | Subscriptions |
| GODADDY | Software |
| PAYROLL | Income |
| HMRC | Tax |
Because the rules live in the sheet rather than in the rows, correcting a mis-categorised merchant fixes every month at once.
The formula that applies them
This looks up the first keyword contained in the description and returns its category, falling back to Uncategorised:
=IFERROR(
INDEX(Rules!B:B,
MATCH(TRUE, ISNUMBER(SEARCH(Rules!A$2:A$100, $B2)), 0)),
"Uncategorised")SEARCH is case-insensitive and matches anywhere in the description, which suits bank descriptions where the merchant name is buried among reference numbers and locations.
For the month column, normalise every date to the first of its month so grouping is stable:
=EOMONTH($A2, -1) + 1Review only what did not match
The discipline that makes this quick: never scroll the whole sheet. Filter Category to Uncategorised and work only through those.
- Filter to Uncategorised and sort by amount, largest first.
- For each merchant you see, add one rule rather than editing the row.
- Refresh and repeat. The list shrinks quickly, because the largest rows are usually the most repetitive.
- Stop when what remains is small and genuinely one-off. Leaving a residual Uncategorised bucket is fine and honest.
A useful check on your rules: the sum of all categories must equal the sum of the debit and credit columns. If it does not, a row is matching two rules or none.
Summarising by month and category
With Category and Month populated, a pivot table does the rest: Month as columns, Category as rows, sum of Debit as values. That single table answers most of what people convert statements for.
- Spot the trend, not the month. One expensive month means little; a category rising for four months means something.
- Separate committed from discretionary spending. Rent, loans and insurance behave differently from restaurants and shopping.
- Watch subscriptions specifically. They are individually small, easy to forget and the easiest thing to cancel.
- Keep income out of the spending totals, or it will flatter every month it lands in.
If several months are involved, merge the statements into one export first so the pivot covers a continuous period.
Pitfalls
- Transfers between your own accounts are not spending. Give them their own category and exclude it from totals, or you will double-count.
- Refunds appear as credits against a spending category. Netting them off gives a truer figure than counting them as income.
- A card payment from a current account is not spending either — the spending already happened on the card statement.
- Annual payments distort a monthly view. Consider spreading them across twelve months for comparison.
- Descriptions change. Banks reformat merchant strings occasionally, so a rule that worked last year may quietly stop matching; the Uncategorised filter is what catches that.
Frequently asked questions
Should I use accounting software instead?
If you are running a business, yes — it handles VAT, invoices and reconciliation. A spreadsheet is well suited to personal budgeting, to a one-off analysis, and to any question the software's fixed categories do not answer.
Can the converter categorise transactions for me?
No, and deliberately so. It extracts exactly what the statement says and shows how the figures reconcile; assigning meaning to a merchant is a judgement that depends on your circumstances.
Why does my formula return the wrong category?
Almost always rule order: the first match wins, so a broad keyword sitting above a specific one captures rows meant for the more specific rule. Move specific rules up.
How do I handle cash withdrawals?
Give them their own category rather than guessing. A statement cannot tell you what cash was spent on, and inventing a split makes the whole analysis less trustworthy.
Other bank statement converters
About the author
The Banking Converter editorial team is the engineering group that builds and tests the conversion engine: the parsers for regional date and number formats, the reconciliation checks and the CSV, Excel, JSON, OFX and QBO exporters. Guides describe what the software does and what the formats require; they are not financial, legal or tax advice.