Convert CSV, QIF, OFX, QBO, and IIF — any direction

Already have a structured export from Quicken, a spreadsheet, or QuickBooks itself? Convert it into the format the next tool needs. Runs entirely in your browser — free, no account, no limits. Starting from a PDF statement instead? Use the PDF converter.

Choose files or drop them here

CSV · Excel · QIF · OFX / QFX · QBO · IIF · drop multiple files to convert them all at once

Used by accountants, bookkeepers, and businesses

Nothing uploaded — runs in your browserNo account needed

Which converter is this

For when you already have a file — not a PDF

This tool bridges structured finance files: a Quicken QIF export, a CSV from a spreadsheet, an OFX or QFX from a bank feed, or a QBO / IIF file you need to open, audit, or move between QuickBooks Online and QuickBooks Desktop. Everything runs locally in your browser — there is no upload, no account, and no limit on how many files you convert.

If your starting point is a PDF bank statement instead, that's a different job — it needs AI to read and structure the transactions first. Use the PDF to OFX converter for that, or the full analyzer for categorization and reporting on top.

Any direction

CSV, Excel, QIF, OFX/QFX, QBO, and IIF all read and write from the same converter — pick the pair you need, no separate page required.

Nothing leaves your device

Parsing and format generation both happen client-side. Useful when the file has real account numbers or balances you don't want on a server.

Stable transaction IDs

OFX/QBO output derives each FITID from the transaction's own date, amount, and payee — so re-converting the same file never creates duplicate imports.

Step by step

How the conversion works

  1. 1

    Pick your input and output format

    Choose what you're starting with (CSV, QIF, OFX/QFX, QBO, or IIF) and what you need (any of the same five). The converter auto-detects the input format from the file content if you skip this.

  2. 2

    Upload the file

    Drag it in or click to browse. Nothing leaves your device — the parsing and conversion both happen in your browser.

  3. 3

    Confirm the preview

    For CSV input, check that date, description, and amount are mapped to the right columns. For every other format, review the transaction count and date range before downloading.

  4. 4

    Download and import

    QuickBooks Online: Banking → Upload transactions. QuickBooks Desktop: File → Utilities → Import. Quicken and GnuCash: File → Import.

CSV to QBO

What a .qbo file actually contains

Have transactions in a spreadsheet and need QuickBooks Online or Desktop? QBO is not its own format — it is OFX. This converter writes OFX 2.1.1 as well-formed XML, the variant QuickBooks parses most predictably. (If you grab a .ofx from the same converter, note it's the older OFX 1.0.2 SGML form instead — same data, different serialisation.)

Worth knowing before you import: the account block is a placeholder. A CSV carries no routing or account number, so the file is written with zeroed identifiers and QuickBooks asks you to pick the target account during upload. That's expected, not a defect. A .qbo import also has no 90-day limit the way a direct bank feed does — you can load 6, 12, or multiple years of history in one file.

Generated .qbo — one transaction, trimmed

<?xml version="1.0" encoding="UTF-8"?>
<?OFX OFXHEADER="200" VERSION="211" SECURITY="NONE"
      OLDFILEUID="NONE" NEWFILEUID="NONE"?>
<OFX>
  <BANKMSGSRSV1>
    <STMTTRNRS>
      <STMTRS>
        <CURDEF>USD</CURDEF>
        <BANKACCTFROM>
          <BANKID>000000000</BANKID>
          <ACCTID>0000000000</ACCTID>
          <ACCTTYPE>CHECKING</ACCTTYPE>
        </BANKACCTFROM>
        <BANKTRANLIST>
          <STMTTRN>
            <TRNTYPE>DEBIT</TRNTYPE>
            <DTPOSTED>20260615</DTPOSTED>
            <TRNAMT>-42.10</TRNAMT>
            <FITID>0GG3EF2</FITID>
            <NAME>TESCO EXTRA 4829</NAME>
            <MEMO>Groceries</MEMO>
          </STMTTRN>
        </BANKTRANLIST>
      </STMTRS>
    </STMTTRNRS>
  </BANKMSGSRSV1>
</OFX>

How your CSV columns land in the QBO file

CSV columnQBO tagNotes
Date<DTPOSTED>Normalised to YYYYMMDD. Confirm the detected order in the preview — 03/04/2026 is unresolvable from one row alone.
Description<NAME>Passed through with XML escaping. Not truncated, so unusually long payee strings stay intact.
Category<MEMO>Optional column. Rows with no category are written as Uncategorized rather than left empty.
Amount<TRNAMT>Written to two decimals, sign preserved. Negative is money out.
— (derived)<TRNTYPE>CREDIT when the amount is zero or positive, DEBIT otherwise. Taken from the sign, not from any CSV column.
— (derived)<FITID>Hashed from date, amount, and payee, so the same transaction always gets the same ID no matter which file it arrives in.
— (placeholder)<BANKID> / <ACCTID>Zeroed. A CSV has no account identity, so you choose the account inside QuickBooks at upload time.

CSV → QBO: import failures and what causes them

Re-importing an overlapping range adds nothing

Why: Working as intended. FITIDs are derived from the transaction itself, so QuickBooks recognises rows it already has and skips them rather than duplicating.

Fix: Nothing to do — overlapping exports are safe. If you genuinely need a transaction twice, it has to be added in QuickBooks by hand.

Every amount has the wrong sign

Why: The CSV used separate Debit and Credit columns with both written as positive numbers, so only one of them got mapped to Amount.

Fix: Map to a column that is already signed, or combine the two columns in the spreadsheet first. Sanity check: your largest outgoing payment should preview as negative.

Dates land a month off

Why: Day/month ambiguity in the source CSV. A file where every day happens to be 12 or lower gives a converter nothing to disambiguate with.

Fix: Check a known transaction in the preview before downloading. Any day above 12 anywhere in the column settles the order for the whole file.

The statement period looks wrong in QuickBooks

Why: Statement-envelope fields — the DTSTART/DTEND range and the ledger balance — are written as placeholders, because a CSV of transactions carries no balances or statement dates.

Fix: Harmless for reconciling transactions, which carry their own real dates. If you need true opening and closing balances, work from the original statement rather than a CSV.

QBO to CSV

Reading a .qbo file as a spreadsheet

Going the other way — auditing a .qbo before it hits QuickBooks, pulling transactions out of a downloaded bank feed file, or prepping data for a reconciliation spreadsheet — is a flattening problem rather than a translation one. A .qbo file is nested: a statement wraps a transaction list which wraps individual <STMTTRN> records. The output is deliberately a plain four-column sheet, one row per transaction.

Both OFX dialects are read: the XML form used by most .qbo files, and the older SGML form where leaf tags are opened but never closed. What does not survive is the statement envelope — opening and closing balances, the statement date range, the account block, and the currency declaration all sit above the transaction rows with nowhere to go in a flat file.

Resulting CSV — one row per STMTTRN

Date,Description,Amount,Category
2026-06-15,TESCO EXTRA 4829,-42.10,Groceries
2026-06-16,ACME LTD SALARY,1850.00,Uncategorized
2026-06-18,RENT JUNE,-1200.00,Uncategorized

QBO tags and the columns they become

QBO tagCSV columnNotes
<DTPOSTED>DateNormalised to YYYY-MM-DD. OFX timestamps carry a time and sometimes a timezone; both are dropped once the date resolves.
<NAME>DescriptionFalls back to MEMO when NAME is absent, then to Unknown if the record has neither.
<MEMO>CategoryUsed only when it differs from the description — a memo that just repeats the payee is not treated as a category.
<TRNAMT>AmountKept signed, so negative is money out. Currency symbols and separators are stripped.
<TRNTYPE>Not carried through. The sign of Amount already gives you the direction.
<FITID> / <CHECKNUM>Dropped in the flatten. Keep the original .qbo if you need FITIDs for deduplication.
<BANKACCTFROM>Account identity sits above the transaction list, so it has no per-row equivalent.
<LEDGERBAL> / <DTSTART>Statement-level fields. No row to attach them to in a flat CSV.

QBO → CSV: what to check after converting

A multi-account file comes out as one undifferentiated list

Why: Every STMTTRN becomes a row regardless of which account block it sat under, and no account column is written.

Fix: Split the .qbo per account before converting, or use the natural date break between accounts to separate the rows afterwards.

Most rows say Uncategorized

Why: Correct behaviour when the source has no MEMO, or its MEMO simply repeats the payee — a repeated value is not promoted to a category.

Fix: Nothing to fix in the file. Raw bank .qbo exports rarely carry categories; the full analyzer derives them from the transactions instead.

Excel mangles the amounts or dates on open

Why: Excel's CSV auto-detection, not the file. It reads locale-dependent dates and can strip leading zeros or reformat negatives as text.

Fix: Import rather than open: Data → From Text/CSV, then set Date and Amount column types explicitly.

Descriptions look truncated or cryptic

Why: OFX caps NAME at 32 characters, so the bank already shortened it before the file was written.

Fix: Nothing in the CSV can restore it. If you need full merchant detail, work from the PDF statement instead of the .qbo.

QIF / OFX / QFX to QBO

QIF is a line format, QBO is a structured one

Migrating a Quicken export, an old Moneydance archive, or an OFX/QFX file from a credit-union feed? QIF predates OFX and stores one letter-prefixed field per line, with ^ ending each record. It carries no account number, no bank ID, and no transaction ID — exactly what a .qbo file requires. The conversion is therefore not a relabelling: the missing identity fields have to be supplied.

This is also why the direction matters. QuickBooks Online dropped QIF import entirely in 2015 and QuickBooks Desktop only accepts it for a subset of account types, so converting to .qbo is usually the only route back in for a Quicken or legacy export. The same input box reads OFX and QFX too — it auto-detects the format from content, not the file extension.

Source .qif — two records

!Type:Bank
D06/15/2026
T-42.10
PTESCO EXTRA 4829
MWeekly shop
LGroceries
N1042
CX
^
D06/16/2026
T1850.00
PACME LTD SALARY
LIncome:Salary
^

QIF field codes and their QBO equivalents

QIF codeQBO tagNotes
D (date)<DTPOSTED>Normalised to YYYYMMDD. QIF dates are the least standardised part of the format — see the gotchas below.
T (amount)<TRNAMT>Already signed in QIF, so the sign carries straight through to two decimals.
P (payee)<NAME>Passed through with XML escaping, not truncated.
M (memo)<MEMO>Where a memo is absent, the category fills this field instead.
L (category)<MEMO>QBO has no category concept — QuickBooks assigns accounts itself on import.
N (cheque / ref number)Dropped. TRNTYPE is derived from the amount sign, so cheques arrive as plain debits.
C (cleared status)Dropped. OFX has no equivalent; QuickBooks treats imported rows as uncleared until matched.
^ (end of record)</STMTTRN>Record separator. A missing final ^ is a common cause of a dropped last transaction.
— (absent in QIF)<FITID>QIF carries no transaction ID, so one is derived from date, amount, and payee — stable across re-conversions.
— (absent in QIF)<BANKID> / <ACCTID>Written as placeholder zeros. You pick the real account inside QuickBooks at upload.

Where QIF conversions go wrong

Dates are shifted or nonsensical after import

Why: QIF has no fixed date format. US Quicken writes M/D/YY, UK builds write D/M/YYYY, and older Quicken uses an apostrophe for post-2000 years — 1/5'26 meaning 5 January 2026.

Fix: Check a known transaction in the preview before downloading. Any day value above 12 anywhere in the file settles the order for the whole file.

Converting the same QIF twice imports it twice

Why: It should not. FITIDs are derived from the transaction content rather than its position, so re-converting the same records produces the same IDs and QuickBooks skips them.

Fix: If duplicates do appear, check whether the payee or date text differs between the two exports — a changed description is a different transaction as far as the hash is concerned.

Split transactions collapse into a single line

Why: QIF splits use S, E, and $ lines under one record. OFX has no split concept — a .qbo transaction carries one amount.

Fix: The record total is what transfers. Re-split inside QuickBooks after import if you need the breakdown.

Cheque numbers are missing after import

Why: The N field is not carried into the .qbo, and transaction type comes from the amount sign rather than the source record.

Fix: If cheque numbers matter for reconciliation, keep the original .qif alongside and add the numbers in QuickBooks, or reconcile on date and amount.

CSV to IIF

IIF: double-entry, built for QuickBooks Desktop only

IIF (Intuit Interchange Format) is a tab-delimited format Intuit built specifically for QuickBooks Desktop (Pro, Premier, Enterprise) — it is not accepted by QuickBooks Online, which needs CSV or QBO instead. Unlike a CSV import that needs column mapping through a wizard every time, QuickBooks reads an IIF file natively: every transaction gets a TRNS line (the bank side) and a matching SPL line (the category/offset side), mirroring how QuickBooks records double-entry bookkeeping internally.

QuickBooks Desktop has no duplicate detection for IIF imports — unlike QBO output, where FITIDs let QuickBooks skip transactions it already has. Only import each date range once, or clean up duplicates manually afterward.

Generated .iif — two transactions

!TRNS	TRNSID	TRNSTYPE	DATE	ACCNT	NAME	AMOUNT	MEMO
!SPL	SPLID	TRNSTYPE	DATE	ACCNT	NAME	AMOUNT	MEMO
!ENDTRNS
TRNS		CHECK	01/15/2025	Checking	WHOLEFDS MKT #10247	-67.42	Groceries
SPL		CHECK	01/15/2025	Groceries	WHOLEFDS MKT #10247	67.42	Groceries
ENDTRNS
TRNS		DEPOSIT	01/14/2025	Checking	PAYROLL - ACME CORP	2847.63	Income
SPL		DEPOSIT	01/14/2025	Income	PAYROLL - ACME CORP	-2847.63	Income
ENDTRNS

IIF field reference

IIF fieldExampleNotes
TRNSTYPECHECKCHECK for expenses/withdrawals, DEPOSIT for income — derived from the amount sign, not a source column.
DATE01/15/2025MM/DD/YYYY — the standard date format QuickBooks Desktop expects for IIF imports.
ACCNTCheckingDefaults to 'Checking'. Remap during import to match your real Chart of Accounts.
NAMEWHOLEFDS MKT #10247Vendor/payee as it appears on the source file. QuickBooks matches this to existing vendors automatically.
AMOUNT-67.42Negative for expenses, positive for deposits. The SPL line carries the opposite sign to balance the entry.
MEMOGroceriesCategory, carried into the QuickBooks Memo field for filtering and reporting.

CSV → IIF: what to check before importing

QuickBooks Online rejects the file entirely

Why: IIF is exclusive to QuickBooks Desktop. QuickBooks Online has never supported IIF import.

Fix: Use CSV or QBO output instead — both work with QuickBooks Online's 'Upload transactions' flow.

The same date range gets imported twice

Why: QuickBooks Desktop has no automatic duplicate detection for IIF, unlike QBO's FITID-based skip logic.

Fix: Track which date ranges you've already imported, or delete the duplicate transactions manually in the register afterward.

Accounts show up that didn't exist before

Why: Expected. QuickBooks auto-creates any account referenced in the file — 'Checking' for the bank side, category names for the split side — that doesn't already exist.

Fix: Nothing to fix; review the new accounts in your Chart of Accounts and merge or rename them if needed.

Starting from a PDF instead?

Skip the manual step — upload the statement directly

This page assumes you already have a structured file. If your only source is a PDF bank statement, AI reads it, extracts every transaction, categorizes spending, and exports straight to OFX, QBO, CSV, QIF, or IIF — no manual conversion step in between.

Upload a PDF, JPG, or PNG statement — scanned or digital.
Get categorized transactions, not just raw rows.
Export the same five formats this converter reads and writes.
Convert a PDF statement →

File-format conversion on this page is free and runs in your browser — no account, no limits. Pricing below applies to the statement analyzer, for when the source document is a PDF that has to be read and categorized first.

Statement analyzer pricing

Pro

$19/ month

For heavy files and repeat work

  • 200 PDF pages per billing cycle
  • Unlimited visible transactions per report
  • Subscription and recurring charge detection
  • Priority support
Most popular

Business

$49/ month

For lenders, accountants, and teams processing at volume

  • 500 PDF pages per billing cycle, then $0.08/page
  • REST API access with your own keys
  • Unlimited visible transactions per report
  • Priority support
Your file stays privateSecure checkoutCancel subscriptions anytime

Ready?

Upload one statement.
Get the full picture.

No credit card. No account. Drop a PDF and see a categorized preview in 30 seconds.

Try it free →
Try without an accountNo signup30 sec results

FAQ

QuickBooks & Quicken file converter — FAQ