OFX to IIF Converter — Bank OFX to QuickBooks Desktop

Your bank gives you an OFX and your books are in QuickBooks Desktop. Its Web Connect import wants a QBO; its IIF import takes a file like this one, and posts each transaction straight into the register. The OFX's dates, amounts, payees and cheque numbers come across, and the two account names are left for you to set.

Not the file you need?

For QuickBooks Desktop, which takes an IIF straight into the register.

The currency kept where IIF can hold it

An IIF transaction has no currency field, so the OFX's <CURDEF> rides in the bank-account placeholder - "*** SET BANK ACCOUNT (CAD) ***" for a Canadian-dollar file - to be checked when you replace it.

Short ids in the Num field

The cheque number, or the bank's FITID where there is none, goes into DOCNUM when it fits the 11 characters QuickBooks keeps there, and onto the end of the memo when it does not.

Nothing posted to a guessed account

The other side of each transaction goes to *** SET CATEGORY ACCOUNT ***, not to an expense account picked for you. QuickBooks creates any account an IIF names, so a guess would import without complaint.

What the IIF file contains

Field by field, where each part of the download comes from.

In your OFXIn the IIFHow
<DTPOSTED>DATEWritten MM/DD/YYYY.
<TRNAMT>TRNSTYPE, AMOUNTMoney out is CHECK, negative on the bank line, whatever <TRNTYPE> said; money in is DEPOSIT, positive. The SPL line carries the opposite sign.
<NAME>, <MEMO>NAME, MEMOThe two joined. NAME holds the first 41 characters, the most a QuickBooks name holds, even where that cuts a word; MEMO holds the whole description, up to 96 characters.
<CHECKNUM>, else <FITID>DOCNUMUp to 11 characters. A longer id goes at the end of MEMO, after "Ref", rather than being cut.
<CURDEF>ACCNT on TRNSIn the placeholder, "*** SET BANK ACCOUNT (CAD) ***" for a CAD file, since IIF has no currency field. Replace it with your bank account's name.
NothingACCNT on SPL"*** SET CATEGORY ACCOUNT ***", for the account the other side belongs in.
<ACCTID>, <BANKID>Not writtenIIF names an account, not an account number: the account is the one you put in ACCNT.
<LEDGERBAL>No balanceIIF carries no balance. The preview states the OFX's closing balance, to check the register against after importing.
NothingTRNSID, SPLIDLeft empty, so QuickBooks numbers the transactions itself.

Sample output

Made by this converter's own code from the made-up file shown. The output is the file it writes, not retyped.

The input: OFX

A made-up OFX from a Canadian account in CAD, with a cheque and the bank's own short transaction ids.

OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE

<OFX>
<SIGNONMSGSRSV1><SONRS><STATUS><CODE>0<SEVERITY>INFO</STATUS><DTSERVER>20260421120000<LANGUAGE>ENG</SONRS></SIGNONMSGSRSV1>
<BANKMSGSRSV1><STMTTRNRS><TRNUID>1<STATUS><CODE>0<SEVERITY>INFO</STATUS>
<STMTRS><CURDEF>CAD
<BANKACCTFROM><BANKID>000000000<ACCTID>00412345678<ACCTTYPE>CHECKING</BANKACCTFROM>
<BANKTRANLIST><DTSTART>20260403<DTEND>20260421
<STMTTRN><TRNTYPE>CREDIT<DTPOSTED>20260403<TRNAMT>1450.00<FITID>90000417<NAME>EXAMPLE CO PAYROLL</STMTTRN>
<STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20260408<TRNAMT>-73.18<FITID>90000418<NAME>SAMPLE HARDWARE STORE #31</STMTTRN>
<STMTTRN><TRNTYPE>CHECK<DTPOSTED>20260414<TRNAMT>-900.00<FITID>90000419<CHECKNUM>208<NAME>CHECK 208</STMTTRN>
<STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20260421<TRNAMT>-118.40<FITID>90000420<NAME>MADE-UP INSURANCE CO</STMTTRN>
</BANKTRANLIST>
<LEDGERBAL><BALAMT>2690.32<DTASOF>20260421</LEDGERBAL>
</STMTRS></STMTTRNRS></BANKMSGSRSV1>
</OFX>

The output: IIF

The whole file.

!TRNS	TRNSID	TRNSTYPE	DATE	ACCNT	NAME	CLASS	AMOUNT	DOCNUM	MEMO
!SPL	SPLID	TRNSTYPE	DATE	ACCNT	NAME	CLASS	AMOUNT	DOCNUM	MEMO
!ENDTRNS
TRNS		DEPOSIT	04/03/2026	*** SET BANK ACCOUNT (CAD) ***	EXAMPLE CO PAYROLL		1450.00	90000417	EXAMPLE CO PAYROLL
SPL		DEPOSIT	04/03/2026	*** SET CATEGORY ACCOUNT ***	EXAMPLE CO PAYROLL		-1450.00	90000417	EXAMPLE CO PAYROLL
ENDTRNS
TRNS		CHECK	04/08/2026	*** SET BANK ACCOUNT (CAD) ***	SAMPLE HARDWARE STORE #31		-73.18	90000418	SAMPLE HARDWARE STORE #31
SPL		CHECK	04/08/2026	*** SET CATEGORY ACCOUNT ***	SAMPLE HARDWARE STORE #31		73.18	90000418	SAMPLE HARDWARE STORE #31
ENDTRNS
TRNS		CHECK	04/14/2026	*** SET BANK ACCOUNT (CAD) ***	CHECK 208		-900.00	208	CHECK 208
SPL		CHECK	04/14/2026	*** SET CATEGORY ACCOUNT ***	CHECK 208		900.00	208	CHECK 208
ENDTRNS
TRNS		CHECK	04/21/2026	*** SET BANK ACCOUNT (CAD) ***	MADE-UP INSURANCE CO		-118.40	90000420	MADE-UP INSURANCE CO
SPL		CHECK	04/21/2026	*** SET CATEGORY ACCOUNT ***	MADE-UP INSURANCE CO		118.40	90000420	MADE-UP INSURANCE CO
ENDTRNS

Questions about converting OFX to IIF

Can QuickBooks Desktop import an OFX file?

Not as it is. Its Web Connect import reads a QBO - OFX with Intuit's <INTU.BID> tag and a .qbo name - and its IIF import, under File, Utilities, Import, IIF Files, reads an IIF. This page makes the IIF.

Which currency does the IIF use?

The account's. An ordinary IIF transaction has no currency field, so the amounts post in the currency of the QuickBooks account you name. The OFX's currency is in the placeholder, such as *** SET BANK ACCOUNT (CAD) ***, so you can check the two match before replacing it.

Will importing the IIF twice duplicate transactions?

Yes. An IIF carries no id QuickBooks matches on - the bank's FITID goes into the Num field or the memo, and QuickBooks checks neither - so a second import enters everything again. Back up the company file and import it once.

What happens to ATM, POS and transfer types?

Each becomes CHECK when money went out and DEPOSIT when it came in, the two types this file uses on a bank register. The OFX's own type name is not written.

Related guides