Export QuickBooks IIF to CSV: Step-by-Step Guide
February 14, 2026
An IIF file is not a spreadsheet with a different extension. It's several spreadsheets stacked in one text file — accounts, customers, vendors, and transactions, each with its own column header and its own row width — which is exactly why opening one in Excel produces a ragged mess where nothing lines up. Getting usable data out means separating those record types first, then deciding what to do with the pieces IIF never captured in the first place.
Where IIF files actually come from
QuickBooks Desktop's own export menu is narrower than most people expect. File > Utilities > Export > Lists to IIF Files exports lists — chart of accounts, customers, vendors, items, employees — and nothing else. There is no menu command that dumps your transaction history to IIF.
So a transaction IIF in your hands almost always came from somewhere else: a payroll service, a point-of-sale system, a third-party app that wrote the file for import, or an old migration bundle from a previous bookkeeper. That matters, because those files are written to be imported, not to be read — they carry only the fields the writer needed.
If your goal is transaction history and you still have the company file open, a report export is usually the better route: run Reports > Transaction Detail by Account, set the date range, and use Excel > Create New Worksheet. That gives you every field QuickBooks holds, not just the ones IIF carries.
What IIF captures, and what it silently drops
| Captured | Dropped |
|---|---|
| Transaction type, date, amount | Attachments and linked documents |
| Account names (as text, not IDs) | Reconciliation status and cleared flags |
| Memo, name, class, document number | Audit trail and who entered the transaction |
| Split lines and their accounts | Links between invoices and their payments |
| Basic list records for accounts and names | Custom fields not declared in the header row |
The last one bites hardest. IIF's columns are defined per-file by the header line, so two IIF exports of the same data can carry different fields. Nothing is missing in an error sense — it was simply never written.
Reading the record types
Every line's first token is its record type. Lines beginning with ! are header definitions that name the columns for every following row of that type:
!ACCNT NAME ACCNTTYPE DESC
ACCNT Checking BANK Operating account
ACCNT Office Supplies EXP
!TRNS TRNSID TRNSTYPE DATE ACCNT AMOUNT MEMO
!SPL SPLID TRNSTYPE DATE ACCNT AMOUNT MEMO
!ENDTRNS
TRNS 1 CHECK 01/15/2026 Checking -250.00 Office supplies
SPL 1 CHECK 01/15/2026 Office Supplies 250.00 Office supplies
ENDTRNSFields are separated by tab characters. The common types you'll meet:
ACCNT— chart of accounts entriesCUST,VEND,EMP— customer, vendor, and employee list recordsINVITEM— items from the item listTRNS— the header line of a transaction (the bank or A/R side)SPL— a split line belonging to theTRNSabove itENDTRNS— closes the transaction block
A TRNS and its SPL lines always sum to zero. That's the double-entry pairing, and it's the key to reading the file: the TRNS row tells you which account the money moved through, the SPL rows tell you what it was for.
Splitting a multi-record IIF into usable sheets
The IIF to CSV converter extracts the TRNS rows and writes them out with the columns named on the !TRNS header line. That's the sheet most people want — one row per transaction, ready for a pivot table. It deliberately leaves SPL lines and list records behind, because mixing different column widths into one CSV is what made the file unreadable to begin with.
If you need the other record types too, split the file manually. It's plain text:
- Open the
.iifin a text editor that shows tabs - Copy each
!header line plus every data row sharing its first token into its own file - Save each as
.txtwith tab separators - In Excel, use Data > From Text/CSV and choose Tab as the delimiter
You end up with one sheet per record type — accounts, customers, transactions — each with clean columns. For split-level detail, rely on file order rather than ids: SPL lines always immediately follow the TRNS line they belong to, so the parent is the last TRNS seen above them. Files written for import usually reuse the parent's id in SPLID too, but that isn't guaranteed.
Reconciling the result
Before you trust the spreadsheet, prove it against something:
- Row count. Count
TRNSlines in the original file and compare to CSV rows. A gap means rows were malformed or the file uses a record type the parser skipped. - Net total. Sum the amount column. If the export covers a whole account, it should tie to the movement on that account for the period.
- Zero-sum check. For each
TRNSID, theTRNSamount plus itsSPLamounts must equal zero. Any group that doesn't is a truncated block. - Date range. Sort by date and check both ends. Truncated files usually lose the tail, not the head.
Problems you'll hit
| Symptom | Cause | Fix |
|---|---|---|
| "No TRNS rows found" | The file holds only list records — an export from Lists to IIF Files | Nothing to fix; split it by record type instead |
| Columns shifted one to the left | The header line and data rows have different field counts | Compare the tab count on the !TRNS line to a data row |
| Everything in column A in Excel | Excel opened it as comma-delimited | Reimport via Data > From Text/CSV with Tab selected |
| Amounts became dates | Excel autoformatted values like 3-15 | Set the column to Text in the import preview before loading |
| Leading zeros gone from check numbers | Same autoformat behaviour | Same fix — import the column as Text |
| Accented characters look wrong | The file isn't UTF-8 | Choose Windows-1252 encoding in the import dialog |
What to do with the data next
Once it's a clean CSV, the usual jobs are quick: a pivot table by account name for a spending breakdown, a filter by TRNSTYPE to isolate cheques or deposits, or a date-grouped summary for a period comparison. The same techniques from exporting QuickBooks transactions to Excel apply directly.
If the destination is Quicken rather than a spreadsheet, skip CSV altogether and use IIF to QIF — it preserves the transaction structure that a flat CSV flattens away. And if you're moving data the other direction, back into a QuickBooks Desktop company file, CSV to IIF rebuilds the TRNS/SPL pairing for you.
Ready to convert your files?
Free, unlimited, no signup. Your data never leaves your browser.
Related articles
How to Convert CSV to QBO for QuickBooks Online (Free, Any Bank)
Step-by-step guide to converting any bank CSV export into a QBO file for QuickBooks Online — with ba…
CSV to IIF: Import Transactions to QuickBooks Desktop
The QuickBooks Desktop side of a CSV to IIF import: preparing the file, matching account names to yo…