CSV to OFX Converter — For Xero and GnuCash

A CSV converted to plain OFX, which is the open standard the whole family is built on. Use this when your software asks for OFX rather than for one of Intuit's variants — an OFX carrying Intuit's tags is rejected by some importers just as surely as a QFX without them is rejected by Quicken.

Not the file you need?

The open format — Xero, GnuCash, MoneyWiz and most things that are not Intuit.

Plain OFX, deliberately

No <INTU.BID>. It belongs in a QFX or a QBO and nowhere else, and its presence is enough to make a strict reader refuse the file.

The currency your file names

CURDEF is taken from the symbol or currency code your CSV uses. A file that names no currency is written as US dollars, so check that before importing a statement in anything else.

A period that runs forwards

DTSTART and DTEND are the earliest and latest dates in the file, not the first and last rows. A statement printed newest-first would otherwise declare a period running backwards, which importers treat as covering nothing at all.

What the OFX file contains

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

In your CSVIn the OFXHow
Date<DTPOSTED>Written YYYYMMDD. 13.03.2026 in the same column proves the dates are day first.
Amount (EUR)<TRNAMT>2.750,00 becomes 2750.00: the separators are rewritten to the one form OFX allows, never the value.
Description<NAME>, <MEMO>The first 32 characters in <NAME>; a longer description goes into <MEMO>, up to 96 characters.
"(EUR)" in the headings<CURDEF>The currency the file names, or USD when it names none.
Balance (EUR)<LEDGERBAL>The balance on the latest-dated row.
Not in a CSV<FITID>Made from each row's date, description, amount and position.
Not in a CSVNo <INTU.BID>Left out: it belongs in QFX and QBO files.
Account number above the table<ACCTID>, <ACCTTYPE>The account number where the CSV prints one above its table, otherwise 000000000; always CHECKING. You choose the account when you import.

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

A made-up CSV in the shape a European bank exports: semicolons between fields, commas as decimal points, dates day first and the currency named in the headings.

Date;Description;Amount (EUR);Balance (EUR)
02.03.2026;EXAMPLE GMBH GEHALT;2.750,00;3.410,25
04.03.2026;SAMPLE SUPERMARKT 0815;-67,45;3.342,80
13.03.2026;FICTIONAL STADTWERKE STROM & GAS ABSCHLAG;-1.234,56;2.108,24

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>20260313120000</DTSERVER><LANGUAGE>ENG</LANGUAGE></SONRS></SIGNONMSGSRSV1>
<BANKMSGSRSV1><STMTTRNRS><TRNUID>1</TRNUID><STATUS><CODE>0</CODE><SEVERITY>INFO</SEVERITY></STATUS>
<STMTRS><CURDEF>EUR</CURDEF><BANKACCTFROM><BANKID>000000000</BANKID><ACCTID>000000000</ACCTID><ACCTTYPE>CHECKING</ACCTTYPE></BANKACCTFROM>
<BANKTRANLIST><DTSTART>20260302</DTSTART><DTEND>20260313</DTEND>
<STMTTRN><TRNTYPE>CREDIT</TRNTYPE><DTPOSTED>20260302</DTPOSTED><TRNAMT>2750.00</TRNAMT><FITID>16599F98E41C0780401FBE91</FITID><NAME>EXAMPLE GMBH GEHALT</NAME></STMTTRN>
<STMTTRN><TRNTYPE>DEBIT</TRNTYPE><DTPOSTED>20260304</DTPOSTED><TRNAMT>-67.45</TRNAMT><FITID>62422A17B9E7BC6636F49820</FITID><NAME>SAMPLE SUPERMARKT 0815</NAME></STMTTRN>
<STMTTRN><TRNTYPE>DEBIT</TRNTYPE><DTPOSTED>20260313</DTPOSTED><TRNAMT>-1234.56</TRNAMT><FITID>9EEE7C57AE6906EE1C8A7D39</FITID><NAME>FICTIONAL STADTWERKE STROM &amp; GAS</NAME><MEMO>FICTIONAL STADTWERKE STROM &amp; GAS ABSCHLAG</MEMO></STMTTRN>
</BANKTRANLIST><LEDGERBAL><BALAMT>2108.24</BALAMT><DTASOF>20260313</DTASOF></LEDGERBAL>
</STMTRS></STMTTRNRS></BANKMSGSRSV1></OFX>

Questions about converting CSV to OFX

What is the difference between OFX, QFX and QBO?

They are one format. QFX and QBO add Intuit's <INTU.BID> tag, which Quicken and QuickBooks require. Plain OFX leaves it out, and it is what GnuCash, Xero and most software outside Intuit's ask for.

My CSV uses commas as decimal points. Will the amounts be right?

Yes, where the file's own figures prove it: a figure like 1.234,56 can only be read one way. The separators are rewritten, the value never changes, and the preview says what was done. Where the figures could be read either way, nothing is rewritten.

Does it matter that my CSV uses semicolons?

No. The separator is worked out from the file itself - comma, semicolon, tab or pipe - and the preview names the one it found.

Related guides