CSV to QFX Converter — For Quicken
A CSV in, a Quicken-ready QFX out. Quicken is the strictest thing you are likely to import into — it checks the file's structure before it looks at a single transaction — so the output is written to the 1.0.2 specification rather than renamed from something close to it.
Not the file you need?
- MYOB or older Quicken that asks for QIF: CSV to QIF Converter
- QuickBooks rather than Quicken: CSV to QBO Converter
Quicken will not import a CSV. QFX is the format it was built to read.
Written for Quicken, not adapted
QFX is OFX with Intuit's own extensions, and Quicken refuses a file missing them. It is not enough to rename an OFX.
Dates that survive the crossing
Quicken reads dates as YYYYMMDD and nothing else. Whatever order your CSV wrote them in is worked out from the file and converted once.
Encoded the way the header claims
The file declares CHARSET:1252 and is written in it, so an accented payee arrives as itself. Writing UTF-8 under that declaration is how a name turns into mojibake inside Quicken.
What the QFX file contains
Field by field, where each part of the download comes from.
| In your CSV | In the QFX | How |
|---|---|---|
| Date | <DTPOSTED> | Written YYYYMMDD, with the day-month order taken from the file's own dates. |
| Withdrawals, Deposits | <TRNAMT> | One signed figure, money out negative. A deposit column counts even when its only figure is on the first row. |
| Transaction | <NAME>, <MEMO> | The first 32 characters in <NAME>; a longer description goes into <MEMO>, up to 96 characters. |
| "(CAD)" in the headings | <CURDEF> | The currency the file names. USD when it names none, and the preview says so. |
| Balance | <LEDGERBAL> | The balance on the latest-dated row. |
| Not in a CSV | <INTU.BID> | 3000, the id Intuit registered for Wells Fargo - a common stand-in when a file names no bank - so the import may be labelled with that bank's name. Quicken refuses a QFX with none. |
| Not in a CSV | <FITID> | Made from each row's date, description, amount and position, the same every time the file is converted. |
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 Canadian bank exports: dates written year first, money out and money in in separate columns, and the currency named in the headings.
Date,Transaction,Withdrawals (CAD),Deposits (CAD),Balance (CAD)
2026-03-02,EXAMPLE CO PAYROLL DEPOSIT,,1850.00,2306.90
2026-03-06,SAMPLE HARDWARE STORE #118,43.10,,2263.80
2026-03-13,FICTIONAL MOBILE WIRELESS AUTOPAY MARCH,62.99,,2200.81
2026-03-20,TRANSFER TO SAVINGS 0000,200.00,,2000.81The output: QFX
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>20260320120000</DTSERVER><LANGUAGE>ENG</LANGUAGE><INTU.BID>3000</INTU.BID></SONRS></SIGNONMSGSRSV1>
<BANKMSGSRSV1><STMTTRNRS><TRNUID>1</TRNUID><STATUS><CODE>0</CODE><SEVERITY>INFO</SEVERITY></STATUS>
<STMTRS><CURDEF>CAD</CURDEF><BANKACCTFROM><BANKID>000000000</BANKID><ACCTID>000000000</ACCTID><ACCTTYPE>CHECKING</ACCTTYPE></BANKACCTFROM>
<BANKTRANLIST><DTSTART>20260302</DTSTART><DTEND>20260320</DTEND>
<STMTTRN><TRNTYPE>CREDIT</TRNTYPE><DTPOSTED>20260302</DTPOSTED><TRNAMT>1850.00</TRNAMT><FITID>345BEC309D0C942DF81F382A</FITID><NAME>EXAMPLE CO PAYROLL DEPOSIT</NAME></STMTTRN>
<STMTTRN><TRNTYPE>DEBIT</TRNTYPE><DTPOSTED>20260306</DTPOSTED><TRNAMT>-43.10</TRNAMT><FITID>07B6BDC865C113B387DE74F4</FITID><NAME>SAMPLE HARDWARE STORE #118</NAME></STMTTRN>
<STMTTRN><TRNTYPE>DEBIT</TRNTYPE><DTPOSTED>20260313</DTPOSTED><TRNAMT>-62.99</TRNAMT><FITID>662EFEED3D3927C65D6D7180</FITID><NAME>FICTIONAL MOBILE WIRELESS AUTOPA</NAME><MEMO>FICTIONAL MOBILE WIRELESS AUTOPAY MARCH</MEMO></STMTTRN>
<STMTTRN><TRNTYPE>DEBIT</TRNTYPE><DTPOSTED>20260320</DTPOSTED><TRNAMT>-200.00</TRNAMT><FITID>6705E035BA086F3647DE493B</FITID><NAME>TRANSFER TO SAVINGS 0000</NAME></STMTTRN>
</BANKTRANLIST><LEDGERBAL><BALAMT>2000.81</BALAMT><DTASOF>20260320</DTASOF></LEDGERBAL>
</STMTRS></STMTTRNRS></BANKMSGSRSV1></OFX>Questions about converting CSV to QFX
Why does Quicken say my QFX is not a valid Web Connect file?
Quicken checks the file before reading any transaction, and says the same thing whatever it found: most often a missing <INTU.BID>, a header that is not OFX 1.0.2, or a character set the bytes do not match. This file has an INTU.BID, the 1.0.2 header, and is written in the Windows-1252 its header declares.
Which currency does the QFX say?
The one your CSV names, in a heading such as "Withdrawals (CAD)" or beside its amounts. A file that names none is written as US dollars, and the preview tells you so before you download it.
Can I import the same QFX twice?
Each transaction's FITID is the same every time the same CSV is converted, and Quicken does not add a transaction whose FITID it has already downloaded to that account. A different export of overlapping dates gets different ids for the overlap, so convert each period once.
Why might Quicken still refuse the QFX?
Quicken checks every Web Connect file online before importing it: it needs an active Quicken subscription, and the bank id in <INTU.BID> must belong to a bank that offers Quicken downloads. A CSV names no bank, so this file carries 3000, Wells Fargo's id.