How to convert a bank CSV to an OFX file
OFX (Open Financial Exchange) is the format most accounting software would rather have than a CSV. Every value sits in a named field, so there is no column to map, no ambiguity about which number is the amount, and no guessing whether 03/04 means March or April. If your CSV import keeps failing or keeps landing wrong, converting to OFX removes the part that goes wrong.
🔒 Convert your CSV to OFX now — free, runs in your browser, nothing uploaded.
The steps
- Export a CSV from your bank. Any layout: comma, semicolon or tab separated, and a few junk rows above the headers are fine.
- Drop it into the converter. QBOKit finds the delimiter and the header row, then guesses which columns hold the date, the description and the amount.
- Check the columns it picked — above all whether dates are day-first or month-first. This is the one step worth your attention.
- Choose OFX as the output and download the file.
- Import it in your accounting software's manual statement-import screen.
What an OFX file looks like
OFX 1.x is SGML, not XML, which surprises people who try to open it with an XML parser. One transaction reduces to this:
<STMTTRN>
<TRNTYPE>DEBIT
<DTPOSTED>20260401
<TRNAMT>-82.40
<FITID>20260401X4K2P9
<NAME>DIRECT DEBIT ACME LTD
</STMTTRN>
Note that leaf tags are never closed — only the aggregates like <STMTTRN> are. The date is unambiguous (YYYYMMDD), the sign carries the direction, and the description has its own field. That is the whole reason an OFX import is less fragile than a CSV import.
Which software takes OFX
Xero accepts it. Xero's own help centre publishes Import an OFX, QFX or QuickBooks bank statement and Import a QIF bank statement, so OFX, QFX, QBO, QIF and CSV are all supported routes for a manual statement import. Their article is the place to read Xero's current rules — we deliberately do not restate them here, because those details change and we would rather send you to the source than repeat a stale copy of it.
Importing into QuickBooks? Use QBO instead of OFX. A QBO file is OFX data plus an Intuit-specific header naming the institution, and QuickBooks Desktop's Web Connect import expects that header. For QuickBooks Online, use the cleaned-CSV output and the CSV format requirements.
For anything else, the honest answer is to look at your software's import screen and see whether OFX is offered. It is a widely implemented format, but which variants a given product accepts is something only that product's documentation can tell you.
OFX, QBO or QIF?
| Format | Use it for |
|---|---|
| .OFX | Xero and other accounting software that lists OFX import. No Intuit-specific header. |
| .QBO | QuickBooks Desktop, via Web Connect. Same data as OFX plus FID and INTU.BID. |
| .QIF | Older software and some personal finance tools. Simpler, but carries no transaction ids. |
| Clean CSV | QuickBooks Online and Xero, both of which take CSV directly — they just want a tidy one. |
One practical advantage of OFX over QBO: a plain OFX file has no INTU.BID. That tag is Intuit-specific and exists only in the QBO variant. An OFX file does still carry <ORG> and <FID> naming the institution, but the check that produces QuickBooks' "cannot verify the financial institution" error is part of QuickBooks' Web Connect import, so choosing OFX for a non-QuickBooks target sidesteps it.
Duplicate transactions, and re-importing
Each transaction in an OFX file carries a FITID, a unique id the importing software uses to recognise a transaction it has already seen. QBOKit derives each one from the transaction's own date, amount and description, so converting the same statement twice produces the same ids and an overlapping import is deduplicated instead of doubled.
If you need the opposite — getting transactions back in after deleting them — see why a re-import gets skipped silently and the option that gives every transaction a fresh id.
What we do to your CSV on the way
Most of the work is unglamorous repair of real bank exports:
- Dates sniffed across the whole column, so day-first and month-first files are told apart rather than guessed per row.
1,234.56and1.234,56both read correctly, along with(12.34),12.34-andCR/DRsuffixes.- Separate debit and credit columns merged into one signed amount.
- Preamble rows above the real header skipped; byte-order marks and stray currency symbols stripped.
- Descriptions kept intact: OFX caps
<NAME>at 32 characters, so the full text goes into<MEMO>rather than being truncated away.
Sources
- Import an OFX, QFX or QuickBooks bank statement — Xero Central.
- Import a QIF bank statement — Xero Central.
- Import a bank statement in CSV format — Xero Central.