How to convert Excel to QBO
- Have the transactions in one sheet, one per row, with a date column, a description column and an amount column. Extra columns are fine — we ignore what we don't need.
- Drop the file above. We work out which column is which and show you what we found.
- Check the first transaction against your statement. Right date, right amount, and the minus sign on the right side. That thirty-second check catches almost every problem before it reaches your books.
- Download the
.qbo, then in QuickBooks Desktop: Banking › Bank Feeds › Import Web Connect File.
Why QuickBooks won't just take the spreadsheet
QuickBooks Desktop does have an Excel import — it's under File › Utilities › Import › Excel Files — and that is the thing that trips people up, because it looks like the answer. It isn't: that importer is for lists. Customers, vendors, products and services. Bank and credit card transactions don't go through it at all.
Transactions arrive through the bank feed, and the bank feed reads one thing:
a Web Connect file, which is a .qbo. So a spreadsheet of transactions has to
become a .qbo before QuickBooks will look at it. That's the whole job of this page.
On QuickBooks Online? You probably don't need this page
Online's upload — Transactions › Bank
transactions › Upload from file — reads CSV,
not spreadsheets. So on Online your workbook has to stop being an .xlsx
either way, and the shortest route is File › Save As › CSV,
then upload that. No converter needed.
Worth knowing before you reach for a .qbo instead: we've had a report of a
.qbo upload failing on Online while the plain CSV loaded first time.
On Online the CSV is the thing to try, not the fallback.
The converter on this page is for QuickBooks Desktop, which has no CSV
import at all — there a .qbo really is the only way in.
Three things Excel does to bank data that CSV doesn't
1. Dates are secretly numbers
Excel doesn't store 01/05/2024. It stores 45296 — the number of
days since the end of 1899 — and then decides how to display it based on the cell's
number format. Two cells holding the identical number can show as a date in one column and
as a plain figure in the next.
That's why this converter reads the workbook's style table rather than just the values: it's the only way to tell a date from an amount that happens to be five digits. If your date column arrives here as bare numbers, the cells lost their date formatting somewhere upstream — select the column in Excel and format it as a date, then try again.
2. Workbooks have more than one sheet
A CSV is one table and there's nothing to get wrong. A workbook often has a cover page, a summary tab, and the actual transactions somewhere in the middle. We use the first sheet that has more than one row of data, and we tell you which one we used in the results panel above. If we picked wrong, move the transactions to the first sheet — or delete the sheets you don't need — and drop it again.
3. "Save As CSV" is where dates get rewritten
Saving to CSV is a perfectly good route and plenty of people take it. The catch is that
Excel writes dates out in whatever format your machine's regional settings say, so a US
file opened on a European machine can come out as DD/MM/YYYY — and a file
where every day-of-month happens to be 12 or lower is unreadable either way,
because nothing in it says which convention was used.
Reading the .xlsx directly skips that entirely: a date cell carries an
unambiguous number, so there's no format to guess at. If you do go through CSV, we
still warn you when a file's dates could be read both ways.
What we can and can't read
| File | What to do | |
|---|---|---|
.xlsx | Yes | Drop it above |
.xlsm | Yes | Drop it above — macros are ignored, not run |
.csv | Yes | Drop it above, or use CSV to QBO |
.xls (pre-2007) | No | Open it, File › Save As › .xlsx, then drop that |
| Numbers, LibreOffice | No | Export as .xlsx or .csv first |
| PDF statements | No | Look for a spreadsheet or CSV download on your bank's site |
Using something else?
- CSV to QBO — the same thing, starting from a CSV
- CSV to IIF — posts straight to a named account in QuickBooks Desktop
- CSV to QFX — for current versions of Quicken
- CSV to OFX — for GnuCash, Xero, Sage and most others
- CSV to QIF — for Moneydance, GnuCash and legacy Quicken
Frequently asked questions
How do I convert an Excel file to a QBO file?
Drop the .xlsx onto this page. It's read in your browser, the date,
description and amount columns are worked out for you, and you get a .qbo
to download. Then in QuickBooks Desktop:
Banking › Bank Feeds › Import Web Connect File.
Do I need to save my Excel file as CSV first?
No — .xlsx and .xlsm are read directly. Going through CSV also
works, it's just an extra step, and it's the step where Excel most often rewrites the
date column on the way out.
Why are my dates showing as five-digit numbers?
Because those cells aren't formatted as dates any more. Excel stores every date as a
day count — 5 January 2024 is 45296 — and only the cell's number
format makes it look like a date. Select the column in Excel, format it as a date, save,
and drop it here again.
Which sheet do you use if my workbook has several?
The first one with more than one row of data, and we name it in the results panel plus list the ones we skipped. If it's the wrong one, move the transactions to the first sheet or delete the extra sheets and convert again.
Can you read the older .xls format?
No. .xls is a completely different binary file from
.xlsx, despite the similar name. Open it in Excel and use
File › Save As to make an .xlsx or a .csv.
My workbook has formulas — will the results come through?
Yes. Excel saves the last calculated value alongside each formula, and that's the value we read. One thing to watch: if a formula pulls from another workbook that wasn't open when the file was last saved, the stored value may be stale. Open the file, let it recalculate, save, then convert.
Is my bank data uploaded anywhere?
No. The conversion runs entirely in your browser, and the page's Content Security Policy blocks all network requests — the browser itself enforces that nothing is sent. There's no server-side spreadsheet library involved; the unzipping and parsing happen in the page.