Someone sent you a QuickBooks Desktop .iif file — a transaction register, a chart of accounts,
maybe a customer list — and you need it in a spreadsheet. Maybe you're migrating off QuickBooks
Desktop, maybe you're auditing a bookkeeper's export, or maybe you just don't have QuickBooks
installed on the machine you're working from. Here's how to get it done without QuickBooks at
all.
Why renaming .iif to .csv doesn't work
An IIF file is tab-delimited, which makes it look like it should open cleanly in Excel — and
technically it will, sort of. The problem is structural, not cosmetic: IIF interleaves header rows
(starting with !) that declare column names with data rows that use them, and transaction data
is split across multiple lines — a TRNS row, one or more SPL split lines, and an ENDTRNS
marker — that all belong together as one logical record. Opened raw in Excel, you get a jumble of
header rows mixed into your data with no indication of which columns apply to which rows below
them. For the full breakdown of the format, see
What is an IIF file?
Convert IIF to CSV in your browser
The free IIF to CSV converter on LegacyFile does the actual parsing:
- Drop your .iif file into the converter. Parsing happens entirely on your device — nothing is uploaded.
- It reads the header rows to know which columns apply to which data rows, even when different QuickBooks exports declare them in a different order.
- It groups every TRNS with its splits. A bill paid out of three expense accounts becomes three linked rows in the output, each carrying the transaction's date, type, and reference number — not three disconnected, context-free lines.
- It handles list-only exports too. If your file has no transactions at all — just a chart of accounts or a customer list — the converter automatically exports using that list's own columns instead of forcing it into a transaction layout that doesn't apply.
- Check the summary and preview, then export CSV, XLSX, or JSON. The CSV/XLSX opens directly in Excel, Google Sheets, or Numbers.
What ends up in each column (transaction exports)
For a transaction register, every split becomes one row with these columns:
| Column | Source |
| ------------- | -------------------------------------------------------------------------- |
| Type | The transaction's TRNSTYPE (CHECK, DEPOSIT, BILL, INVOICE...) |
| Date | The transaction date, normalized to YYYY-MM-DD when possible |
| Account | The transaction's primary account (from the TRNS row) |
| Split Account | The other side of the entry (from the SPL row) |
| Amount | The split's amount — or the transaction's own amount when it has no splits |
| Name | The customer/vendor/employee name, preferring the split's own value |
| Memo | Free-text memo, preferring the split's own value |
| Class | QuickBooks class tracking, when used |
| Num | The check number, invoice number, or other document number |
A transaction with no splits still produces exactly one row, using its own amount and account — nothing gets silently dropped.
When something looks off
The converter never fails silently. A split line with no transaction open before it, or a transaction missing its closing ENDTRNS, gets kept and flagged in a warnings list instead of being dropped or crashing the conversion — the safest default when you're working with financial data you can't easily re-export from the source system.