QIF to OFX Converter — For software that reads OFX, not QIF

QIF is older than OFX, and some software now reads only the newer format. This writes a QIF's transactions as plain OFX 1.0.2 - the open standard, without the <INTU.BID> tag that makes a file a QFX or a QBO - with each transaction's date, amount, payee and memo, its cheque number where it has one, and an id an importer can match on.

Not the file you need?

A QIF rewritten as plain OFX, for software that no longer reads QIF.

Plain OFX, deliberately

No <INTU.BID>: it belongs in a QFX or a QBO. If you are importing into Quicken or QuickBooks, the QIF to QFX and QIF to QBO converters write the file each of them wants.

One transaction for a split

A QIF split spreads one payment over several categories. OFX has no splits, so the payment is written once, for its own total, and nothing is counted twice.

An id the importer can use

QIF has no transaction id. Each transaction gets a FITID made from its date, description, amount and position, the same every time the same QIF is converted.

What the OFX file contains

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

In your QIFIn the OFXHow
D line<DTPOSTED>Written YYYYMMDD, with the day-month order worked out from the whole file.
T line<TRNAMT>The same signed amount. A split transaction is one <STMTTRN> for its own total.
P, M lines<NAME>, <MEMO>Joined as "PAYEE - MEMO". The first 32 characters go in <NAME>, even where that cuts a word, and the whole text in <MEMO> when it is longer.
N line, if a number<CHECKNUM>, <TRNTYPE>1 to 12 digits, kept, and a payment carrying one is typed CHECK. Other money out is DEBIT and money in is CREDIT.
!Account name<ACCTID>The account's name when the QIF names exactly one, otherwise 000000000. <ACCTTYPE> is always CHECKING.
€, £ and other signs<CURDEF>EUR, GBP and so on, from a sign in the amounts. USD when there is none or only a $, and the preview says so.
L, S, $, A and C linesNot writtenOFX has no field for a category, a split line, an address or the cleared flag.
Nothing<FITID>24 characters made from each transaction's date, description, amount and position.
NothingNo <INTU.BID>Left out: it belongs in QFX and QBO files.
Nothing<LEDGERBAL>0.00, dated the latest transaction: a QIF states no balance against its transactions, and the tag is required.

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: QIF

A made-up QIF with no account block, a payment split across two categories, and a payee and memo longer together than OFX's 32-character <NAME>.

!Type:Bank
D05/04/2026
T1,500.00
PEXAMPLE TENANT RENT RECEIVED
^
D05/09/2026
T-212.35
PSAMPLE SUPERSTORE
MWEEKLY SHOP AND HOUSEHOLD ITEMS
SGroceries
$-160.00
SHousehold
$-52.35
^
D05/18/2026
T-48.00
PFICTIONAL STREAMING & MUSIC
LEntertainment
^

The output: OFX

The whole file. The writer puts everything after the header on one line; line breaks are added here before each transaction so it can be read.

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

<OFX><SIGNONMSGSRSV1><SONRS><STATUS><CODE>0</CODE><SEVERITY>INFO</SEVERITY></STATUS><DTSERVER>20260518120000</DTSERVER><LANGUAGE>ENG</LANGUAGE></SONRS></SIGNONMSGSRSV1>
<BANKMSGSRSV1><STMTTRNRS><TRNUID>1</TRNUID><STATUS><CODE>0</CODE><SEVERITY>INFO</SEVERITY></STATUS>
<STMTRS><CURDEF>USD</CURDEF><BANKACCTFROM><BANKID>000000000</BANKID><ACCTID>000000000</ACCTID><ACCTTYPE>CHECKING</ACCTTYPE></BANKACCTFROM>
<BANKTRANLIST><DTSTART>20260504</DTSTART><DTEND>20260518</DTEND>
<STMTTRN><TRNTYPE>CREDIT</TRNTYPE><DTPOSTED>20260504</DTPOSTED><TRNAMT>1500.00</TRNAMT><FITID>7EC026C9BB19AF8B0E53D294</FITID><NAME>EXAMPLE TENANT RENT RECEIVED</NAME></STMTTRN>
<STMTTRN><TRNTYPE>DEBIT</TRNTYPE><DTPOSTED>20260509</DTPOSTED><TRNAMT>-212.35</TRNAMT><FITID>84A535EA56EF2AACF6091219</FITID><NAME>SAMPLE SUPERSTORE - WEEKLY SHOP</NAME><MEMO>SAMPLE SUPERSTORE - WEEKLY SHOP AND HOUSEHOLD ITEMS</MEMO></STMTTRN>
<STMTTRN><TRNTYPE>DEBIT</TRNTYPE><DTPOSTED>20260518</DTPOSTED><TRNAMT>-48.00</TRNAMT><FITID>AE3213169F20F04202EF2736</FITID><NAME>FICTIONAL STREAMING &amp; MUSIC</NAME></STMTTRN>
</BANKTRANLIST><LEDGERBAL><BALAMT>0.00</BALAMT><DTASOF>20260518</DTASOF></LEDGERBAL>
</STMTRS></STMTTRNRS></BANKMSGSRSV1></OFX>

Questions about converting QIF to OFX

Does GnuCash need an OFX rather than a QIF?

No. GnuCash imports QIF itself, under File, Import, Import QIF, and can map its categories to accounts, which an OFX cannot carry. Convert when the software you are importing into reads OFX and not QIF.

What happens to split transactions?

Each is written once, for the transaction's own total, as a bank's own OFX would show it. The split lines and their categories are not carried, because OFX has no field for either, and the preview says how many there were.

Which currency does the OFX say?

EUR, GBP or another where the QIF's amounts carry €, £ or a similar sign. A $ does not say which dollar, so a file with only $ signs, or none, is written as USD, and the preview says so before you download.

Why is the closing balance 0.00?

A QIF states no balance against its transactions, and <LEDGERBAL> is required in an OFX, so it is 0.00, dated the latest transaction. Nothing is calculated from the transactions to fill it.

Related guides