Importing bank statements into QuickBooks Online
Intuit publishes exactly what a CSV upload has to look like. Here is the whole rulebook, why a bank statement converter that ignores it hands you an afternoon of work, and the two ways we get around it — a QBO file, or a CSV written to every rule on this page.
QuickBooks Online will take a CSV of your bank transactions. It will also refuse one for reasons that have nothing to do with whether your bank statement converter read the PDF correctly. Those reasons are published, stable, and short enough to fit on one page.
The CSV rules, in full
Intuit’s upload documentation is specific. A file that breaks any one of these will not import.
The file itself must be in English, 350 KB or smaller, and hold no more than 1,000 transaction lines per upload. A year of a busy current account exceeds both the size and the line count. The documented fix is to shorten the date range and upload in batches — which means a converter that hands you one file for the year has quietly handed you a splitting job as well.
There are exactly two accepted column layouts. Three columns — Date, Description, Amount — with money out written as a negative number. Or four columns — Date, Description, Credit, Debit — with money in and money out separated. Five columns fails. Four columns in a different order fails. And it typically fails at the mapping step rather than at upload, which is why the error reads like a problem with your data.
Zero values must be removed and the cells left blank. A literal 0 in an amount cell is not the
same thing as an empty cell as far as the importer is concerned.
The Credit and Debit headers must read exactly that. If your spreadsheet says “Credit Amount” and “Debit Amount”, strip the word “Amount” — Intuit documents this specifically.
Every date must be in one format throughout the file. Mixed formats in a single column are a common failure when a statement prints one style in the transaction table and another in a header.
On a Mac, the file has to be saved as a Windows CSV, not the default. This one catches people who did everything else right.
Sources: Intuit, manually upload transactions into QuickBooks Online.
The rule that catches almost everyone
Intuit’s error guide adds one more: special characters in a transaction description can block the import outright.
Bank descriptions are full of them. POS PURCHASE *1234, ACH DEBIT #77-A, TRANSFER TO A/C 0000/1234 — asterisks, hashes and slashes are how banks abbreviate. A converter that faithfully
reproduces the description as printed, which is what you want for every other purpose, hands you a
file whose most accurate column is the one that stops the import.
Source: Intuit, common errors for importing bank transactions using CSV.
What we do instead: QBO
None of the above applies to a QBO file. QBO is QuickBooks’ own flavour of OFX — the transaction data plus a few tags Intuit’s software looks for — and it is what Intuit’s importer is built to read. No column count to satisfy, no 350 KB ceiling, no 1,000-line split, no header wording, no date format to normalise, no special-character problem.
There is one deliberate cost. When you import our .qbo file, QuickBooks asks which account it
belongs to instead of matching one automatically, because we leave the Intuit bank ID blank. Intuit
assigns that number to participating banks; we are not a bank and have not been assigned one, and we
will not borrow someone else’s — if that file lands in a QuickBooks company with a live connection to
the bank whose number we used, your transactions can be filed against the wrong account.
The full reasoning is on the QBO page.
One dropdown, against six rules and a manual year-splitting job, is a trade worth taking.
Or take the CSV, written to the rules above
QBO is the shorter road, but it is not the only one — some people want the spreadsheet, and some bookkeepers want to eyeball the rows before anything reaches the ledger. So pick QuickBooks as the destination and we write the CSV to every rule on this page rather than handing you our own layout:
- Three columns or four, your choice.
Date, Description, Amount, orDate, Description, Credit, Debitwith money in and money out separated. Nothing else in the file. - Header wording exactly as Intuit specifies it —
CreditandDebit, neverCredit Amount. - Zeroes left as blank cells, not written as
0.00. - One date format throughout, MM/DD/YYYY by default, switchable if your QuickBooks region expects something else.
- The characters Intuit documents as blocking imports —
*,#,?and their neighbours — replaced with spaces rather than deleted, soPOS*AMZN #123stays searchable asPOS AMZN 123. The bank’s original wording is kept verbatim in thedescription_rawcolumn of the plain CSV. - No UTF-8 byte-order mark, which would otherwise turn your first header into
Datewith an invisible character in front of it and break the column mapping. - Split at 1,000 rows and 350 KB, one file per account, numbered, delivered as a zip. Upload them one at a time — that is Intuit’s own documented answer to a file that is too big, and we do the splitting rather than leaving it to you.
One thing you should know before you use it. Every file we write normally carries its own
warnings inside it — anything we could not read, anything that does not balance — because you often
forward these files to someone else, and a warning that lives only on a web page does not travel.
QuickBooks will not accept a CSV containing any line that is not a transaction, so for this
destination those comment lines would stop the import. We do not delete them; we move them. The file
arrives named …-CHECK-BEFORE-IMPORT.csv, a split export carries a READ-ME-FIRST.txt in the zip,
and the plain thirteen-column CSV still spells everything out in full.
If QuickBooks still refuses the file
Two things are worth checking before assuming the conversion is broken.
QuickBooks Desktop expects Web Connect files to be imported through File → Utilities → Import → Web Connect Files, not by double-clicking them. And some versions refuse a file whose date range overlaps transactions already imported — that is a duplicate guard, not a format error.
Before you import anything: check the file
Whichever route you take, the import is not the first thing to verify. A file can import perfectly and still be wrong.
Add the opening balance to every credit, subtract every debit, and compare the result against the closing balance printed on your statement. If those two do not meet, something was dropped, duplicated or read with the wrong sign, and importing it will put a broken month into your books rather than a broken file on your desktop.
We run that check on every upload before you pay, per account rather than across the whole document, and we separately report anything in the PDF that never made it into the table at all — because a balance check cannot see a block that was never read.