CSV to IIF Converter
Drop a CSV, name the bank account and the expense or income accounts, and download an .iif file for QuickBooks Desktop.
How to use
- Step 1Drop the CSV and check the columns: date, amount (or debit and credit), payee, memo, check number, and an optional account column if the file already names an expense or income account per row.
- Step 2Type the account names exactly as they are spelled in your QuickBooks Desktop chart of accounts: the bank or card account, and the income and expense accounts to post against when a row names none.
- Step 3In QuickBooks Desktop, back up the company file, then File → Utilities → Import → IIF Files and choose the .iif. The transactions land straight in the register.
IIF: the older, blunter import
IIF (Intuit Interchange Format) is tab-separated text QuickBooks Desktop has imported since the 1990s. Unlike a Web Connect (.qbo) file, which goes through the bank feed where you review and match each line, an IIF import writes transactions directly into the register, with the offset account already chosen. That is its point: a whole month posted to the right accounts in one go, with vendor names attached. It is also its danger: there is no undo, unknown accounts and names are created silently, and importing the same file twice doubles every line, because IIF carries no transaction id.
QuickBooks Online cannot import IIF at all; it takes CSV, QBO, QFX and OFX. IIF is for QuickBooks Desktop (Pro, Premier, Enterprise, and Mac). Intuit still supports the format but offers no assisted support for hand-made files, so keep a backup before every import.
What this converter writes
Each transaction becomes three lines: TRNS on your bank or card account with the signed amount, SPL on the offset account with the opposite amount, and ENDTRNS. Money out becomes a CHECK (a CREDIT CARD charge for a card account), money in a DEPOSIT (CCARD REFUND for a card). The offset account is the row's own account column when the CSV has one, otherwise the default income or expense account you name. Check numbers go into DOCNUM, the payee into NAME, and the memo into MEMO.
With "Add !ACCNT lines" on, the file starts by declaring every account it uses with its type (BANK or CCARD, INC, EXP). Without that, QuickBooks creates any account it does not find as a bank account, which then has to be fixed by hand. Names longer than QuickBooks' limits are cut (31 characters per account level, 41 for names); text is written as plain ASCII, since IIF is read as Windows text and accents would arrive garbled.
| CSV column | IIF field | Notes |
|---|---|---|
| Date | DATE | Written as m/d/yyyy, the form QuickBooks Desktop US expects |
| Amount, or Debit + Credit | AMOUNT | Signed on the TRNS line, opposite sign on the SPL line |
| Payee, Description | NAME | QuickBooks creates names it does not know; spell them as in your lists to avoid duplicates |
| Memo | MEMO | Both lines carry it |
| Check number | DOCNUM | Money out with a number is a CHECK; TOPRINT is N so nothing queues for printing |
| Account, Category | SPL › ACCNT | Overrides the default income or expense account for that row |
IIF or QBO?
Use IIF when you want the postings done: you know the expense account for each row, or one default is fine and you will reclassify later. Use QBO (Web Connect) when you want the bank feed's matching against existing bills and invoices, when the same period may be imported again, or when the file is for QuickBooks Online. Both come from the same CSV; the CSV to QBO page is the other route.
Questions and answers
QuickBooks imported the file but the account is wrong or a new one appeared. Why?
Account names must match the chart of accounts exactly, including sub-account paths written as Parent:Child. A name that does not match is created as a new account, as a bank account unless the file declares its type in !ACCNT lines. Fix the spelling here and import again after restoring the backup.
Can I import this into QuickBooks Online?
No. QuickBooks Online has no IIF import. Convert the CSV to QBO instead and upload it under Transactions → Bank transactions, or upload the CSV itself there.
The transactions show as CHK in the register, not as expenses. Is that right?
Yes. A CHECK transaction on a bank account is the register entry; its SPL line posts the amount to the expense account. Open one and you will see the account and the amount on the expense tab.
What if the CSV is a credit card statement?
Set the account to Credit card: charges are written as CREDIT CARD transactions and refunds or payments as CCARD REFUND, and the !ACCNT line declares the account as CCARD. Charges must be negative in the CSV reading; pick "money out positive" under Amounts when the export lists charges as positive.