From bank rows to QIF
CSV to QIF: bank transactions for Quicken and GnuCash
QIF is simple enough to build from a CSV, and easy to get quietly wrong. Here's how the conversion works, where it breaks, and how to get a QIF whose rows tie to the bank statement.
- Typed Bank or CCard
- Date order settled before writing
- Cheque numbers kept
- Checked against the statement
!Type:BankD03/02/2026T4,210.00PACH DEPOSIT STRIPE PAYOUT^D03/05/2026T-1,250.00N1042PCHECK #1042^
The short answer
How to convert a CSV to QIF
To convert a CSV to QIF, each CSV row becomes a QIF transaction block under a !Type:Bank (or !Type:CCard) header: a D line for the date, T for the signed amount, P for the payee, M for the memo, N for the cheque number, and a caret (^) to close the transaction. VouchRow builds that QIF from your bank's PDF statement for the same period rather than from the CSV, so the date order is settled and every row is checked against the statement's balances before the file is written.
The format is simple; the traps are the date and the sign. A bank CSV may write dates day-first or month-first, and QIF has no way to say which it uses. The importing program guesses from your computer's settings, so 03/04 can land in the wrong month without any warning. A CSV with separate debit and credit columns, or unsigned amounts, has to be turned into one signed amount per row, or deposits import as withdrawals.
Step by step
Getting a QIF for the period your CSV covers
- 1Check whether you need QIFGnuCash imports CSV directly with File → Import → Import Transactions from CSV. If your program reads OFX, use that instead: it has transaction IDs and unambiguous dates. QIF is for software that reads nothing newer, or Quicken with no bank ID.
- 2Download the PDF statementsFrom online banking, download the statement PDFs covering the dates in your CSV.
- 3Upload and reviewSign in and upload the PDFs. Each row is checked against the running balance and totals, and the statement's date order is decided once from every date on it.
- 4Export QIFChoose QIF. The file is typed Bank or CCard to match the statement, with dates written month-first.
- 5Import and check the datesIn Quicken for Windows: File → File Import → QIF File. In GnuCash: File → Import → Import QIF. Then compare the first few dates and the ending balance with the statement.
Why it works
Why start from the statement
Dates resolved, not passed along
The statement's date order is decided from every date on it together, so ambiguous dates aren't guessed one at a time.
Rows that tie
Every row is checked against the statement's balances. A CSV has no balances to check against.
Signs from the bank's columns
Money in and out comes from the statement's debit and credit columns and markers, written as one signed amount.
Cheque numbers in N
Cheque and reference numbers land in QIF's N field, where Quicken and GnuCash expect them.
Checked before export
A misread digit is caught on its own row
Every conversion is tested against the statement: the running balance on every row, page subtotals, opening plus movement against closing, the printed credit and debit totals, and the transaction count. When a number does not add up, VouchRow names the row and highlights the line it came from on the PDF.
Arithmetic only: it verifies amounts, balances and totals, not descriptions or dates, and two errors that cancel out would pass. The source-line link covers the rest.
How the checks workRunning balance check
- POS AMAZON MKTPLACE−86.4316,604.12
- CHECK #1042−1,250.0015,354.12
- ZELLE FROM J MORALES+640.0015,994.12
Every row agrees with the balance printed beside it.
The format
From CSV columns to QIF lines
A CSV row has columns. A QIF transaction has lines, each starting with a code letter. This is how the usual bank CSV columns map across:
| CSV column | QIF line | Notes |
|---|---|---|
| (none) | !Type:Bank or !Type:CCard | Once, at the top. CCard for credit card accounts |
| Date | D | No date order is stated, so the importer's locale decides |
| Amount, or Debit and Credit | T | One signed amount: negative out, positive in |
| Payee or Description | P | Shown as the transaction title in Quicken |
| Description (if different) | M | The memo; line breaks must be flattened |
| Cheque number / Reference | N | Cheque or reference number |
| (end of row) | ^ | Closes the transaction |
By hand
Converting CSV to QIF in a spreadsheet
For a small, one-off file you can build a QIF in Excel. Put the transactions in columns, add a formula column that produces the QIF lines for each row (for example the text "D" followed by the date formatted as mm/dd/yyyy, then "T" followed by the amount, then "P" followed by the description, then "^"), copy the result into a plain-text file under a !Type:Bank line, and save it with a .qif extension.
Watch three things. Format dates explicitly with TEXT(), or Excel writes them however your locale prefers. Remove thousands separators from amounts and make sure withdrawals are negative. And strip line breaks from descriptions, because QIF has no escaping: a line break inside a value is read as a new field. After importing, check the ending balance against the bank's figure, because nothing in the process does that for you.
Dates
The date problem in CSV to QIF conversion
A bank CSV may write 03/04/2026 meaning 3 April. A QIF line D03/04/2026 will be read as 4 March by Quicken on a US-configured machine. Nothing fails, and dates up to the 12th of each month silently move. Dates after the 12th are often rejected or skipped, which looks like a few missing transactions rather than a format problem.
Converting from the statement avoids the guess. The order is decided once for the whole statement from every date on it. If any day is above 12 the order is certain, and otherwise the statement period settles it. The QIF is then written month-first, the order Quicken's US versions expect. If your program reads day-first and you can't change that, use OFX, whose YYYYMMDD dates can't be misread.
Limits
What QIF can't do
QIF carries no transaction IDs, so importing the same period twice creates real duplicates. Quicken for Windows also restricts importing QIF into checking, savings and credit card accounts on many versions, where QFX is the expected format. If your software accepts OFX or QFX, either is a better choice than QIF. Use QIF where it's the only option.
Side by side
CSV vs QIF vs OFX for desktop finance software
| CSV | QIF | OFX | |
|---|---|---|---|
| Field meanings stated in the file | Only in headers, if present | Yes, by line code | Yes, by tag |
| Date order stated | No | No | Yes |
| Transaction IDs | No | No | Yes |
| Account type | No | Bank or CCard | Bank or credit card |
| Read by Quicken, GnuCash, Moneydance | Varies | Yes, with Quicken's limits | GnuCash and Moneydance; Quicken wants QFX |
Who uses it
Who converts CSV to QIF
Quicken users without a bank ID
The bank offers a CSV but no Quicken download. QIF from the statement is the way in, within Quicken's limits.
GnuCash and Moneydance users
People who prefer QIF's fixed structure to setting up a CSV column mapping for every bank.
Older desktop accounting software
Programs that read QIF and nothing newer, fed from statements that tie to their closing balances.
FAQ
CSV to QIF: bank transactions for Quicken and GnuCash: questions
How do I convert a CSV to QIF?
Each CSV row becomes a QIF block of D (date), T (amount), P (payee), optional M (memo) and N (cheque number) lines, closed by ^, under a !Type:Bank or !Type:CCard header. VouchRow writes that QIF from the bank's PDF statement for the same period, with every row checked first.
Do you accept CSV files as input?
No. The converter reads PDF bank and credit card statements, digital or scanned. Upload the PDF statements for the dates in your CSV and export QIF.
How do you know which date order the statement uses?
From every date in it together, not row by row. If any day is above 12, the order is settled outright; otherwise the statement period decides it. The QIF is then written month-first.
Why are my dates wrong after importing a QIF?
QIF doesn't state its date order, so the importing program reads it using your system locale. A day-first file read month-first shifts dates up to the 12th and rejects the rest. Check the first imported dates, or use OFX.
Can I convert Excel to QIF?
By hand, with a formula column that builds the QIF lines, as described above. Or convert the PDF statement the spreadsheet came from straight to QIF here.
Can Quicken import a CSV directly?
Quicken's CSV import is limited and varies by version. QFX is what Quicken expects for bank and card accounts, and QIF works within Quicken's restrictions.
QIF or OFX?
OFX whenever your software accepts it: it carries transaction IDs and unambiguous dates. QIF for software that reads nothing newer.
Keep going
Related guides and converters
Get a QIF that ties to the statement
Create an account, upload the PDF statements for the period and export QIF, with every row checked against the statement first. QIF is included from Starter at $15 a month for 300 pages.