Skip to content
StatementSmith
Bank statement converter

Convert CSV to Xero

Drop in a bank statement CSV and get back a tidy three-column file, with a balance check that proves nothing was dropped.

  • US, UK and EU layouts read without configuration — one amount column or split debit/credit
  • Nothing is uploaded. The file is read in this browser tab and never stored
  • No account and no card, with no limit on CSV conversions

No sign-up needed. Files never leave your browser.

Xero reads bank statements from a plain CSV, and its import screen asks you to say which column is which. What it needs is a consistent file: one row per transaction, one date format throughout, and amounts without thousands separators.

That last one causes more failed imports than anything else. A value written as 1,800.00 is read as two columns, and the row lands in the wrong place or not at all. Every amount here is written plain, with a leading minus for money out.

Dates go out as yyyy-mm-dd. Xero asks which format your file uses, and that is the one reading nobody can get backwards — no ambiguity between the fifth of January and the first of May.

Balance validation

A converter that tells you when it missed something.

Most tools hand you a file and let you find out in your ledger. Every conversion here is reconciled against the closing figure first — read from your statement’s balance column when it has one, or typed in from the page when it doesn’t.

When the totals don’t meet you get the exact size of the gap, every row that did read, and the converted file anyway.

Sample balance check

Closing balance is 240.18 short

A transaction may be missing — review the rows below, or re-upload including all pages.

Opening4,210.11
Rows total1,154.46
Computed5,364.57
Statement says5,604.75

A sample result. This is the same component the converter uses.

Client statements never leave the tab

Conversion runs in your browser, in JavaScript on this page.

No server copy

Closing the tab discards the file and everything read out of it. There is nothing to delete later and nothing to breach.

Nothing to opt out of

There is no upload step to decline, because there is no upload. Open your browser's network tab and convert — you will see no request carrying your data.

Keeps working with the network off

Once this page has loaded, conversion runs with no connection at all. Useful on a client site with locked-down wifi, and a plain demonstration that the file stays put.

Questions people actually ask

What columns does the file have?
Date, Amount and Description — one column for each field a bank statement CSV actually contains. Some converters write the description into both a Payee and a Description column, which invents a distinction the source never made. Xero's import screen lets you map the description to whichever field you want.
Why is the download named differently from my file?
The output is a CSV and so was the input, so a -xero suffix is added to the filename. Without it your browser would save the converted file alongside the original with an almost identical name.
Does my statement get uploaded anywhere?
No. The conversion runs inside your browser using JavaScript on this page. The file is read from your disk into memory, converted, and offered back as a download. Nothing is sent to a server, so there is nothing for us to store, log or delete. You can confirm this by opening your browser's network tab while you convert.
Do I need an account?
No. There is no sign-up, no email capture and no usage limit on CSV conversion.
How do I know every transaction came through?
Every conversion shows a balance check above the results. If your file has a running balance column, the opening and closing balances are read from it automatically; otherwise you can type them in from your statement. The check adds up every converted transaction and compares the result to the closing balance, and tells you the exact amount of any difference.
My dates came out wrong. What happened?
A date like 05/01/2026 is ambiguous: 5 January in the UK and most of Europe, 1 May in the US. Turn on the day-first option and the file is re-read immediately. If your statement contains a date that can only be day-first, such as 19/02, the converter points this out before you download.
Some rows were skipped. Is that a problem?
Usually not. Totals rows, page footers, repeated column headings and blank lines carry no transaction date, so they are left out and counted. The skipped count is shown with the results so you can check it against what you expected.

Try it on the statement that’s annoying you right now.

No account, no card, no limit. If the layout isn’t recognised you will know immediately, rather than after a support ticket.

Convert a statement