Can a third-party app post real bank feed lines into Xero?
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.
- About bank feedsXero on what a feed is and where feeds come from.
- View bank statements and bank statement linesWhere Xero records how each line arrived.
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.
- Accounting API: bank statementsThe general API's bank statement coverage, and what it does not offer.
- Extract bank statement data in HubdocXero's own extraction tool, and the CSV it produces.
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.
- Bank Feeds API overviewWho the API is for and how access is granted.
- Bank Feeds API: feed connectionsHow a connection binds to one Xero bank account.
- Bank Feeds API: statementsThe start and end balances every posted statement has to carry.
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.
- Import a CSV bank statementThe formats the manual import accepts, and how it treats lines it has seen.
- Find and remove duplicate bank statement linesXero's own cleanup path for duplicates that reach the ledger.
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.