← All articles

QIF import creates the wrong account type

5 min read

QIF is the least specified format still in daily use. It has no version, no schema, and its account type is declared in one short line that decides where every transaction lands.

The type header

A QIF file opens by declaring what it contains:

!Type:Bank

The common values are Bank for a current or checking account, CCard for a credit card, Cash for petty cash, and Oth A and Oth L for other assets and liabilities. The importer creates or matches an account of that type.

The fix is upstream: set the account type before the file is written so the header matches the account you are importing into, rather than editing it afterwards.

Why the wrong type inverts your signs

A bank account is an asset and a credit card is a liability, so a positive amount means opposite things on each. Import a credit-card statement as !Type:Bank and every charge reads as money coming in.

The totals stay plausible, which is what makes this expensive to find later. Nothing fails; the account simply behaves as though the month went unusually well.

Why a new account appears

Most importers match an existing account by name and type together. A file whose type does not match creates a new account rather than reporting a conflict — so the transactions are not missing, they are in an account you did not expect and may not have noticed.

If transactions have "disappeared" after a QIF import, look at the account list before looking at the file.

The other QIF trap: dates

QIF writes the date on a D line and says nothing about its order. Quicken and most other importers interpret it in the running machine’s locale, so the same file means different things on a US and a UK computer.

There is no in-band fix

Nothing can be added to a QIF file to state the date order. The only defence is knowing which order was written and confirming the importing machine agrees — which is why a converter should tell you which order it used rather than leaving you to infer it.

Fixing a file you already have

  1. 1Open the .qif in a text editor. It is plain text.
  2. 2Change the !Type: line to the correct type.
  3. 3Delete the account created by the bad import, and its transactions, before importing again — otherwise you will have both.
  4. 4Import, and check the sign of the first few transactions against the statement before doing anything else.

The !Account block, and why it helps

A QIF file may open with an account block naming the account the transactions belong to, before the type header:

!Account
NBusiness Current
TBank
^
!Type:Bank

With it, the importer knows which account is meant rather than inferring one from the type. Without it, a file of type Bank imported into a program with three bank accounts goes wherever the importer decides — which is the other route to transactions appearing somewhere unexpected.

Categories, and the bracket convention

The L line carries the category for a transaction. A plain name is a category; a name in square brackets is another account, which makes the entry a transfer rather than income or expenditure.

LOffice Expenses      <- a category
L[Savings Account]    <- a transfer

A converter that writes bracketed values by accident creates transfers to accounts that do not exist, and importers respond by creating them. If unfamiliar accounts appeared after an import, this is worth checking alongside the type header.

Related