Reconcile via the API
Be able to reconcile bank statement lines via the API.
Thank you for the continued feedback and for your patience on this long‑running request. We know that programmatic bank reconciliation and AI‑driven workflows are increasingly important to many of you, and we understand the frustration that this capability is not available via the Xero API.
After reviewing this again with our legal, risk and banking teams, we have confirmed that we will not be adding the ability to reconcile bank statement lines via the API or to expose unreconciled bank statement data via the public API.
There are a few key reasons for this decision:
- Regulatory and contractual obligations on raw bank data. Unreconciled bank statement lines are “raw” banking data – unmodified information that comes directly from banks. In markets such as Australia, this data is treated as banking data under consumer data rights regimes. Sharing it on to third parties (including via an open API) would require us to treat every consuming app as if it were a regulated data recipient, with substantial security, accreditation and liability obligations that sit on Xero as an intermediary as well as on those third parties. We have taken a policy decision not to operate as an intermediary for redistributing raw bank statement data.This ensures that the highest standards of banking security are maintained directly between the customer and their financial institution.
- Our data‑sharing boundary: unreconciled vs reconciled data. We draw a clear line between:
- Unreconciled statement data, which is banking data supplied to us by banks and subject to the obligations above; and
- Reconciled transaction data, which has been improved within Xero (for example, matched to contacts, invoices or accounts) and for which Xero is the custodian on behalf of the customer.
- We can expose certain reconciled/derived data through specific endpoints such as the Finance API’s Bank Statements Plus in limited, finance‑focused scenarios, but those endpoints are not designed or licensed for broad, high‑volume access to raw bank feeds or for third‑party replication of Xero’s bank reconciliation engine.
- Why “reconcile via the API” falls on the wrong side of that line. Supporting full reconciliation via the API would, in practice, require programmatic access to unreconciled statement lines and a way to push reconciliation decisions back into Xero. That would effectively recreate bank reconciliation workflows outside Xero while still relying on Xero to redistribute raw bank data, which is exactly the pattern our regulatory, security and contractual constraints are designed to avoid. For these reasons, this is not something we can safely or responsibly offer as an open API capability.
We recognise that a small number of existing partner applications continue to receive limited access to certain statement data under legacy, contract-specific arrangements that pre‑date this policy. These specific arrangements are strictly managed under heightened security and compliance terms. To ensure we meet our current regulatory and risk standards, we are not extending these legacy permissions to new partners or applying them to any new use cases.
We also hear the concern that “this is customer data and customers should be able to use it where they choose”. We agree that customers should have access to their own banking information, and open banking frameworks are designed to give customers direct access to that data from their bank or banking aggregator, without Xero sitting in the middle as a redistributor. For apps that need raw bank statements to power AI or other automation, the right pattern is to source that data directly from the bank or an accredited open‑banking provider, and then connect into Xero using the data structures we do expose.
Our strategy for bank reconciliation is to invest in automation inside Xero, where we can manage risk, performance and user experience end‑to‑end. That includes features such as bank rules, suggested matches, cash coding, and newer improvements like statement-period bank reconciliation, enhanced bank feeds, and our AI-powered automation features, rather than exposing the underlying feeds for external reconciliation logic.
We will continue to review our approach as regulation, banking connectivity and customer needs evolve, but we want to be clear and transparent that this specific request will remain declined under our current legal and risk framework. We genuinely appreciate the thought and passion that has gone into this thread, and we’ll keep focusing our efforts on making in‑product reconciliation as efficient and intelligent as we can, within those constraints.
-
James
commented
What they said.
-
Ian Bishop-Laggett
commented
Like many of the comments above, we have a front end that records invoices, payments and the allocation between the two. It is also possible to know to which statement line those payments belong. Credits cards appear on the bank statement as one line, but we know which payments make up that line and to be able to mark them as reconciled to that line would be great. It's a very manual task at the moment.
-
Anonymous
commented
Hi there - we're developing an app at the moment that will receive hundreds of transactions per day, and there's no way that we'd be able to manually reconcile all of them. We've only just come up against this limitation in Xero and it's real show stopper.
Please API reconciliation would really help!
-
Anonymous
commented
We currently import over a thousand lines from a paypal account a week. The largest account Xero has is 1000 reconciliation. So it seems to me that Xero is concerned about the number of transactions in their resources. With paypal I'd love to see the option of not importing every payment and fee - but rather every days total fee and received. The only problem with this is for money spent. I need all money spent imported. Doing this manually would make me very :-(
-
Craig Luke
commented
We use your suspense account suggestion, and it's an absolute pain to reconcile large numbers of transactions. Please, please add reconciling to your API and reduce the time we have to spend manually reconciling things!
-
Andrew Smith
commented
We have about 7,000 client invoices with matching bank lines (credit card and cheque account incoming amounts). This week Xero basically konked out, and we can no longer reconcile through the site. Support tells us that Xero is only designed for 500 transactions a month.
I'm not sure whether Reconciling via the API would work, but I can successfully retrieve invoices and bank transactions, so I can only assume that it would be possible.
It is a sad, sad day as we have to contemplate another accounting page that doesn't have Xero's limitations.
-
Josh Stuart
commented
+1.
At least allow an auto reconciliation flag for any matching rules. We have 1000's of micro transactions each week to our Paypal account and right now it's a pain to manually approve in the bank feeds.
-
nick
commented
+1
we are making payments with reference numbers, and the invoices that they apply too. it would greatly help us if we could reconcile the data via the api. -
Anonymous
commented
Yes please, full reconciliation is a killer otherwise as has been pointed out by other commentators here
-
Evan Williams
commented
+1 for us here at Tradevine. We would love to be able to a.) Reconcile large batch PayNow payments against individual invoices and b.) just generally reconcile payments that match up to invoices with matching amounts and purchase references.
-
Rod
commented
it will be great have this feature!
-
Scott Barber
commented
I would be very keen to allow reconciliation through the API. I can see the potential to allow more sophisticated "bank rules" or even to allow automatic bank rules being applied via an "add on" interface through the API.
I think there is potential to make the interface to coding bank statements a lot smarter to allow bank rules to be more robust and push more information through to the final journals. e.g. "Copy description", or to allow more generic rules to be created.
-
Liam
commented
I need to do something similar to what pocketrent does here https://pocketrent.com/features/for-owners-and-property-managers/automatic-rent-reconciliation/ .
Excuse my ignorance but I am not sure how they are able to do this when the normal reconciliation is not available via your api.
Does anyone know what they might be doing to get this done?
Thanks
Liam -
Anonymous
commented
We receive money via a direct debit clearing house and currently allocate this payment against hundreds of invoices. We plan to build a system to hand this allocation and reconciliation for us.
-
Tim Cull
commented
My use case is also a SaaS app. We'd have hundreds of transactions each month from a subscription payment provider (like Recurly) that we can create invoices for, but then have to reconcile by hand.
-
Grzegorz Jakacki
commented
We make a SaaS app and we have hundreds of transactions paid by PayPal every month. It is super easy to generate a Xero invoice (via API) for each transaction, and it is super hard to reconcile all all these invoices with the lines in the PayPal statement. We know exactly how to match statement lines with invoices (we put PayPal transaction IDs as reference on an invoice), yet there is no way to automate it with Xero. All we need is a way to tell Xero to reconcile particular bank account statement line with the given invoice.
-
Grzegorz Jakacki
commented
We provide SaaS app and we have hundreds of transactions paid by PayPal every month. It is super easy to generate an invoice for each transaction, and it is super hard to reconcile all these invoices with the lines in PayPal statement. We know exactly how to match statement lines with invoice (invoice has the PayPal transaction ID as reference), yet there is no way to automate it with Xero. All we need is (1) a way to to retrieve a list of Bank Account transactions, (2) a way to tell Xero to reconcile bank account transaction with the invoice.
-
David Collen
commented
I import my invoices and bank transactions directly from my Web Store. I'd like to be able to reconcile these automatically against my bank feeds, eg from Paypal using the transaction ID
Please consider implementing this functionality via the API, it really would be useful.
-
Brian
commented
This sort of feature is becoming critical for us. We have a large number of invoices that are paid each day into our bank account via a batch payment. Currently this means manually finding each invoice and matching it with the bank statement. This is a major pain and waste of time and is only going to get worse as our business grows.
Please consider adding API support to allow us to feed in a list of invoice numbers in a batch and match that automatically with the bank statement.
-
Alok Garg
commented
Yes.. We want this feature.. It would be a very good feature.
Please add it as soon as possible.