A CSV is a handoff, so the bytes are the whole product
Nobody wants a CSV for its own sake. You want it because something else has to read it — YNAB, Wave, Xero, a bookkeeper's template, a script, a spreadsheet in a language that is not English. And every one of those has an opinion about the file that the file itself does not record.
There are four such opinions, and getting any of them wrong produces a file that looks fine and imports wrong:
- The column separator. A comma in most English-speaking places, a semicolon across most of Europe, a tab for a lot of bank templates.
- The decimal mark.
1234.56or1234,56. This is a separate question from the separator, and this page keeps them separate. - The date format. A CSV date is just text. Whatever reads it will apply its own rule, so it has to match.
- The encoding. Accented payee names survive or they do not.
You set all four here before downloading, and the page shows you the actual first lines of the file as you change them — not a rendering of them, the text itself.
Which separator does the program you are feeding want?
| If you are opening it in | Separator | Decimal |
|---|---|---|
| Excel on a US, UK, Australian or Canadian-English system | , comma | . dot |
| Excel in German, French, Spanish, Italian, Portuguese, Dutch, Polish… | ; semicolon | , comma |
| Google Sheets (import dialog, any language) | either — it asks | . dot |
| A bank or bookkeeper template that says “tab delimited” | tab | . dot |
| A script, or anything reading it with a CSV library | , comma | . dot |
Excel takes the separator from your operating system's region setting, not from the file. That is why the same CSV opens in neat columns on one machine and as one long line on another.
The one combination to be careful with
Comma separator plus comma decimals. It is legal — every amount gets wrapped in double quotes so the row still parses — but a surprising number of importers read a quoted number as text and silently give you a column you cannot total. The page warns you when you pick that pair. The usual European combination is a semicolon separator with comma decimals, and it has no such problem.
QIF is one field per line, not a table
This is why a QIF cannot simply be renamed. Each transaction is spread over several lines, one field per line, with a letter at the front saying what the field is and a lone caret ending the record:
!Type:Bank
D01/05/2024
T-45.20
PSHELL
MGAS STATION
LAuto:Fuel
^
Open that in Excel and you get one column containing exactly what you see above. This page reads the structure and gives you one row per transaction, with the fields in real columns. It also has to work out two things the format never states — whether dates are day-first or month-first, and whether a dot or a comma is the decimal mark — and it tells you on screen whether each was proven by your file or guessed before you download anything.
What comes across
- Date, amount, payee, memo and check number. Payee and memo stay in separate columns, because QIF keeps them apart and merging them loses the name.
- Category. The
Lfield, including nested ones likeAuto:Fuel. The class after a slash is dropped, since a column holds one value. - Transfers. A category written as
[Savings]means money moved between your own accounts. Those are counted separately so you can tell them from spending. - Account name, when the file has an
!Accountblock. - Three column layouts, including the exact three-column and four-column shapes QuickBooks Online accepts.
Split transactions are the one thing a CSV cannot carry. A row holds one transaction and one category, so a split comes out as a single line for the total with the category blank. The totals stay right; the breakdown does not. The page lists exactly which transactions were affected rather than letting you find out during a reconciliation.
CSV or Excel? The honest answer is “it depends where it is going”
These are different jobs, and the right choice is decided by the destination, not by which format is better:
| CSV (this page) | Excel (.xlsx) | |
|---|---|---|
| Read by | another program | a person |
| Cell types | not in the file — the reader guesses | stated in the file — no guess |
=SUM() on open | usually works; 0 when the guess is wrong | always works |
| You control | separator, decimal mark, date format, layout | date display only |
| Use it when | something has told you what it wants | you are going to do the arithmetic yourself |
If a person is going to open the file and add things up, convert
to Excel instead — typed cells save you a trip through Data → Text to
Columns. If a program is going to read it, stay here: matching its expected separator and
decimal mark is something an .xlsx cannot do for you.
Questions
Which programs' QIF files does this read?
Quicken, GnuCash, Moneydance, YNAB 4, AceMoney, KMyMoney and Microsoft Money exports all use
the same field letters. Investment transactions (!Type:Invst) are a different
set of fields and are skipped, with a note on screen saying how many.
Why is 2024 showing as 1924?
Quicken writes two digit years and uses an apostrophe rather than a slash to mean the 2000s:
01/05'24 is 2024 while 01/05/24 is 1924. Converters that treat both
the same put a century of your transactions in the wrong place. This one handles the
apostrophe. If you see a wrong century anyway, send us the file.
Accented characters in payee names come out as garbage.
That is Excel guessing the encoding. The file is UTF-8, and a byte order mark is added whenever the data actually contains non-ASCII characters, which is the signal Excel needs. It is deliberately left out when everything is plain ASCII, because a stray byte order mark makes some strict importers read it as part of the first column name.
Some transactions are missing from the download.
The page tells you when that happens and how many, rather than quietly shortening the file. A transaction is left out when it has no readable date or no readable amount. If the count surprises you, the original is worth a look.
Is my file uploaded anywhere?
No. Every converter here runs in the browser, and each page ships a Content Security Policy
with connect-src 'none', so your browser refuses to let the page make any
network request. Watch the Network tab in developer tools while you convert and it stays
empty.
Related
- QIF to Excel converter typed cells, for doing the sums yourself
- IIF to CSV converter QuickBooks Desktop files
- QBO to CSV converter bank downloads
- CSV to QIF converter the other direction