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

Categorise Bank Statements for Xero from a PDF Export