For bookkeepers & sole traders
Categorise a Bank Statement Before It Goes Into Xero
Upload a PDF statement, get back a CSV where most transactions already have a category attached. Fewer rows to manually code once it's in Xero.
Supports PDF files up to 10MB
The gap this fills
A live bank feed is the right tool when it's set up from the start of a financial year and the account stays open. That's not most of the messy cases bookkeepers actually deal with. You take on a new client partway through the year and need the first eight months backfilled. A sole trader hands over a folder of PDFs because they never connected a feed. An account gets closed and the historical statements are the only record left. In every one of those, you're looking at a stack of PDF statements and a spreadsheet, not a feed.
Xero can still import a CSV manually through Accounting → Bank Accounts → the account → Statements → Import a Statement, but a plain export just gives you date, description, and amount. Every row still needs to be manually coded to an account before it's useful for tax time or reporting. On a full year of business transactions that's not a five minute job.
Where this sits in the Xero workflow
This doesn't touch Xero directly and doesn't claim to be a bank feed replacement. It's a step before Xero: convert the PDF, get a CSV with a Category column already filled in for most transactions, then import that into Xero the normal way. You're still doing the import and the reconciliation in Xero itself. What changes is that most rows already have a sensible category sitting next to them, so coding becomes a spot-check instead of a read-every-line exercise.
Xero's own bank rules do something similar once they exist, matching a merchant name to an account code automatically. The catch is you have to build each rule manually, which means coding that merchant by hand the first time. On a batch of historical statements you've never processed before, none of those rules exist yet. This gives you a starting category on the first pass, before any rule has been written.
Deliberately not AI
Categories are assigned with a fixed list of keyword and regex rules, checked in a specific order so a specific merchant name (say, a known cafe chain) wins over a generic word (like "casino" or "cafe") that might also technically match. It runs as a plain function in the same request that parses your PDF. Nothing is sent to a language model, and nothing about your transactions is stored afterwards. For financial data specifically, that's a meaningfully different privacy position than pasting a statement into a chat window.
What it actually gets right
Coverage varies by bank and account type, from around 78% up to 100% of transactions matched on the statements tested during development. Savings accounts and internal transfers categorise almost perfectly, since interest and transfers are predictable, unambiguous patterns. Everyday spending accounts and credit cards sit lower, because a chunk of any real statement is one-off business names a rule-based system has never seen before and can't reliably guess.
Anything that doesn't match a rule is labelled Uncategorised rather than assigned a wrong guess. That's a deliberate trade-off: a category you can trust on most rows and an honest gap on the rest, rather than a confident-looking category on every row that's sometimes silently wrong.
What Our Customers Say
“Banks like Westpac only let you download CSV files for the past 18–24 months. If you need older data, you're stuck downloading PDFs and manually extracting transactions from pages of formatting and bank jargon. That job is a real slog. Your product handled it instantly and gave me clean data.”
Mark
Manufacturing, former HR/Finance Systems Consultant
“As someone preparing tax returns, going through PDF bank statements manually is a real hassle. This tool dumps everything into Excel format instantly. Huge time-saver.”
David
Director, Tax & Accounting Firm
“Great tool for dealing with PDF statements from clients. The data comes out clean and ready to import, which saves a lot of repetitive work. I had one client with statements going back several years, and this handled them all without a hitch. Highly recommend for accountants and bookkeepers.”
Tamara
Bookkeeper, Self-Employed
“Converted several years of bank statements in minutes and saved me a lot of effort. I initially wasn’t sure if it would handle my older statement formats, but once I tried it, it worked well. Would recommend if you’re dealing with PDFs.”
James
Owner, Construction Company
Questions
Does this replace Xero's bank feed?
No, and it's not trying to. A live bank feed is still the better option going forward if your bank supports one. This is for the gap: statements from an account you didn't feed into Xero from day one, a closed account, a business you just took over the books for, or a stretch of months you need backfilled without redoing a live connection.
Will Xero auto-categorise if I just upload a plain CSV instead?
Xero's own bank rules can auto-categorise once you've built them, but you build them by manually coding transactions the first time each merchant appears, then saving a rule. On a statement you've never seen before, that's still hours of manual coding before the rules exist. This gets you a first-pass category on every row before any of that starts, so you're correcting a handful of rows instead of coding all of them.
Is my data used to train an AI model?
No. There's no AI in this at all, in either direction. Categories come from a fixed list of keyword and pattern rules, the same rules run on every statement. Nothing about your transactions is stored, logged, or used to improve anything after your CSV downloads.
Which banks does this work with?
CommBank, ANZ, Westpac, NAB, ING, UBank, Amex, and Up. Personal and business account statements from each of these convert through the same tool.
By bank