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?
- Have a .qfx rather than an .ofx: QFX to IIF Converter
- QuickBooks Online does not import IIF: OFX to QBO Converter
- Starting from a bank CSV: CSV to IIF Converter
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 OFX | In the IIF | How |
|---|---|---|
| <DTPOSTED> | DATE | Written MM/DD/YYYY. |
| <TRNAMT> | TRNSTYPE, AMOUNT | Money 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, MEMO | The 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> | DOCNUM | Up to 11 characters. A longer id goes at the end of MEMO, after "Ref", rather than being cut. |
| <CURDEF> | ACCNT on TRNS | In the placeholder, "*** SET BANK ACCOUNT (CAD) ***" for a CAD file, since IIF has no currency field. Replace it with your bank account's name. |
| Nothing | ACCNT on SPL | "*** SET CATEGORY ACCOUNT ***", for the account the other side belongs in. |
| <ACCTID>, <BANKID> | Not written | IIF names an account, not an account number: the account is the one you put in ACCNT. |
| <LEDGERBAL> | No balance | IIF carries no balance. The preview states the OFX's closing balance, to check the register against after importing. |
| Nothing | TRNSID, SPLID | Left 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
ENDTRNSQuestions 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.