FlowParse
Categorize Transactions June 19, 2026 17 min read

Categorize bank transactions

Raw bank transactions are just a list of dates and amounts until you categorize them — and categories are what turn a statement into something you can actually use: a budget, a profit-and-loss, a tax return, a cash-flow view. A bank statement converter turns your PDFs into clean, editable rows, gives every transaction a starting category, and lets you total each one and export the categorized data to Excel, QuickBooks or Xero — without retyping a single line. Below: a practical transaction category list, working Excel formulas, and how automatic categorisation actually works.

FlowParse
flowparse.io
See it before you upload

A real sample: bank statement (uk style) — to a working spreadsheet

A fictional sample document converted by the same engine you get — flip through the source PDF and every export format, or download the files themselves.

sample.pdfFictional data
Bank statement (UK style) — source PDF preview page 1
.pdf .xlsx .csv .qbo .qfx .ofx .sta .xml .xml
All samples →

Why categorising is the step that makes data useful

A bank statement on its own answers almost no questions. It tells you money came in and went out, but not how much you spent on software, how much came from each client, or whether you're actually profitable. Categorising is the step that turns that flat list into answers: group every transaction under a meaningful label — income, advertising, travel, supplies, fees — and suddenly you can total each one, compare months, build a budget, and file a return. Without categories, a statement is just history; with them, it's a management report.

The blocker is that statements arrive as PDFs, and a PDF can't be sorted, filtered or tagged. The first move, then, is always to convert: a bank statement converter rebuilds every transaction as a clean, editable row with a date, description and signed amount, so you have something you can actually categorise.

FlowParse
flowparse.io

What categories you actually need

There's no single correct chart of categories — it depends on what you're trying to answer — but most people need a small, stable set rather than a sprawling one: an income side split by stream, and an expense side that mirrors the lines on your tax return or, for a personal budget, housing, groceries, transport, utilities and subscriptions.

The most important rule is consistency: use the same names every period so totals roll up and trends mean something. A transaction tagged "Software" one month and "Subscriptions" the next splits a real total into two meaningless halves. It also helps to keep a couple of housekeeping categories — Transfers (money moved between your own accounts) and Owner Drawings / Personal — so you can exclude non-income, non-expense movement cleanly.

Use caseTypical income categoriesTypical expense categories
Sole trader / freelancerClient income, platform payoutsSoftware, travel, supplies, fees, professional services
Small businessSales, service revenueAdvertising, payroll, rent, utilities, COGS
LandlordRent, other property incomeRepairs, agent fees, insurance, mortgage interest
Personal budgetSalary, side incomeHousing, groceries, transport, utilities, discretionary
All (housekeeping)—Transfers, owner drawings (exclude from P&L)
FlowParse
flowparse.io

A practical transaction category list

If you're starting from nothing, the list below is a sensible default for a small business. Each row pairs a transaction category with the group it usually rolls up to in a chart of accounts, and the kind of text you'll typically see in the bank description. Treat the group names as generic — your accountant, your accounting package and your country's tax forms will have their own exact account names and codes, and those are the ones to match in the end.

Notice that two rows are not income or expense at all. Transfers between your own accounts and owner drawings or contributions move money without making or costing any, so they sit outside the profit-and-loss; loan principal is the same, while the interest on it is an expense. Getting those few rows right does more for the accuracy of your totals than any amount of fine-grained expense splitting.

Transaction categoryTypical chart-of-accounts groupWhat it usually looks like on a statement
Sales / service incomeIncome (revenue)Customer payments, card-processor or marketplace payouts
Other incomeOther incomeInterest received, refunds from suppliers, grants
Cost of goods / materialsCost of salesSupplier and wholesaler payments, stock purchases
SubcontractorsCost of sales or operating expensePayments to freelancers and contractors
Payroll & salariesOperating expense (staff costs)Salary runs, payroll provider debits
Rent & premisesOperating expenseStanding orders to a landlord or letting agent
UtilitiesOperating expenseEnergy, water, phone and internet direct debits
Software & subscriptionsOperating expenseRecurring card charges from software vendors
Advertising & marketingOperating expenseAd-platform charges, printing, sponsorships
Travel & vehicleOperating expenseFuel, train and air fares, parking, hotels
Professional feesOperating expenseAccountant, lawyer, consultant invoices
InsuranceOperating expensePolicy premiums, often monthly direct debits
Bank & payment feesOperating expense (finance costs)Account fees, card-processing fees, FX charges
Tax paymentsLiability (not an expense line)Payments to the tax authority — VAT/sales tax, payroll tax
Loan repaymentsLiability (principal) + expense (interest)Fixed monthly debits to a lender
TransfersBalance sheet — between your own accountsMatching debit and credit across two accounts
Owner drawings / contributionsEquityTransfers to or from the owner's personal account
FlowParse
flowparse.io

How to categorise a year of transactions

1

Convert your statements

Run every account and card through the converter so each transaction becomes a clean, editable row. Scans work too via the scanned converter, and card statements via the credit card statement converter.

2

Consolidate the period

Use Smart Merge to bring a year (up to 100 statements) into one workbook so everything categorises in one place.

3

Tag transfers out first

Match internal transfers as pairs and mark them as Transfers so they don't distort income or expense totals.

4

Assign a category to each row

Work down the list, tagging by description. Group similar merchants so recurring charges all land in the same category.

5

Total and export

Total each category, review in the editable grid, then export categorised data to Excel, CSV, QBO or Xero.

Rules: categorise once, not every month

The fastest way to categorise is to stop doing it transaction by transaction and start thinking in rules. Most spending is repetitive — the same software vendor, the same supermarket, the same fuel station appear every month — so a rule like "anything from this merchant is Software" handles dozens of rows at once. Because converted data is structured and searchable, you can filter by a merchant or keyword and tag the whole group in one move, which is where the real time saving lives.

Rules also enforce the consistency that makes totals trustworthy. If a keyword always maps to the same category, you can't accidentally split one real total across two labels, and next month's import categorises almost itself. Keep a short, written list of your rules (merchant or keyword → category) so anyone doing the books applies them the same way. For the deeper method, see the guide on how to categorize bank transactions.

FlowParse
flowparse.io

How automatic transaction categorisation works in budgeting and accounting tools

Budgeting apps and accounting packages that categorise your bank transactions automatically mostly combine the same three ingredients. The first is the data source: a bank feed (a direct connection that pulls transactions in) or an imported statement file. The second is rules — conditions on the payee, the description text or the amount that assign a category when they match. The third is history: once you've categorised a merchant a certain way, the software proposes the same category the next time that merchant appears. None of it is magic; it's pattern-matching on the text the bank prints, which is why messy or truncated descriptions are where automatic categorisation goes wrong.

In QuickBooks Online, downloaded transactions wait for review, and QuickBooks suggests a category based on how you've categorised similar transactions in the past. Bank rules make it explicit: a rule can test the Description, the Bank text or the Amount, using Contains, Doesn't contain or Is exactly, with up to five conditions per rule, and it can set the category, payee, tax and other fields. Rules run in a priority order you can rearrange, and an auto-post rule adds matching transactions to your books without you reviewing them — which is convenient and also the reason to check those rules carefully. If you bring statements into QuickBooks as files, the QuickBooks bank statement import guide covers the import side.

In Xero, bank rules come in three types — spend money, receive money and transfer money — and when a statement line meets a rule's conditions, Xero suggests the matching transaction while you reconcile. You can choose whether any or all of a rule's conditions must match, and Xero applies rules in the order they appear on its Bank rules screen. Getting statement lines into Xero from a PDF is covered on the bank statement to Xero page.

MechanismWhat it readsWhere you see itWatch out for
Learned suggestionsYour past choices for similar transactionsQuickBooks Online suggested categories; many budgeting appsA wrong early choice gets repeated
Bank rulesDescription / bank text / amount conditionsQuickBooks Online bank rules; Xero bank rulesRule order — the first matching rule wins
Keyword lookupKeywords you list against the descriptionYour own spreadsheet (formulas below)Overlapping keywords, ambiguous merchants
Fixed category schemeMerchant and narration text against a closed listFlowParse's Category column on exportVery generic descriptions land in Other

What categorised data unlocks

Once transactions are categorised, the same workbook answers a surprising range of questions. Sum the expense categories and you have a profit-and-loss. Compare categories month over month and you have a budget-versus-actual. Filter income by source and you can see which clients or products actually pay the bills. And because the categories map to your tax return, year-end becomes a matter of reading totals rather than reconstructing a year. Group the same rows by timing instead and you have a cash-flow view; check them against the bank's own record with bank reconciliation and you know nothing is missing.

OutputHow categories make it possible
Profit & lossSum income categories minus expense categories
Budget vs actualCompare each category against its plan
Tax returnCategories map to return lines; read the totals
Cash-flow viewRe-group the same data by timing of in/out
Spend analysisRank expense categories to find waste
FlowParse
flowparse.io

What clean categorized transaction data looks like

Categorized transaction data is only useful if it's tidy enough for a formula, a PivotTable or an import to read without fixing it first. The test is simple: one row per transaction, one value per cell, the same columns in the same order every month, and exactly one category on every row. Amounts should be real numbers with a consistent sign (money out negative, money in positive — or separate Debit and Credit columns, but not both), and dates should be real dates rather than text, so sorting and date filters behave.

The columns below are the ones worth having. The first four are the minimum; the rest make the data far easier to audit and reuse. Keeping the original bank description alongside the category is what lets anyone check a total later — if a figure looks wrong, you filter the category and read the lines behind it, rather than trusting a number nobody can trace.

ColumnWhat it holdsWhy it matters
DateThe transaction (or posting) date as a real dateMonthly totals, period filters, cut-off at year-end
DescriptionThe bank's own text, uneditedWhat rules and lookups read; the audit trail
AmountOne signed number (or Debit + Credit)What every total sums
CategoryExactly one label from your listWhat every report groups by
BalanceRunning balance where the statement prints oneProves no row is missing or duplicated
AccountWhich bank account or card the row came fromLets you combine accounts and still split them
Notes / referenceInvoice number, reference, your commentExplains exceptions and supports matching
FlowParse
flowparse.io

How FlowParse categorizes your transactions

FlowParse gives every bank and credit-card transaction a category as part of extraction, so the converted file arrives with a Category column already filled in rather than blank. It uses one fixed list of seventeen categories — Income/Salary, Rent/Mortgage, Utilities, Insurance, Groceries, Transport, Subscriptions, Bank Fees, Loan/Debt, Tax, Transfers, Healthcare, Shopping, Dining, Investments/Crypto, Charity/Donations and Other — and the category is read from the transaction's own merchant, counterparty or narration text. If the statement prints its own type column (a "FEE" or "REFUND" marker, say), that is used as a strong signal. "Other" is reserved for lines whose description gives no usable clue. The list is deliberately short and closed, so the same merchant lands in the same category whichever bank or language the statement came from.

That fixed list is a starting point, not your chart of accounts. In the Excel export the Category column has an in-cell dropdown of the same seventeen labels, but you can type any category of your own over it, and a separate By Category sheet totals each category with its transaction count, total debit, total credit and net. Merge a year of statements with Smart Merge and the merged workbook gets its own By Category rollup across every statement. If you want your own scheme — "put these supplier payments under Cost of sales", say — you can ask AI Fix in plain language to re-categorise the document with your category names, which are then used as written.

Where the category travels depends on the format. Excel, CSV and Google Sheets exports carry it as its own column, and the PDF to CSV output does the same. QBO, QFX and OFX bank files have no category field, so FlowParse appends the category to each transaction's memo, where you can still read it after import. Xero's statement-import CSV has a fixed layout with no category column, so in Xero you categorise with its own bank rules — the Excel export remains the place to see every column at once. Every statement is balance-checked before export — opening balance plus transactions must equal the closing balance — and low-confidence fields and possible duplicates are flagged in the editable review, so the categories sit on a complete set of rows.

ExportWhere the category appears
Excel (.xlsx)Category column with dropdown + a By Category summary sheet
Smart Merge workbookCategory carried into the merged sheet + a merged By Category sheet
CSV / Google SheetsIts own Category column
QBO / QFX / OFXAppended to each transaction's memo (the format has no category field)
Xero statement CSVNot included — Xero's import layout is fixed; use Xero bank rules

Categorising for different kinds of business

The right categories depend on what you do. A service business — a consultant, designer or agency — leans on the expense side, with subcontractors as its main cost of sales and a long tail of software, travel and professional fees. A product or retail business needs a real cost-of-sales section — stock, materials, shipping, payment-processing fees — kept separate from operating expenses, because gross margin is the number that matters and you can't see it if supplier costs are lumped in with the rent. An e-commerce seller should also split platform payouts from the fees netted out of them, so revenue is shown gross. Large purchases deserve a second look too: equipment you'll use for years is usually an asset rather than an expense, which is what capital vs expense classification is about.

Whatever the shape, the discipline is the same: design the smallest scheme that lets you read your key numbers, and reuse it every period. If you're a sole trader or freelancer, Schedule C from bank statements shows a scheme tuned to self-employment, and for the tax angle see bank statements for a tax return.

FlowParse
flowparse.io

Categorising for personal budgeting

Categorising isn't only for businesses — it's the foundation of any personal budget. The difference is the scheme: instead of income streams and tax lines, you want the categories that describe where your money actually goes, typically housing, utilities, groceries, transport, insurance, subscriptions, eating out and discretionary spending, plus an income side for salary and any side earnings. Convert a few months of personal statements, tag them, and you can finally see the shape of your spending rather than guessing at it.

FlowParse
flowparse.io

How to categorize bank transactions in Excel, step by step

Most people categorise in a spreadsheet, and Excel is more than enough. Step 1 — get clean columns. Convert your statement to Excel so you have Date, Description and Amount as real dates and numbers. Format the data as an Excel table and type Transactions into its Table Name box. Tables matter because formulas written with structured references like Transactions[Amount] keep working as you add months, and a formula typed in one cell of a table column is copied down the whole column automatically.

Step 2 — build a rules table. On a second sheet, create a two-column table named Rules with the headers Keyword and Category, and list one keyword per row: a word or fragment that appears in the bank description ("rent", "electric", "payroll") and the category it should map to. Put specific keywords above general ones, because the formula below takes the first match from the top. Keep the table free of blank rows.

Step 3 — let a formula fill the Category column. Add a Category column to the Transactions table and enter the formula below. SEARCH looks for each keyword inside the row's description and is not case-sensitive; ISNUMBER turns the results into TRUE/FALSE; and XLOOKUP returns the category of the first keyword that matched, or "Uncategorised" when none did. XLOOKUP is available in Excel for Microsoft 365, Excel 2021 and Excel 2024 — not in Excel 2016 or 2019. Anything left as Uncategorised is your to-do list: either tag it by hand or add a keyword to Rules so next month catches it.

Step 4 — total by category. A PivotTable with Category in Rows and Amount in Values gives the total of every category at once; refresh it after you change any categories. If you prefer formulas, SUMIFS sums the Amount column where the category matches, and adding a date condition gives you a month-by-category grid you can chart or compare with last year. Step 5 — check the totals. The sum of all category totals should equal the sum of the Amount column; if it doesn't, a row is missing a category or a number is stored as text.

Keep the Rules table between months — it is your categorisation policy written down, and that consistency is what makes the totals comparable over time. For a fully worked method, the guide on how to categorize bank transactions walks through it with examples.

Excel formulas — keyword lookup and totals
Category column (inside the Transactions table):
=XLOOKUP(TRUE, ISNUMBER(SEARCH(Rules[Keyword], [@Description])), Rules[Category], "Uncategorised")

Total for one category (category name in F2):
=SUMIFS(Transactions[Amount], Transactions[Category], F2)

Total for one category in one month (first day of the month in G1):
=SUMIFS(Transactions[Amount], Transactions[Category], $F2,
        Transactions[Date], ">="&G$1, Transactions[Date], "<"&EDATE(G$1, 1))

Money out only (negative amounts) for one category:
=SUMIFS(Transactions[Amount], Transactions[Category], F2, Transactions[Amount], "<0")
FlowParse
flowparse.io

Reviewing and maintaining your categories

A category scheme drifts unless you review it now and then: merge near-duplicate labels and rename anything that crept in. Watch especially for an "Uncategorised" or "Misc" bucket growing large. A bit of miscellaneous is fine, but if it's a big number it means real information is hiding in it — split it out into proper categories so you can see what it actually is. The editable review grid makes re-tagging quick, and because nothing is locked until export, you can refine the scheme as you learn what questions you want it to answer.

FlowParse
flowparse.io

Categorising at scale, and for tax

Two situations raise the stakes on categorising. The first is volume — bookkeepers and accountants categorise transactions for dozens of clients every month, where consistency is everything. The answer is the same as for one set of books, applied systematically: convert every client's statements to the same structured format, apply a standard firm-wide category scheme, and lean heavily on merchant/keyword rules so recurring spend tags in groups rather than one row at a time. Standardising this is how firms categorise at volume without it eating the month — the accountant's converter is built around it.

The second is tax. If your categories map to the lines on your return — advertising, travel, supplies, professional fees and the rest — then year-end stops being a reconstruction and becomes a matter of reading totals. This is the single biggest payoff of consistent categorising for most small businesses, and it's why it's worth designing the scheme around your return from the start. See bank statements for a tax return and how to prepare bank statements for taxes for the tax-specific workflow.

FlowParse
flowparse.io

Categorize a year of transactions

Convert your statements, start from a filled Category column, total each category, and export categorized data to Excel, QuickBooks or Xero.

New · AI Fix

Fix it in plain English — no formulas

Describe a correction in plain language and FlowParse applies it to your file: add a column, split debit/credit, fix a category. Anything touching real numbers shows a preview before it changes.

See how AI Fix works
flowparse.iono sound needed
0:00 / 0:00

Frequently asked questions

Related