Skip to content

Fix a CSV for a Xero or QuickBooks import.

Checks your bank, invoice or journal file against Xero and QuickBooks import rules, offers a safe fix for what it can, and names every row that still needs a person.

CSV, TSV or XLSX, up to 20 MB

Free. No account. Your file never leaves the browser tab.

Watch Accounting Import Check catch three rows Xero or QuickBooks would misread, in 86 seconds.

A real bank file, checked in the actual product — no account, and nothing to upload to watch it happen.

The Accounting Import Check film's title card, “15 findings. 37 rewrites.”, beside a preview of the file with every changed value struck through next to its correction.1:26

One minute twenty-six seconds, narrated, with music playing from the first frame.

Nothing has been sent to YouTube yet: the image and this text came from us, and pressing play is what connects your browser to YouTube.

  1. 0:03It opens fine
  2. 0:05Rejected over one cell
  3. 0:08Or worse — it goes in wrong
  4. 0:12Back in the file, by eye
  5. 0:15Xero or QuickBooks Online.
  6. 0:18Three rows go in wrong.
  7. 0:23Two readings. One is silent.
  8. 0:28Write dates nothing can misread.
  9. 0:32A date is an Excel serial number
  10. 0:44A cell contains a formula rather than a value
  11. 0:55Amounts use a decimal comma
  12. 1:07Eleven safe fixes, one press.
  13. 1:10Every rewrite, shown both ways.
  14. 1:13Take the cleaned file.

youtu.be/GMgDkNoh9tQ · published September 24, 2026

The costly import is the one that succeeds

A rejected file is an afternoon. A file that imports without complaint and posts the wrong figures is a reconciliation, a corrected VAT return, and a conversation with your accountant.

  1. It happens silently

    03/07/2026 is two different months

    Your accounting system reads dates against its own region setting. A file written day-first, imported into an organisation set to month-first, posts July's transactions to March. Nothing is rejected and nothing is reported — the period is simply wrong.

  2. It happens by a factor of a thousand

    1.234 is one euro, or it is a thousand

    Half of Europe writes the decimal comma. Read the separator the other way and 1.234 becomes one thousand two hundred and thirty-four. Both are valid numbers, so no importer will ever query it.

  3. It happens once per file

    The totals row imports as a transaction

    A spreadsheet's own summary row carries a real number in the same column as every genuine transaction. The importer takes it as one more, and the account is out by the value of the entire file.

Every check on this page is measured against what Xero and QuickBooks publish about their own importers, or against arithmetic the file has to satisfy on its own.

What Accounting Import Check does

The file you're about to import

march-statement.csv

Bank transactions
Date · Description · Amount, or Debit + Credit

What the check finds

  • Date order cannot be told from the file

    Warning
  • Amounts use a decimal comma

    Notice
  • A totals row is mixed in with the data

    Blocker

Cleaned for import

Date,Amount,Payee,Reference

2026-07-03,1250.00,Fenwick and Sons,INV-1042

2026-07-05,-82.50,Northwind Supplies,INV-1043

Settles how the file reads

Before judging a single figure it works out — from the data, not from a guess — whether the dates are day-first and whether the separator is a decimal point. Where the file cannot prove it, it asks you rather than choosing.

Checks it against the real rules

Every row is measured against the importer you are actually using: what it rejects, what it truncates, what it silently reads as something else. Plus the arithmetic — journals that do not balance, tax that does not match its rate.

Hands back a cleaned file

Amounts in the plain shape both vendors document, headings spelled the way the importer matches them, and an issues report naming every row that still needs a person.

What a finding looks like

Three real cases, with what goes in, what the tool says, and what it would write instead.

Every date on or before the twelfth

In: a column of 03/07/2026, 05/09/2026, 11/12/2026 — nothing above twelve anywhere.

Out: the tool refuses to pick and asks which order the file is in.

Warning · The date order cannot be told from the file. Your accounting system would pick one from its region setting and post the transactions to the wrong months.

An amount written the European way

In: -1.234,56 in the amount column of a file bound for QuickBooks.

Out: -1234.56, in the plain shape the vendor documents.

A warning for QuickBooks, which asks for a plain amount column, and a notice for Xero — the export normalises it either way.

A summary row under the data

In: a final row reading Total in the description column and 4.590,19 in the amount column, with no date.

Out: the row is struck through in the preview and left out of the export.

Blocker · Recognised by a totals label beside a real number with no date, so a genuine transaction described as “Total rent” is left alone.

Three steps, and nothing else

Drop the file and pick your platform

A CSV, TSV or Excel file, plus Xero or QuickBooks Online and what you are importing. The file is read in your browser tab — it is never uploaded anywhere.

Confirm how the file reads

Accounting Import Check shows what it worked out about your dates and decimals, and how it knows. Where the file is genuinely ambiguous it says so and waits, because guessing there is the expensive mistake.

Review, fix, export

Findings grouped by what they are, each naming its rows. Tick the safe mechanical fixes; the rest are listed for you. Then download the cleaned file, the issues report, the change log, or your untouched original.

What it checks

Six families of finding, each one either a rule the vendor publishes or a sum the file has to satisfy on its own.

Dates

Ambiguous or contradictory date order, Excel serial numbers left in a date column, impossible days, years decades out, and a due date that falls before its invoice.

Amounts and decimals

Currency symbols, thousands separators, decimal commas, brackets and trailing minus signs for negatives, too many decimal places, and a bank statement whose expenses lost their minus.

Tax

A blank tax code, which Xero imports as untaxed rather than defaulted. One code carrying two different rates. A stated tax amount that does not match the rate and the net.

Balance

Journals whose debits and credits do not meet, and by how much. A row carrying both a debit and a credit, or neither. A line total that is not quantity times unit price.

Multi-line documents

Continuation rows that leave the contact name or the dates blank, which Xero rejects one row at a time. Rows of one invoice that disagree, or that are scattered through the file.

Duplicates

Identical rows, one invoice number used by two different customers, and the same date, amount and description twice — the signature of a statement downloaded twice.

What you can put in

Three record types, because the rules are genuinely different for each. Pick what you are importing and the checks follow.

  • Bank transactions

    Checked forA statement export, or a CSV your bank hands you. Checked for the sign convention, the date order, the decimal convention, duplicates and totals rows.

    ColumnsDate · Description · Amount, or Debit + Credit

  • Sales invoices

    Checked forIncluding multi-line invoices, where the continuation rows are exactly where an import quietly falls over. Adds tax, account codes and document checks.

    ColumnsContact · Number · Dates · Quantity · Unit amount · Account · Tax

  • Manual journals

    Checked forRead either way a file can be written: a debit and a credit column, or one signed amount column. Every journal has to balance, and this says by how much it does not.

    ColumnsNarration · Date · Account · Debit + Credit, or Amount

Two platforms, checked against their own documentation

The two disagree about things as basic as whether brackets mean a negative, so a generic check would be wrong for one of them.

  • Xero

    Rules read fromWhen a file's dates could be read more than one way, Xero asks you to confirm the format once, then applies that answer to this file and every later import for the same bank account — which is where a silently misread month comes from. Brackets around a negative are ordinary. A TaxType value has to be one already set up in Xero, or that information is not imported.

    LimitsBank statement: 100,000 rows · Bills: headings matched letter for letter

  • QuickBooks Online

    Rules read fromIntuit asks you to keep the amount column as simple as possible — no currency symbols, no commas — to leave a zero-only cell blank, and to keep numbers out of the description. Dates are read against your company's locale, and every date in the file has to use the same format.

    LimitsBank: 1,000 lines and 350 KB · Invoices: 100 at a time

A third platform is a data file rather than a code change — what it needs first is a published row limit and column list, read from the vendor rather than from a blog.

Who it is for

Anyone who prepares a file for an accounting system and would rather find out now than after it has posted.

Bookkeepers

You import statements and sales files every week, and you already know which of your clients' banks writes dates the awkward way. This is the check you would run by eye, run in a second.

Accounting practices

Thirty clients, thirty export formats, and a junior doing the import. A verdict and an issues report make that reviewable rather than trusted.

Migrations onto Xero or QuickBooks

Opening balances, historic invoices and years of transactions, all going in once. The rows you cannot re-import are the rows worth checking twice.

Finance teams

The month-end journal that a colleague built in a spreadsheet. Whether it balances is a question worth answering before it reaches the ledger.

What it does not do

Stated plainly, because a tool that overstates its reach costs more than one that does less.

  • It does not import anything

    Accounting Import Check prepares the file. You run the import yourself, in your own accounting system, exactly as you do now.

  • It cannot see your chart of accounts

    Whether account 200 exists in your organisation is something only your accounting system knows. Account codes are checked for shape and for self-consistency, never against your real ledger.

  • It does not convert PDFs

    If your statement is a PDF, something else has to turn it into a spreadsheet first. This checks the file you already have.

  • It is not accounting advice

    It reports what an importer will do with your file. Which account a transaction belongs to, and whether a journal is right, remain yours to decide.

Privacy

Your ledger never leaves the tab.

A bank statement or a sales ledger is among the most sensitive files a business has: every counterparty it pays, every customer it bills, and what each of them is worth.

The file is read in your browser tab. It is not uploaded, because no code on this page sends it — that is a promise our code keeps, not one the browser enforces. What the browser enforces is reach: the page's content-security policy lets the page itself contact only our own origin, Cloudflare's two analytics hostnames and youtube-nocookie.com, for the demo video's YouTube player frame, though nothing is loaded from YouTube until you press play. Our policy stops at that frame: what the player loads inside it is YouTube's, not ours to govern or count. Nothing from your file is in any of it.

Accounting Import Check never touches your accounting system. There is no connection, no OAuth and no permission to grant. It only looks at the file you are about to give Xero or QuickBooks yourself.

There is no account, no sign-in and no email address to hand over. Open the page and check a file.

Your file is never stored, because it is never sent. What the tool does send is an anonymous count that a file was checked — no file name, no row count, no column names — and Cloudflare's anonymous page-view measurement. Pressing play on the demo video hands your browser to YouTube's player, which then loads whatever it loads from Google's own hosts; we neither control nor count those requests, and nothing from your file is in any of them.

Our privacy approach

Questions

The things people ask before checking a file full of their customers' money.

What does Accounting Import Check actually do?
You drop a bank, invoice or journal file and choose Xero or QuickBooks Online. It checks every row against that platform's own import rules plus the arithmetic accounting requires, gives you a verdict, and exports a cleaned file with an issues report and a change log.
Which accounting systems does it check against?
Xero and QuickBooks Online. Both sets of rules are read from the vendors' own documentation rather than inferred, which is why there are two rather than ten — a limit taken from a blog post would make the tool wrong in the one way it may not be.
Is my file uploaded anywhere?
No. It is read in your browser tab and never sent, because no code on this page sends it — that is what our code does, not something the browser enforces. What the browser enforces is reach: the page's content-security policy lets the page itself contact only our own origin, Cloudflare's two analytics hostnames and youtube-nocookie.com, for the demo video's YouTube player frame, though nothing is loaded from YouTube until you press play. Our policy stops at that frame: what the player loads inside it is YouTube's, not ours to govern or count. Nothing from your file is in any of it.
Why does it ask me about dates?
Because 03/07/2026 has two correct readings and your accounting system will pick one silently. Where the file proves the order — any day above the twelfth does — it settles it and says so. Where every date falls on or before the twelfth, no amount of cleverness can tell, so it asks.
Why does it ask me about decimals?
For the same reason: 1.234 is one and a bit under one convention and a thousand and a bit under the other, and both are valid numbers. A file carrying 1.234,56 settles it outright. A file where every separator has exactly three digits after it does not, and a wrong guess there is a thousandfold error that nothing downstream would report.
Does it check that my journals balance?
Yes, per journal, and it tells you the amount each one is out by. It reads either shape a file can be in — a debit and a credit column, or a single signed amount column that must sum to nothing. It never guesses which side is wrong, because that is a judgement about the transaction.
Does it read Excel files?
Yes — .xlsx as well as CSV and TSV. Formulas are read as the value they produced, which is what an import cares about, and a cell still carrying a formula or a #REF! error is itself a finding.
Will it change my figures?
Only the ones you tick, and only mechanically. It normalises how a number is written without changing what it is, fills a document's own values down its own rows, and removes totals rows and blank rows. Everything it touches is listed cell by cell with the value before and after, your original stays downloadable, and unticking a fix restores the file exactly.
What does it cost?
Nothing. There is no paid tier, no trial and no card. If that changes, the free check stays free.
Can it connect to my Xero or QuickBooks account?
No, and that is the design rather than a missing feature. Tools that connect to your accounting system clean what is already in it; this checks the file while it is still a file, when the fix is free and nothing has been written to a system of record.

Check the file first.It takes a second.

Drop the statement you're about to import. Nothing to install, no account, no upload.

Check a file

Free. No account. Your file never leaves the browser tab.