← All articles
Data Export

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

CapturedDropped
Transaction type, date, amountAttachments and linked documents
Account names (as text, not IDs)Reconciliation status and cleared flags
Memo, name, class, document numberAudit trail and who entered the transaction
Split lines and their accountsLinks between invoices and their payments
Basic list records for accounts and namesCustom 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
ENDTRNS

Fields are separated by tab characters. The common types you'll meet:

  • ACCNT — chart of accounts entries
  • CUST, VEND, EMP — customer, vendor, and employee list records
  • INVITEM — items from the item list
  • TRNS — the header line of a transaction (the bank or A/R side)
  • SPL — a split line belonging to the TRNS above it
  • ENDTRNS — 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:

  1. Open the .iif in a text editor that shows tabs
  2. Copy each ! header line plus every data row sharing its first token into its own file
  3. Save each as .txt with tab separators
  4. 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 TRNS lines 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, the TRNS amount plus its SPL amounts 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

SymptomCauseFix
"No TRNS rows found"The file holds only list records — an export from Lists to IIF FilesNothing to fix; split it by record type instead
Columns shifted one to the leftThe header line and data rows have different field countsCompare the tab count on the !TRNS line to a data row
Everything in column A in ExcelExcel opened it as comma-delimitedReimport via Data > From Text/CSV with Tab selected
Amounts became datesExcel autoformatted values like 3-15Set the column to Text in the import preview before loading
Leading zeros gone from check numbersSame autoformat behaviourSame fix — import the column as Text
Accented characters look wrongThe file isn't UTF-8Choose 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.