Quicken Interchange Format (QIF): What It Is and How to Use ItQuicken Interchange Format (QIF) is a plain-text file format designed to move financial data between personal finance applications. Introduced by Intuit in the early 1990s, QIF became a widely supported standard for exporting and importing transactions, account lists, categories, and other bookkeeping elements. Although newer formats such as OFX and CSV have largely replaced QIF in many contexts, QIF remains useful for legacy data migration, specific accounting workflows, and situations where a simple human-readable format is preferred.
Why QIF exists and when to use it
QIF was created to make transferring financial data simple and interoperable across different software. Use QIF when:
- You need to migrate older data from legacy tools that only export QIF.
- You want a human-readable representation of transaction data for auditing, troubleshooting, or manual editing.
- A target application supports QIF but not newer formats.
- You need to move category and account structures that some simple CSV exports omit.
QIF is best for: legacy imports/exports, manual edits, and cases where metadata such as categories or memo fields must be preserved in a readable way.
QIF is less ideal for: automated bank feeds, complex investment records, and real-time synchronization — for those, OFX or APIs are better.
QIF file structure — the basics
A QIF file is a text file where each record consists of lines that start with single-letter field identifiers followed by field values. Records are separated by a caret-like delimiter (a single line containing only the character ^) or by the start of the next record type. Each file often begins with a header indicating the account or type of data included.
Common record types and field codes:
- !Type:Bank, !Type:Cash, !Type:CCard, !Type:Inv, etc. — identifies the type of account or transaction block.
- D — Date (various formats, often MM/DD/YYYY or M/D/YYYY).
- T — Amount (positive for deposits, negative for withdrawals).
- P — Payee or transaction party.
- M — Memo or note.
- C — Cleared status (e.g., “C” for cleared, “X” for uncleared).
- L — Category or split category.
- S — Split category (for transactions with multiple categories).
- $ — Split amount (used with S to list split amounts).
- ^ — End of a transaction record.
Example (simple bank transaction):
!Type:Bank D02/14/2025 T-45.67 PCoffee Shop MSnack and drink ^
This example shows a single bank transaction: a $45.67 withdrawal on Feb 14, 2025, with payee “Coffee Shop.”
Dates and numeric formats
- Date formats may vary by locale and application. Typical formats are MM/DD/YYYY, M/D/YYYY, or YYYY-MM-DD. Verify the target app’s expected date format or normalize dates before import.
- Amounts use a period (.) as decimal separator in many implementations; some legacy files may use commas depending on locale. Always check the receiving software’s parsing rules.
- Negative amounts denote withdrawals/expenses; positive amounts denote deposits/income. For credit card files, signs may be inverted depending on the application.
Accounts, headers, and multiple sections
A QIF file can contain multiple account sections. Each account section starts with an account header block. Example:
!Account NMy Checking TBank ^ !Type:Bank D03/01/2025 T-120.00 PRent ^
- The !Account block declares an account (N is name, T is account type).
- The following !Type:Bank block contains transactions for that account.
- Multiple accounts can be declared and transactions provided sequentially in the same file.
Splits and multi-category transactions
To record a transaction split across categories (e.g., groceries and gas), use S and $ lines together. Example:
!Type:Bank D03/05/2025 T-100.00 PStore Purchase SFood:Groceries $-60.00 SAuto:Gas $-40.00 ^
This shows a \(100 transaction split into \)60 groceries and $40 gas.
Importing QIF: common gotchas and tips
- Backup first. Always create backups of both source and destination data before importing/exporting.
- Account types must match. The target application expects the right !Type header; mismatches can cause rejected records or deposits shown as negative balances.
- Category mapping. If the receiving app has different category names, transactions may import as “Uncategorized.” Pre-map categories when possible.
- Date parsing. Normalize dates if you see incorrect dates after import.
- Character encoding. Use UTF-8 for modern apps; some older apps expect ANSI or ASCII. Non-ASCII characters in payees/memos can fail or appear garbled if encoding is wrong.
- Check split totals. Ensure split amounts sum to the transaction total to avoid import errors.
- Some modern financial software (including newer Quicken versions) has limited QIF support — often read-only for older formats or limited to specific account types. For account balancing and investment histories, use the application’s recommended import format if available.
Exporting QIF from applications
Most legacy finance programs and some modern ones offer QIF export as a text or export option. When exporting:
- Choose the correct account type (Bank, CCard, Inv) so the file uses the right !Type header.
- Select the date range you need.
- If you plan to edit the file, export to UTF-8 and open in a plain-text editor that preserves line endings.
- For multi-account exports, check whether the application includes account headers (!Account blocks) or simply appends multiple !Type sections — adjust imports accordingly.
Editing QIF files manually
Because QIF is plain text, you can manually edit entries to fix errors or change categories. Best practices:
- Use a reliable text editor (VS Code, Notepad++, Sublime Text).
- Maintain consistent date/amount formats.
- Do not change the single-letter field identifiers.
- Keep each transaction terminated by ^.
- After edits, import into a test account first to confirm results.
Converting between QIF and other formats
- QIF to CSV: Useful for spreadsheets and bulk edits. Export QIF and write a conversion script or use a converter tool. Take care to map split transactions properly (often expanded into multiple rows).
- QIF to OFX/QFX: More complex; OFX/QFX are XML-based and better suited for bank synchronization and investments. Some conversion tools handle this but may lose split/category metadata.
- CSV to QIF: When generating QIF from CSV, ensure you produce the required field prefixes (D, T, P, etc.) and close transactions with ^. Scripts in Python or small utilities can automate this.
Example Python pseudocode for generating a QIF transaction:
def qif_transaction(date, amount, payee, memo=None, splits=None): lines = [] lines.append(f"D{date}") lines.append(f"T{amount}") lines.append(f"P{payee}") if memo: lines.append(f"M{memo}") if splits: for cat, amt in splits: lines.append(f"S{cat}") lines.append(f"${amt}") lines.append("^") return " ".join(lines)
QIF and investments
Investment (Inv) QIF records are tricky. Basic QIF supports buy/sell transactions and basic investment activity, but modern broker statements include complex events (dividends, splits, option exercises, cost basis adjustments) that QIF may not represent fully. For robust investment histories and accurate basis reporting, prefer OFX/QFX or broker-provided CSVs designed for tax reporting.
Tools and utilities
There are many third-party tools and scripts for converting, validating, and editing QIF files. Look for utilities that:
- Validate the QIF structure and field order.
- Map categories between systems.
- Convert to/from CSV, OFX, QFX.
- Preserve splits and memos.
Open-source libraries exist in languages like Python, Ruby, and Java; choose one that matches your environment.
Troubleshooting checklist
- Transaction dates wrong: adjust date format or locale.
- Amount signs reversed: check whether the account type (Bank vs. CCard) expects inverted signs.
- Uncategorized items: pre-map categories or edit payee/category names to match the target app.
- Import fails on line X: inspect the record around that line for missing ^, malformed field code, or invalid characters.
- Duplicate transactions: deduplicate before import, or use target app’s import options to match on date/amount/payee.
Security and privacy notes
QIF files contain sensitive financial information. Treat them like any sensitive data:
- Store exports securely and delete when no longer needed.
- Transmit over secure channels if sharing with a trusted party.
- Remove unnecessary account numbers or personal identifiers before sharing.
Conclusion
QIF is a simple, human-readable legacy format for exchanging financial data, useful when migrating older data or when interoperable plain-text exports are needed. It’s not always the best choice for modern bank synchronization or detailed investment records, but with careful handling — correct headers, proper date/amount formats, and attention to splits and encoding — QIF remains a practical tool for many personal finance workflows.
If you want, I can:
- Convert a sample CSV to QIF for your use.
- Validate or fix a QIF file you have.
- Provide a downloadable example QIF tailored to your account types.
Leave a Reply