QBOKit

How to convert a bank CSV to an IIF file for QuickBooks Desktop

IIF (Intuit Interchange Format) is QuickBooks Desktop's own import format. Intuit describes these files as ASCII text, TSV (Tab-Separated Value) files that QuickBooks Desktop uses to import or export lists or transactions. It is the format to reach for when Web Connect is refused — in particular on a Desktop version past its end of service, which is what Intuit's own support agents point people at.

🔒 Convert your CSV to IIF now — free, runs in your browser, nothing uploaded.

The steps

  1. Export a CSV from your bank. Any layout. Comma, semicolon or tab separated, and junk rows above the header are fine.
  2. Drop it into the converter. QBOKit works out the delimiter, finds the header row and guesses the date, description and amount columns.
  3. Check the columns — in particular whether the dates are day-first or month-first.
  4. Pick .IIF as the output.
  5. Type both account names exactly as they appear in QuickBooks. The bank account the transactions belong to, and a second account for the other side of each entry. There is no default and the file will not be written without them — the next section explains why that is deliberate.
  6. Import it in QuickBooks Desktop: File → Utilities → Import → IIF Files.

The account-name trap, and why we make you type both names

A wrong account name is not refused. It silently adds an account to your books. Intuit's own IIF overview states it plainly: If you import a transaction with an account that is not already created in the QuickBooks data file, that account will be created as a new bank account.

That is worse than an error message, because nothing tells you it happened. A single typo — Business Checking against Business Chequing — leaves you with two bank accounts, one of them holding every transaction you just imported, and a reconciliation that will not balance until you find it.

So the converter has no default account name and will not guess one. Open QuickBooks, look at your chart of accounts, and copy both names across character for character. The second account is where the other half of each double entry lands; Uncategorized Expense is the usual choice, and you re-categorise from there.

Why the statement text goes in MEMO and never in NAME

The same rule that creates accounts applies to the payee list. NAME in an IIF transaction is a QuickBooks name-list entry, so an unrecognised NAME gets created too. Raw bank descriptions are nearly all distinct — CARD PURCHASE 04/01 SHELL 1423, CARD PURCHASE 04/07 SHELL 2210 — so writing them into NAME would add one new payee per transaction, hundreds of them, to a list you then have to clean by hand.

QBOKit therefore writes the description into MEMO and leaves NAME empty. You still see the description on every transaction; your name list is untouched. Check this before using any other converter: it is an easy thing to get wrong and a tedious thing to undo.

What an IIF file actually looks like

Three header lines beginning with !, then one balanced double entry per transaction. The separator is a real tab character, not spaces:

!TRNS	TRNSTYPE	DATE	ACCNT	NAME	CLASS	AMOUNT	DOCNUM	MEMO
!SPL	TRNSTYPE	DATE	ACCNT	NAME	CLASS	AMOUNT	DOCNUM	MEMO
!ENDTRNS
TRNS	CHECK	04/01/2026	Business Checking			-82.40		DIRECT DEBIT ACME LTD
SPL	CHECK	04/01/2026	Uncategorized Expense			82.40		DIRECT DEBIT ACME LTD
ENDTRNS
TRNS	DEPOSIT	04/02/2026	Business Checking			2000.00		SALARY PAYMENT APRIL
SPL	DEPOSIT	04/02/2026	Uncategorized Expense			-2000.00		SALARY PAYMENT APRIL
ENDTRNS

Money out of the bank is written as a CHECK, money in as a DEPOSIT. The TRNS line carries the amount on your bank account and the SPL line carries the opposite amount on the second account, so every entry balances to zero.

Because the tab is the delimiter, a tab or a line break inside a bank description would shift every later column on that row and quietly corrupt the import. QBOKit strips those characters out of each field rather than trying to escape them.

IIF has no transaction ids

Nothing in an IIF file tells QuickBooks it has seen a transaction before. A .QBO Web Connect file gives every transaction a FITID, and QuickBooks uses it to skip duplicates. IIF has no equivalent field, so if you import January to March and then February to April, February and March will land twice and nothing will warn you.

Import one statement period at a time, and check the last date you imported before you import the next file. If your Desktop version still accepts Web Connect, convert to QBO instead and keep the duplicate protection. The same mechanism works against you in the other direction too, which is its own problem: see QuickBooks will not re-import a Web Connect file.

IIF, QBO or QIF for QuickBooks Desktop?

FormatDesktop takes it?Transaction idsUse it when
.QBOYes, via Web ConnectYesYour version still accepts Web Connect. This is the first thing to try.
.IIFYes, via File → Utilities → ImportNoWeb Connect is refused, or your version is past its end of service.
.QIFNoNoNever for Desktop. QIF is for Quicken, Xero and GnuCash.

QuickBooks Online does not import IIF at all. If you are on QBO rather than Desktop, upload a .QBO file or a cleaned-up CSV instead.

What we fix in your CSV on the way

What we cannot claim

We have not been able to test these files against a QuickBooks Desktop install past its end-of-service date, because we do not have one. The output follows the headers Intuit documents and every file is checked by our own test suite for structure and for a balanced double entry, but follows Intuit's documented format is a smaller claim than QuickBooks accepted it, and we would rather say so than imply the larger one. If yours is refused, tell us what QuickBooks said — the error text is the single most useful thing anyone could send us.

Convert my CSV to IIF — free

Or see it work on a sample statement — no file of your own needed.

Sources

Related