Skip to content

Can a third-party app post real bank feed lines into Xero?

StatementClear7 min read

Yes, through Xero's Bank Feeds API, but Xero does not hand that out with a developer account. An application has to be approved by Xero before it can open a feed connection against a bank account and post statement lines to it. Anything without that access can read your statement and give you a file back, and a file goes into Xero as an imported statement rather than as a feed.

What Xero counts as a bank feed

In Xero, a bank account receives statement lines in one of two ways, and the account itself records which. A feed is a standing connection that delivers lines on its own, either from a bank Xero has an agreement with or from an application posting through the Bank Feeds API. An import is a file somebody uploaded, covering one period, ending when the file ends. The lines look similar once they land, but the account does not behave the same way: a fed account keeps arriving, and an imported one waits for the next person with a spare hour and a CSV. That distinction is the whole reason this question gets asked, because a converter can produce lines that reconcile and still leave you doing the same job next month.

Why most statement tools give you a file instead

Because the file is the only route open to them. This is the part every confident wrong answer collapses, so it is worth separating carefully. Xero's general Accounting API can write into a bank account: an app holding the right scope can create spend money and receive money transactions, and plenty of good Xero apps do. What it cannot create is a bank statement line, which is the bank's own record of what happened and the thing a ledger entry gets matched against. Xero's documentation for that endpoint says it "does not allow access to any bank statements or direct bank feeds", and Xero's bank statements page goes further: reconciling statement lines through the Accounting API is not supported and Xero does not plan to add it. The request to allow statement line import has been open since October 2009. So a converter can put transactions in your bank account through the public API and still have delivered nothing that reconciles against anything.

Xero's own Hubdoc works this way for statement extraction: it reads the PDF and produces a CSV, and you import the CSV. Every PDF-to-CSV converter on the market is doing the same thing under different branding. None of it is a criticism of the tools, it is a description of the interface they are allowed to use.

What the Bank Feeds API actually does

It is a separate API from the one most Xero apps use, and it exists for the systems that supply bank data: banks, card issuers, payment platforms and the applications Xero has approved to post on their behalf. Xero's own overview page puts the gate plainly, calling it "a closed API that is only available to financial institutions that have an established financial services partnership with Xero", and adds that the integration has to be certified by Xero before it goes out to customers. Note the term Xero uses is financial institutions rather than banks, and Xero's own page on connecting a bank says feeds pull in transactions from a bank or a payment provider like Stripe or PayPal. So the common shorthand that a Xero feed can only come from a bank is wrong on Xero's own evidence, while the shorthand that a developer can simply request the scope is wrong too.

The mechanics matter more than the access, because they explain why a fed line is a different object from an imported one. An application creates a feed connection against a specific Xero bank account, identified by Xero's own account id rather than by an account number typed in by hand. Statements posted to that connection carry a start date, an end date, a start balance and an end balance alongside the lines. Xero will not accept the statement without those balances, so an application posting through this API has to know what the account balance was before and after every batch it sends. Balance verification is not a feature somebody chose to build on top; it is the price of admission.

What Xero's own import checks, and what it doesn't

Worth being precise about, because it decides whether the difference is worth paying for. Xero's importer does look for statement lines it already holds and will drop ones it recognises, and Xero publishes a report for finding and removing the duplicates that get through, which tells you plainly that some do. What it never does is check that the file you uploaded covered the whole period. It has no opinion on whether the closing balance agrees with the bank's. And it will happily accept an export that records spending as a positive number, which posts a month of payments as income and reconciles cleanly against nothing.

Those three are the errors that cost real time, because none of them announces itself. A truncated export looks like a quiet month. A sign convention read the wrong way round looks like a good one. You find both weeks later, from a balance that will not agree, and then you are reading a hundred lines against a PDF to work out which ones are wrong.

Where StatementClear fits

StatementClear is one of the applications with Bank Feeds API access, which is what lets it answer this question in the affirmative. You upload the statement you already export from the bank, card or platform, as PDF, CSV or Excel, and map its columns once per account. The lines are checked against what is already in the account, the running balance is agreed against the statement's own figures, and the signs are checked before anything is sent. Then they post through the Bank Feeds API into the Xero account you picked, and that account is fed from then on rather than imported into.

It does not ask for your bank login and never connects to a bank. It works from statements you already have, which is also why it can cover accounts no aggregator reaches and history from before any feed existed.

You already have the statement. Have it arrive as a feed, not a file.

StatementClear posts the statements you already export into Xero as live bank feed lines, deduped and balance-checked before anything reaches the ledger.

Frequently asked

No. It is a separate API from Xero's general Accounting API, intended for the institutions and applications that supply bank data, and access is granted per application after Xero assesses it. A standard Xero developer account does not include it, which is why almost every statement tool converts to a file instead.

The line reconciles the same way, but the account records how it arrived and behaves differently afterwards. A fed account keeps receiving lines from its connection. An imported one stops at the end of the file and waits for somebody to upload the next period.

Not through the manual import, which takes CSV, OFX, QBO, QFX and QIF. Xero's own answer for a PDF is to convert it first, and in the US and Canada it points at Hubdoc's statement extraction, which reads the PDF and gives you back a CSV you then upload yourself. The other route is an application that reads the PDF and posts the lines in through the Bank Feeds API, so no file changes hands at all.

It drops statement lines it recognises as ones it already holds, and it publishes a report for finding and removing the duplicates that get through. What it does not do is tell you the file was short, or that the closing balance disagrees with the bank's, which are the errors that actually cost time.

Not for this route. A feed posted through the Bank Feeds API is built from a statement you exported yourself, so nothing needs your banking credentials. That is the difference from an aggregator feed, which holds a connection to the bank on your behalf.

Read next