How to Categorise Transactions With AI and Check Its Work

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for How to Categorise Transactions With AI and Check Its Work.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for How to Categorise Transactions With AI and Check Its Work.

Hand the AI your own category list, each with a one-line definition and an example, send recurring payments to fixed bank rules, and let it suggest categories only for what's left. Then check every low- or medium-confidence line, plus 20 random high-confidence ones each month. If more than one of those 20 is wrong, check the whole month.

The checking matters more than the categorising. AI coding usually fails in patterns rather than randomly: one type of transaction, such as card-terminal payouts or transfers between your own accounts, gets coded wrongly every time it appears. A small monthly sample catches that pattern within weeks. Skip the check, and the same error sits in every month's figures until year end.

Follow me on Instagram@sagnikteaches

Write the category guide before the AI touches anything

An AI given only a bank statement will invent sensible-sounding categories that don't match your chart of accounts (the list of income and expense headings your accountant uses). Give it the exact list, and for each heading a definition, two typical descriptions from your bank feed, and anything that looks similar but belongs elsewhere.

Connect on LinkedInSagnik Bhattacharya

A filled-in extract for an illustrative six-room guest house:

Subscribe on YouTube@codingliquids
CategoryIncludesTypical bank textNot this
Room incomeDirect bookings, booking-platform payouts"BKG PAYOUT", "STRIPE PAYOUT"Refundable deposits (Deposits held)
Card and platform feesProcessor and commission charges"STRIPE FEE", "COMMISSION"Bank account fees (Bank charges)
Breakfast suppliesFood for guests"CASH AND CARRY", butcher, bakeryHousehold shopping (Owner drawings)
LaundryCommercial laundry invoicesLaundry firm's nameBuying new linen (Linen and furnishings)
UtilitiesGas, electricity, waterSupplier names, "DD"Broadband (Telephone and internet)
TransfersMoves between own accounts"TFR TO SAVINGS"Anything paid to someone else

Writing the "not this" column forces you to spell out the confusions an AI will make. It takes about an hour for a typical small business with 30 to 40 categories, and it's worth asking your accountant or bookkeeper to glance at it, because they'll know which headings your year-end accounts depend on.

Split the work: bank rules first, AI for the remainder

Most bank feeds are dominated by the same payees every month: rent, utilities, payroll, software subscriptions, the laundry. These don't need AI. A bank rule (a fixed instruction such as "anything containing LAUNDRY goes to Laundry") is predictable, free and never changes its mind. Both Xero and QuickBooks Online let you create bank rules from the bank feed.

The guest house's September feed had 214 transactions. Rules covered 118 of them (55%). That left 96 for AI suggestions, which is where the time saving and the risk both sit. As a rough guide, if rules cover less than half your feed, spend another hour writing rules before relying on AI for the rest.

There are three places the AI suggestions can come from:

  • Your accounting software's own suggestions. QuickBooks Online suggests a category for each downloaded transaction based on how you've categorised similar ones; you can turn suggested categorisation off in bank transaction settings, though Intuit says its wider AI features can't currently be switched off one by one. Xero's automatic bank reconciliation by JAX, still labelled beta in Xero's own updates, reconciles lines on its own and labels each one Rule, Match, Memory (based on your past coding) or Prediction (based on similar transactions across Xero users). It can be switched on or off per bank account, and there's a Reconciled page listing everything it did.
  • A chat assistant working on a CSV export. Useful for a backlog, a year of unreconciled lines, or software without AI coding.
  • A bookkeeping add-on connected to your software. Check that it shows a reason and confidence for each line; if it doesn't, you can't run the checks below efficiently.

Whichever you use, the checking routine is the same. For Xero specifically, using Xero's JAX for invoices and cash-flow questions covers the rest of what the assistant does.

Prompt for a CSV backlog, and what came back

For a chat assistant, export the uncategorised lines as CSV, delete account numbers and card numbers, and keep only date, description, amount and a row ID. Then:

You are categorising bank transactions for a [type of business].
Use ONLY these categories: [paste the category guide, including the "Not this" column].
For each row, return: Row ID | Category | Confidence (high/medium/low) | Reason (under 12 words)
Rules:
- If a transaction could belong to two categories, choose low confidence and say which two.
- Money moving between our own accounts is always Transfers.
- Never guess at splitting a transaction; flag it as SPLIT? with low confidence.
- Do not total anything.
Transactions:
[paste CSV rows]

Six lines from the guest house's output (illustrative):

DescriptionAmountAI categoryConfidenceReason given
STRIPE PAYOUT 0914+1,843.20Room incomeHighCard processor payout for bookings
CASH AND CARRY 221-312.46Breakfast suppliesHighWholesale food supplier
TFR FROM J SAVER+2,000.00Room incomeMediumIncoming payment, possibly booking
BKG REFUND 88231-180.00Card and platform feesMediumPayment to booking platform
HOMEWARE STORE-146.99Linen and furnishingsLowCould be linen or household (SPLIT?)
WASTE SERVICES-64.00UtilitiesHighWaste collection service

What needed fixing: the $2,000 was the owner moving money from a personal savings account, so it's a transfer or owner's capital, not income. Coding it as Room income would have added $2,000 of takings that never happened. The $180 was a refund to a guest, which reduces Room income rather than counting as a fee. The homeware receipt really was split, and the owner had to look at it. The card-processor payout is subtler and gets its own section below. Four of six needed a human look, which is normal for the first month; the point of the reason column is that each one took seconds to judge.

The monthly checking routine

This routine takes 15 to 25 minutes a month for a feed of about 200 lines. Run it before you treat a month as closed.

  1. Check every medium- and low-confidence line. These are the AI telling you it isn't sure. In the guest house's September run, that was 25 lines.
  2. Check every line over your threshold, whatever its confidence. Pick a figure that matters for your size; the guest house uses $500. One miscoded large item distorts a month more than twenty small ones.
  3. Sample 20 high-confidence lines at random. In a spreadsheet, add a column with =RAND(), sort by it, and take the top 20. Mark each one right or wrong.
  4. Apply the rule: more than 1 wrong in 20 means check them all. One wrong in 20 is a 5% error rate on the lines the AI was sure of; two or more suggests a pattern.
  5. Compare category totals with last month and the same month last year. A category that moves by more than about 30% with no obvious reason usually hides a misclassification.
  6. Make sure the categorised lines add up to the bank's movement for the month. If they don't, a line has been dropped, duplicated or excluded by mistake.

Here's how that played out. In September the random sample of 20 high-confidence lines found 3 wrong, so the owner checked all 71 high-confidence lines and found 9 errors in total. Seven were the same pattern: card-processor payouts coded as income at the net amount. One bank rule and one line added to the category guide fixed it. In October the sample found none wrong, and in November one, so the routine stayed at 20 lines a month.

Net payouts: the error that looks right every time

Card processors and booking platforms don't pay you what the guest paid. They pay you that figure minus their fee or commission. So a payout of $1,843.20 might represent $1,881.60 of room sales and $38.40 of fees. Code the payout as $1,843.20 of income and your income is understated, your fees are invisible, and neither error shows up anywhere obvious.

The AI's reason ("card processor payout for bookings") was true, and its confidence was high, which is exactly why a sample catches this and a confidence filter doesn't. The right treatment depends on how your bookkeeping records sales: some businesses raise an invoice per booking and match the payout against it, others record gross sales and fees from the processor's monthly statement. That choice is one to agree with your bookkeeper or accountant. Once it's agreed, write it into the category guide so the AI and your bank rules follow it.

Four businesses, four traps the AI can't see

Every sector has a transaction type that looks like one thing in the bank feed and is really another. The AI only sees the description and the amount, so these need a rule, a note in the category guide, or a human. The figures in the four examples below are illustrative.

A holiday-let manager holding owners' money. A guest pays $1,450 for a week. Of that, $1,050 is rent that belongs to the cottage owner, $250 is a refundable damage deposit, $95 is the cleaning fee and $55 is the booking fee. The manager's own income is the booking fee, the cleaning fee and its commission on the rent (at 20%, $210), so $360 in all. An AI that codes the whole $1,450 as income overstates the manager's income four times over. Money held for others needs its own treatment, often in a separate client account; ask your accountant how yours should be set up before any AI goes near it.

A church office with restricted gifts. A $500 transfer with the reference "ROOF APPEAL" is a gift for a specific purpose, and many charities must track those gifts separately from general funds. The AI coded it as General donations because the amount and payer looked like every other donation. The fix was a line in the guide: "Reference contains APPEAL, FUND or a project name: Restricted donations, low confidence, flag for the treasurer."

A members' club taking function deposits. A $600 deposit in March for a September wedding reception isn't September's income yet, and it may be refundable. The AI coded it as Function income on the day it arrived. The club now codes all deposits to a Deposits held account and moves them to income after the event, which the treasurer does at month end from the events diary.

A campsite paying for everything on one card. A single supermarket transaction of $146 might be $90 of shop stock, $40 of cleaning materials and $16 of the owner's own groceries. No AI can split that from the bank line. The practical answer is a receipt-capture app or a rule that sends every supermarket line to a "To split" category for the owner to deal with weekly; the setup in AI receipt capture and bank categorisation shows how bookkeepers handle it.

Clearing a year's backlog without checking every line

A backlog changes the arithmetic. Take a members' club, invented for this example, that had let its bank feed pile up for a year: about 2,600 uncoded lines. Checking every one by hand would take a volunteer treasurer several evenings; checking none would mean trusting a year of AI guesses.

The workable approach is to code in monthly batches, not all at once. Pasting 2,600 rows into one chat invites dropped rows and drifting categories, while a month of roughly 220 lines fits comfortably in a single prompt. Run the same six-step check on the first two months before coding the rest, because that's where the category guide gets its corrections. After the guide stopped changing, the club's treasurer checked only the low- and medium-confidence lines, the lines over $500 and a 20-line sample per month.

The arithmetic: 12 months at about 45 checked lines each is 540 checks. At around 20 seconds a line, that's three hours of checking instead of the fourteen or so it would take to review all 2,600. Before importing anything, count the rows in each batch's output against the rows you sent. An AI that silently skips three lines in a batch leaves a gap the bank reconciliation will show later, but it's far quicker to spot at the batch stage.

Turn every correction into something permanent

Correcting the same error every month wastes the time the AI was meant to save. Each correction should end in one of three places:

  • A bank rule, if the transaction always goes to the same category. The guest house turned its processor payouts, laundry and waste collection into rules within two months, which took rule coverage from 55% to 64%.
  • A line in the category guide, if it needs judgement the AI can follow ("Refunds to guests reduce Room income; they are not fees").
  • A manual queue, if no rule or instruction can decide it. Split purchases, owner transfers and anything involving money held for others belong here.

In software that learns from your coding, such as Xero's Memory method or QuickBooks' suggestions, corrections also teach the system. That's useful, but it cuts both ways: if you accept a wrong suggestion, it learns that too. Don't click through a list of suggestions just to clear it.

Signs the coding is holding up, month by month

Keep a small log with one row per month: lines in the feed, percentage covered by rules, lines checked, errors found in the sample, and errors found overall. For the guest house, four months looked like this:

MonthLinesRulesSample errors (of 20)Action
September21455%3Checked all; new payout rule
October23161%0None
November16863%1Guide note on refunds
December14964%0None

Three signs the coding is drifting: sample errors creeping up for two months in a row, a new supplier or payment method appearing (which the AI has never seen), or your accountant finding reclassifications at year end that your monthly checks missed. The last one is the most telling. If the year-end adjustments are in categories your sample never flagged, your sample is too small or your threshold too high. Tell your accountant what AI is doing in your books, too; automating bank reconciliation and checking the matches covers the reconciliation side they'll ask about.

What to keep manual regardless of accuracy

Even with a clean record, some lines stay with a person because the cost of a wrong answer is out of proportion to the time saved:

  • Anything involving money that belongs to someone else: client funds, deposits, restricted gifts.
  • Loan repayments, which often mix capital and interest in one payment.
  • Large purchases that might be equipment rather than an expense; your accountant decides the treatment.
  • Owner drawings and money the owner puts in.
  • The first two or three months of any new income stream, supplier or payment method.

If you're weighing whether a package's built-in AI or a bookkeeper would handle this better for your volume, AI bookkeeping software vs a human bookkeeper compares accuracy and cost. For most small businesses, the answer is both: AI and rules for the routine lines, and a person for the handful that carry the risk.

Questions about checking AI categorisation

Is it safe to upload a bank statement CSV to ChatGPT or Claude?

Use a business plan that doesn't train on your content by default, or switch off the model-training setting on a personal plan. Delete account numbers and card numbers from the CSV first; the AI needs only date, description and amount. If your accountant's engagement terms restrict where client data goes, follow those.

How accurate is AI categorisation?

It depends almost entirely on how settled your transactions are. A business with the same suppliers every month can see very few corrections after the first quarter; one with lots of one-off purchases will see more. Measure your own rate with the monthly 20-line sample rather than trusting any vendor's headline figure.

Should I let the software post categorised transactions automatically?

Only for transaction types that have scored zero errors in your sample for two or three months running, and only where the software shows you what it posted and lets you correct it. Keep anything over your review threshold, and anything involving money that isn't yours, as manual.

Does my accountant still need to check the books?

Yes, for anything with tax consequences: capital purchases, loan repayments, owner drawings, and year-end adjustments. AI coding makes their review faster because the routine lines are already tidy, but it doesn't replace their judgement on treatment.

Further reads

Sources: Xero product update posts and Xero Central help on automatic bank reconciliation by JAX; QuickBooks Online help article on categorising and matching bank transactions.

Want your bank coding checked and tidied properly?

On a 1:1 call we'll look at how your transactions are coded now, decide what bank rules and AI suggestions should handle, and set up a checking routine you'll actually keep.

Book a 1:1 call with me