A practical guide to cleaning up a messy Xero file
Every bookkeeper knows the feeling of inheriting a Xero file that's been "self-managed" for a couple of years. The bank reconciles, more or less, but the Profit and Loss doesn't pass the sniff test: suppliers scattered across half a dozen expense accounts, GST codes applied by vibe, tracking categories used on some invoices and not others.
This guide is a practical, do-it-by-hand cleanup method for the three areas that cause most of the trouble — transaction coding, tax codes and tracking categories — followed by a faster way to do the tedious part.
First, understand how the mess got there
Messy files aren't usually the product of one bad decision. They accumulate:
- Bank rules and suggestions repeat old mistakes. Once a supplier is coded wrong, Xero's suggestions and any bank rules keep proposing the same wrong account, and each "OK" click cements it.
- Multiple people, multiple mental maps. The owner codes to "General Expenses", the bookkeeper to "Office Expenses", the new hire to whatever's alphabetically first and roughly plausible.
- Overlapping or vague account names invite inconsistency. If two accounts could both be right, both will get used.
- Tax codes ride along with accounts. A transaction coded to the wrong account often carries that account's default tax rate, so a coding error quietly becomes a GST error too.
- Tracking categories are optional, so under deadline pressure they get skipped — leaving you with reports where "Unassigned" is your biggest division.
A surprising amount of miscoding also starts at data entry: if supplier invoices are still being keyed in by hand, every manual entry is another coding decision made in a hurry. Reducing manual entry reduces future cleanup — we also run a Xero invoice automation service for exactly that reason.
The manual cleanup, area by area
Work in this order: coding first, then tax, then tracking. Tax and tracking fixes are easier once transactions sit in the right accounts.
1. Transaction coding
Scan the Profit and Loss. Run it by month across the period you're cleaning. Look for accounts that spike without a business reason, accounts with oddly small totals (often a near-duplicate of another account), and accounts you don't recognise. Click through to the transactions behind anything suspicious.
Read each account. Run the Account Transactions report for each expense account in turn and ask of every line: does this supplier belong here? Sort by amount so the material items get your freshest attention.
Check suppliers for consistency. For each significant contact, review which accounts their transactions have been coded to. One supplier spread across four expense accounts is the classic symptom — occasionally legitimate, usually just inconsistent coding of the same kind of purchase. This is the highest-yield check and also the slowest, because you're doing peer comparison by eye.
Fix in bulk with Find & Recode. If you have advisor access, Accounting → Advanced → Find and recode lets you filter transactions (by contact, account, date, and more) and recode the lot in one operation — account, tax rate, contact or tracking. It's powerful and it writes immediately, so filter carefully and work in small, reviewable batches. Without advisor access, you're editing transactions individually.
2. Tax codes
Coding errors and tax errors travel together, so re-check tax after recoding.
- Review each account's default tax rate in the chart of accounts. A wrong default manufactures errors at scale.
- Run the Account Transactions report per account and scan the tax rate column for lines that differ from the account's norm. GST on a transaction where its account-mates have GST Free (or vice versa) deserves a look.
- Common genuine traps in Australian files: bank fees and interest (input-taxed/GST-free territory), insurance (the stamp duty component), overseas software subscriptions (often no GST to claim), and government charges.
- If GST periods have already been lodged, don't quietly rewrite history — note the corrections and handle them the proper way with the client's accountant or as adjustments in the current period.
3. Tracking categories
- Decide what the categories are for before fixing them. If nobody uses the divisional report, the kindest cleanup is deleting the category, not backfilling it.
- For categories that matter, run the P&L by tracking category and look at the unassigned column — that's your to-do list.
- Find & Recode can set tracking on transactions in bulk, which turns an afternoon of clicking into minutes.
- Then make the fix stick: update any bank rules and repeating invoices to include the right tracking option, or the unassigned column starts refilling next week.
4. Account types (worth a pass while you're in there)
Check that accounts are the right type — an expense account created as an asset (or a current liability set up as equity) quietly distorts both the P&L and the balance sheet, and it's a two-minute fix in the chart of accounts once spotted.
The faster way: make the outliers stand out
Look back at the highest-yield manual check: comparing each transaction with its peers and flagging the ones that disagree. That's a statistical job, and it's what we built Ledger Optics to do.
Ledger Optics is a free data-cleanup app for Xero (the app itself runs at app.ledgeroptics.com). It connects read-only via OAuth and draws your ledger as an interactive cluster view — a force-graph in which records that statistically disagree with their peers visibly stand apart. It covers four repair areas for Xero files: transaction coding (the flagship — purchases coded differently from their contact/amount peers), tax coding, tracking categories and account types — the same four areas this guide just walked through by hand.
Everything it finds lands in a "Needs fixing" list with a proposed correction. You review each change in a confirm-before-write dialog, and only the changes you tick are written back to Xero. Nothing changes without your explicit approval — a deliberate contrast with bulk recoding, where the write happens as soon as you click.
The honest fine print:
- Detection is statistical peer comparison — an anomaly engine, not generative AI. Data is read on demand, held in memory only, and never stored or shared; nothing leaves for AI processing.
- It works best on files with at least 50 transactions; a sparse file has too few peers to compare.
- It proposes, you decide. "Is this repairs or capital?" is still your call — the tool's job is making sure the questionable lines are in front of you instead of buried in page 14 of a report.
It's currently free, and a clean result is worth having too: "the engine found nothing" is a nice sentence to put in a handover note.
A workable routine
For an inherited file: manual pass once, properly, in the order above — then a quick outlier check monthly or quarterly so the mess never rebuilds. Whether the recurring check is a report habit or a tool, the principle is the same: coding errors are cheap to fix this month and expensive to fix at year-end.
Ledger Optics is built by QADAN ANALYSIS CONSULTING PTY LTD (NSW, Australia). Questions: info@qadan.com.au.