Back to blog
12 June 2026 · 7 min read

How to Reconcile Xero Using AI (And Where It Breaks)

A practical guide to reconciling Xero with AI in 2026 — the API, MCP, split transactions, and the wall every DIY attempt eventually hits.

Xero Reconciliation AI

If you have searched “how do I reconcile Xero using AI,” you have probably found the same three posts we have: a listicle of “top AI accounting tools,” a vendor page that never quite explains the mechanics, and a forum thread that trails off after someone says “you’ll need the API.” None of them answer the actual question.

This post does. It walks through exactly how you would point an AI at your Xero and have it reconcile — the connectors you’d use, what each one can and can’t do, the import trick that makes it work, and the split-transaction problem that catches everyone. It’s an honest guide. By the end you’ll be able to do it. You’ll also understand why almost nobody should.

What “Reconcile With AI” Actually Means

Most people who ask this question are picturing categorisation: the AI reads a transaction, works out what it was, and tags it to the right account. That part is genuinely easy now. Any capable model can look at “STRIPE PAYMENT ST789” and tell you it’s revenue.

Reconciliation is a different and much larger job. To reconcile a bank line in Xero you have to do three things, in order: match the line to the right invoice, bill, or existing transaction; post any difference correctly as double-entry (a fee, a part-payment, a bank charge); and tell Xero it’s done so the line clears the Reconcile tab and the invoice closes.

The first is reasoning. The second is bookkeeping judgement. The third is a write back into Xero that has to actually stick.

The hard case — the one that exposes every shortcut — is the split transaction: a single bank line that has to become several postings. A £4,200 deposit that settles two invoices in full, part-pays a third, and leaves £300 sitting as a prepayment. Xero’s feed shows one number and offers to match it to one invoice. Reality is four postings to four places. An AI that can categorise a line has done roughly 10% of the work the moment a split appears.

The Connectors: API, MCP, and the Bank Feed

To get an AI near your Xero at all, you go through one of three doors. It helps to know what each is before you pick.

The bank feed

The bank feed is the automatic import you already have. Xero pulls your statement lines in overnight and queues them, one at a time, in the Reconcile tab for you to match and click. It’s a conveyor belt built for a human’s eyes. Nothing about it is designed for a machine to drive — there’s no programmatic way to read the queue or click the match.

The Xero API

The Xero API is the developer door — a standard web interface Xero exposes so software can read and write your accounting data. It’s real and powerful: you can pull invoices, contacts, and the chart of accounts, and you can create payments, bank transactions, and manual journals. But it has a hard edge that surprises everyone, and it’s the single most important fact in this post: Xero’s Accounting API cannot reconcile bank statement lines, and Xero has said it never will. Unreconciled statement data is treated as raw banking data, and reconciling is something Xero deliberately keeps inside Xero. (There’s a separate, approval-gated BankFeeds API for pushing statement data in, but it’s not a casual DIY route — it needs a security review.) On top of that you’re capped at 60 calls a minute and 5,000 a day per organisation, five at a time.

The AI connector (MCP)

This newest door, MCP (Model Context Protocol), is best pictured as a standard plug, like USB for AI, that lets an assistant such as Claude talk to an outside system through a defined set of actions. The official Xero MCP server gives the AI around forty actions: list invoices, create a contact, show unreconciled transactions, run a P&L. It’s the cleanest way to let an AI read your books and draft entries. But it sits on the same Accounting API underneath — so it inherits the same wall. It can show you an unreconciled transaction. It cannot match it, split it, and mark it reconciled.

So all three doors lead to the same room, and none of them lets a machine finish the reconcile. That’s not a gap a clever prompt closes. It’s the architecture.

The Method That Actually Works

Here’s the part the listicles never reach: you stop trying to make the AI drive the bank feed, and you import the transactions instead.

The feed is a line-at-a-time funnel — exactly the wrong shape for a model, which reasons best when it can see everything at once. So you pull the raw data out and put it where the AI can look at all of it together:

  1. Export the bank lines — a CSV from your bank, or a statement file — so you have the period’s transactions as data, not as a Xero queue.
  2. Pull the open items via the API or MCP — every awaiting-payment invoice, every open bill, the chart of accounts.
  3. Add the context that lives outside Xero — the Stripe payout report, the supplier statement, the email where someone agreed a deduction.
  4. Let the AI match across the whole set at once — this is where it earns its keep. Seeing all the invoices and all the lines together, it can spot that one £4,200 line covers three invoices, and propose the split.
  5. Create the postings via the API — the payment allocations, the fee journal, the prepayment — programmatically.
  6. Finish the reconcile inside Xero — because the API won’t, you (or someone) opens the Reconcile tab, where your freshly-created transactions now appear as suggested matches, and click to clear the lines.

That works. People run versions of it today. But look at what you’re now maintaining: an OAuth connection with tokens that expire, rate-limit handling so a busy month doesn’t 429 halfway through, idempotency so a retry doesn’t double-post a journal, a check on every match because a confident AI that mis-matches an invoice is worse than no AI, and a human still doing the final clicks. You haven’t bought a reconciled set of books. You’ve started a part-time engineering project that happens to output bookkeeping.

Worked Example

Customer name anonymised; the shape is real.

The scenario. Coral Dolphin Ltd, a UK consultancy on Xero, gets a £4,200 BACS receipt from a client. Behind it: invoice 1088 (£2,000, in full), invoice 1091 (£1,500, in full), invoice 1102 (£900, part-paid — the client held £200 back over a disputed line), and the client rounded down, leaving a £400 prepayment on account. One bank line. Four postings.

The Xero state before. The Reconcile tab shows a single £4,200 line. Xero, seeing no single invoice for £4,200, offers to “create” a transaction — the worst available option, because it would invent revenue and leave three real invoices open.

What the DIY AI setup does. Following the import method: it pulls Coral Dolphin’s open invoices, reads the client’s remittance email (which spells out the £200 hold and the £400 left on account), and proposes the split — 1088 paid, 1091 paid, 1102 part-paid £700 with £200 still outstanding, £400 to a prepayment account. It drafts the payment allocations and the prepayment journal, and creates them via the API.

Where it breaks. Everything up to here is genuinely impressive. Then you reach step six. The API cannot mark the bank line reconciled. So someone logs into Xero, opens the Reconcile tab, finds that the AI’s transactions now show as a suggested match against the £4,200 line, sanity-checks the £200 hold was handled the way the client meant, and clicks. The judgement was automated. The posting was automated. The reconcile — the actual clearing of the line — is back in a human’s hands, in Xero’s screen, every single time.

That last click sounds trivial. Multiply it by every line, every week, plus the babysitting of every match the AI made, plus the week the OAuth token silently expired and nothing posted at all.

Takeaway

  • Reconciling is not categorising. Tagging a transaction is easy; matching, posting the split, and clearing the line is the actual job, and it’s most of the work.
  • The Xero Accounting API cannot reconcile bank statement lines — by design, permanently. Every DIY route, including the official MCP, inherits that wall.
  • The trick that works is importing the transactions, not driving the feed — give the AI the whole dataset at once so it can see the splits, then post back via the API.
  • Split transactions are where it gets real. One bank line, several postings, judgement on each — this is exactly the bit a single confident match gets wrong.
  • A working DIY setup is a maintained engineering project, not an afternoon’s prompting: OAuth, rate limits, idempotency, match-checking, and a human still clicking the final reconcile.

None of this is impossible. It’s just not for the average human being — and it’s not really for the above-average one either, unless they want a second job maintaining it.

Get on the list

TheBookkeeper.ai is the version of all of the above where someone else has already built it, already handles the OAuth and the rate limits and the splits, and already watches it every day — so you get reconciled books, not a side project. Get on the waitlist if you’d rather have the output than the engineering.

Sources: Xero BankStatements API · Xero OAuth 2.0 API limits · Official Xero MCP server

Continue

Want this running on your Xero?

We're running a private beta for UK Xero users. Get on the list and we'll show you what reconciled-by-morning looks like on your books.