← All articles

QBO vs QFX vs OFX vs QIF: which one does your software need?

8 min read

Three of these four are the same underlying format wearing different extensions, and the fourth is thirty years older than any of them. Knowing which is which decides whether your import works.

OFX is the one the others are made of

Open Financial Exchange is a specification for moving financial data between institutions and software. It carries an account, a statement period, and a list of transactions, each with a date, an amount, a type, a description and an identifier. Everything else here is either OFX with something added or a much older format solving the same problem badly.

It exists in two forms. Version 1.x is SGML — a header block of colon-separated lines, then tags that need not be closed. Version 2.x is proper XML and starts with an XML declaration. Both are valid OFX, and software that reads one will not necessarily read the other.

OFXHEADER:100          <- version 1.x, SGML
DATA:OFXSGML
VERSION:102

<?xml version="1.0"?>  <- version 2.x, XML

If you already know your software and just want the answer, the software pages list which format each accounting package accepts along with what goes wrong with each.

QBO and QFX are OFX plus a licence check

Both are Intuit variants. Structurally they are OFX 1.x with one extra tag: INTU.BID, the Intuit Bank ID, which names the financial institution the file came from. QuickBooks and Quicken check that number against Intuit’s list of participating institutions and refuse the file if it is not there.

QBO is for QuickBooks and QFX is for Quicken. They are not interchangeable, and — this catches people — the same bank usually has a different ID for each product. Copying the number out of a QFX into a QBO produces a file that looks right and is rejected.

This is a commercial requirement, not a technical one

Nothing about the transactions needs a bank ID. The tag exists so that Intuit can tell whether the file came from an institution participating in Web Connect. That is why plain OFX, which carries the same data, needs no such number and is accepted by Xero, Sage, MYOB and most other packages.

QIF is the old one, and it is still useful

Quicken Interchange Format predates OFX by years and is barely specified. It is line-oriented: the first character of each line is a field code, records end with a caret, and a header line declares the account type.

!Type:Bank
D03/15/2026
T-45.20
PSHELL OIL
^

It has no institution, no transaction identifiers, and no way to state which order its dates are in. That last one is a genuine hazard, covered separately. But it also has no bank ID requirement, which makes it the format that imports when nothing else will.

Choosing, in one pass

  • QuickBooks Online or Desktop, and you can get your bank’s Intuit ID: QBO. You keep the banking feed and its duplicate detection.
  • Quicken, with the bank ID: QFX. Note it is a different ID from the QBO one.
  • Xero, Sage, MYOB, Wave, Zoho: plain OFX. No bank ID, self-describing dates, no mapping step.
  • Nothing else worked, or the bank is not in Web Connect at all: QIF. It imports almost anywhere, and you give up duplicate detection.
  • You want to look at the data before it goes anywhere: CSV or Excel, then import from there.

What none of them carry

No category, in any useful sense. QIF has a category line and OFX has a loosely-used type field, but neither maps onto your chart of accounts, and importers largely ignore them. Categorisation happens in your accounting software, against accounts it knows about — which is the right place for it.

Related