What QIF is, and why it fights you
QIF stands for Quicken Interchange Format. It’s what old Quicken versions, plus a surprising number of banks, still spit out. Open one in a text editor and you get D6/14'26 on one line, T-42.50 on the next, and a lone ^ marking where a transaction ends. Each line is a single-letter code plus a value. Human-readable? Barely. Spreadsheet-friendly? Not at all.
That’s the gap this fills. Paste the QIF text on the left and a proper CSV table comes out on the right, one row per transaction, with named columns you can sort and filter. It re-parses as you type, so you can fix a stray line and watch the output update live.
What each field code becomes
QIF packs everything into terse codes. Here’s the mapping the parser uses:
- D is the date. Quicken’s date format is genuinely awful, so it gets normalized to
YYYY-MM-DDwhere possible. ThatD6/14'26becomes2026-06-14, apostrophe and all. - T and U both carry the amount. They’re duplicates in Quicken’s own files, so whichever is present fills the Amount column. Thousands separators like
1,200.00get cleaned up. - P is the payee, the store or person on the transaction.
- L is the category. Transfers wrapped in
[brackets]come through untouched so you can spot them. - M is the memo or note.
- C is the cleared flag. A
*orcreads as “Cleared”, anXorRreads as “Reconciled”, and blank stays blank. - N is the check or reference number, dropped into its own column.
Two more columns sit in front: Account and Type. When a file bundles several registers (a !Type:Bank block, a !Type:CCard block, a !Type:Cash block) each row carries the account name from its !Account header and the register type, so a multi-account export never blends into one undifferentiated list.
Split transactions get their own treatment. A record with S/E/$ legs comes out as the parent row plus one child row per split, each tagged in the Split column and repeating the parent’s date and payee as a reference. So a $88.20 hardware run that’s half garden, half tools shows all three lines and still totals once. Address lines (A) aren’t columns here and are skipped.
Things to watch out for
Dates are the part most converters get wrong. QIF usually uses US month-first ordering, and Quicken marked 2000s years with an apostrophe instead of a four-digit year. So 6/14'26 is June 14, 2026, not the 6th of something. Two-digit years without an apostrophe pivot at 70: 69 reads as 2069, 70 reads as 1970. But plenty of European exports run day-first, and 03/05/2024 is genuinely ambiguous. So there’s a date-format control: leave it on Auto and the parser reads the whole file for a day above 12 to lock the order, or force US or EU yourself. Whatever it picks, it applies to every row so the ordering stays consistent. If a date can’t be a real date in that order, it’s passed through as-is instead of being silently corrupted.
Amounts keep their sign, and the sign is read whether the file writes it as -12.34 or in accounting parentheses like (12.34). Thousands separators and decimals are normalized across both US (1,234.56) and European (1.234,56) grouping. The CSV follows RFC 4180 quoting too, so a payee like Netflix, Inc. with a comma in it gets wrapped in quotes and won’t split across two columns when Excel opens it. You can switch the delimiter to semicolon or tab and add a UTF-8 BOM for Excel if you need to.
Messy files happen. A record missing its date and amount, or a trailing block with no closing ^, gets noted in an amber box above the output instead of crashing the whole conversion. You still get every valid transaction, plus a short list of what looked off.
Nothing gets uploaded. The parsing runs in JavaScript on your machine, which matters when the file is your actual bank history with payees and balances in it.
FAQ
My bank exported QIF instead of CSV. Will this work?
Almost certainly. Banks that offer QIF use the same D/T/P/L codes Quicken does. Paste the file contents and check that the dates and amounts look right.
Why is the date format different from my file?
It’s normalized to YYYY-MM-DD so spreadsheets sort it correctly. Quicken’s M/D'YY format sorts alphabetically, which scrambles the order. If a date can’t be parsed, it’s left exactly as written.
Are split transactions handled?
Yes. A split comes out as the parent row plus one row per split leg, each marked in the Split column and repeating the parent’s date and payee so you can see which transaction it belongs to. The parent keeps the top-level total, and the running total only counts it once, so the splits are detail without double-counting.
Does it open the .qif file directly?
Not yet. QIF is plain text, so open it in any editor, copy everything, and paste it in. Takes a few seconds.
What does the Cleared column mean?
It reflects QIF’s C flag. * or c means the transaction cleared the bank; X or R means you reconciled it against a statement. Blank means neither was set.
Is my financial data sent anywhere?
Nope. Everything stays in your browser. No server, no upload, no logging, so it’s fine for real account exports.