CSV to QBO
Convert CSV bank statements to QBO for QuickBooks
Drop in a CSV, get a clean QBO file QuickBooks accepts on the first upload. Karchu assigns a unique FITID per transaction, applies your categorization rules, and preserves signs and dates so nothing lands in the wrong column.
- Any CSV layout, no template setup
- Unique FITID per transaction (no duplicates)
- Deterministic rule-based categorization
- Signed amounts and DEBIT/CREDIT correct
- Works with QuickBooks Online and Desktop
- Parses in your browser
How to convert a CSV to QBO, step by step
- Export the CSV from your bank. Log in to your bank's website, open the account, and pick the CSV (or "spreadsheet") download for the date range you need.
- Upload it to Karchu. Create a free account and drop the file into the upload area. Parsing happens in your browser.
- Check the detected columns. Karchu auto-detects the date, description, and amount columns, including debit/credit split columns and running balances. If a column was mapped wrong, you can remap it before importing.
- Review the categories. Your rule set runs on every row, so most transactions arrive pre-coded. Correct anything you want remembered differently.
- Export as QBO. Download the generated file with the account block, FITIDs, and signed amounts already in place.
- Import into QuickBooks. In QuickBooks Online or Desktop, use Banking (or File, Import, Web Connect) and pick the account. The rows land matched to the register, deduplicated on re-import.
Converting statements from your bank
Most banks hand out CSVs that trip generic converters, which is exactly why the column detection matters:
- Chase. Activity exports often put debits and credits in separate columns with a shared description field. Karchu reads the split columns as one signed amount per row.
- Wells Fargo. CSV exports include a running balance column alongside the amount. The converter uses the amount for the transaction and ignores the balance for posting, while keeping signs correct.
- Bank of America. Online Banking can export QBO natively, so if that option is available you may not need a converter. The CSV route is still useful for older accounts, business accounts, or ranges the native export will not cover.
- Other banks and credit unions. Any CSV with a recognizable date, description, and amount works, whether amounts are signed, split, or in a foreign date format.
Common CSV to QBO problems and how the converter handles them
- Duplicate rows on re-import. Generic converters hand every row a blank or reused FITID, so QuickBooks files the same statement twice. Karchu computes a stable FITID from date, amount, and normalized description, so re-imports dedupe automatically.
- Date format mix-ups. DD/MM/YYYY and MM/DD/YYYY look identical until a day over 12 appears. Dates are normalized to the posted-date format QuickBooks expects regardless of the source format.
- Debits recorded as positive numbers. Some banks export outflows as plain positives. The converter derives the sign from the transaction type or the debit/credit column so money out stays negative in QuickBooks.
- Descriptions with commas. Quoted fields with embedded commas parse correctly instead of splitting one row into two.
- Everything lands uncategorized. Because rules run before export, the payee and category you assigned travel into the QBO file rather than being re-decided inside QuickBooks.
Why the CSV import inside QuickBooks is painful
QuickBooks Online accepts CSVs, but the import wizard was built for the lowest common denominator. Every upload asks you to remap columns, pick a date format, and reconcile debits and credits against the account you are posting to. If the source CSV puts debits and credits in separate columns, or uses a running balance column, or quotes descriptions that include commas, the wizard silently misreads rows. On re-import, QuickBooks has no stable per-row identifier, so it either duplicates transactions or asks you to hand-match every entry.
A QBO file solves each of those problems by construction. The account block tells QuickBooks which register the file belongs to. A unique FITID per transaction makes deduplication automatic on re-import. The signed amount and TRNTYPE together tell QuickBooks whether the row is money in or money out, so debits never land in the deposit column by accident. That is why QuickBooks bank feeds ship transactions as QBO under the hood, and it is why a converter that produces QBO is worth building instead of shoehorning CSVs through the import wizard.
How Karchu builds the QBO file
Karchu treats the conversion as three passes. First, CSV parsing detects the column geometry: the date column, the description column, the amount column (or the debit and credit columns), and the running balance column when present. Header detection handles the case where the first data row is a header and the case where the CSV has no header at all. Quoted descriptions with embedded commas parse correctly. Dates are normalized to ISO 8601 regardless of whether the source used DD/MM/YYYY, MM/DD/YYYY, or a locale-specific format.
Second, categorization. The rule engine walks each transaction, matches on merchant name, keyword, or amount range, and assigns the winning category. Because rules are deterministic, the same CSV always produces the same categories, which matters for audit trails and month-over-month reporting. The categorized payee and memo travel with the transaction into the QBO file, so QuickBooks lands the row in the right account instead of leaving it in the Uncategorized bucket.
Third, QBO envelope. Karchu emits an OFX 1.0.3 file with the Intuit header, a signon block, an account-info block populated with your bank ID and account ID, and one STMTTRN entry per transaction. Each STMTTRN carries a FITID computed as a stable hash of date, amount, and normalized description, a DTPOSTED in the required YYYYMMDDHHMMSS format, a TRNAMT with the correct sign, and TRNTYPE of DEBIT or CREDIT derived from the sign. NAME and MEMO carry the payee and description your rules assigned.
The fields that decide whether QuickBooks accepts the file
- BANKID / ACCTID. Identify the register. Wrong values mean QuickBooks refuses to attach the file to any account.
- ACCTTYPE. CHECKING, SAVINGS, or CREDITLINE. Must match the account type in QuickBooks.
- DTSTART / DTEND. Statement range. Wrong ordering causes silent row skipping.
- FITID. Globally unique per transaction. Reuse it and QuickBooks silently ignores the row on re-import.
- TRNTYPE. DEBIT or CREDIT. Wrong sign puts every row in the wrong column.
- DTPOSTED. Posted date in YYYYMMDDHHMMSS format.
- TRNAMT. Signed amount. Debits are negative.
- NAME / MEMO. Payee and description QuickBooks shows in the register.
Categorize before you export
The value of moving to QBO is not just clean imports. It is clean imports into the right accounts. Karchu applies your categorization rules before the QBO is generated, so every transaction lands pre-coded. That shrinks the manual coding step inside QuickBooks to a handful of edge cases each month instead of a full afternoon per statement. Rules are deterministic, so month one and month twelve categorize the same merchant the same way.
Karchu vs generic CSV to QBO converters
Most CSV to QBO converters wrap the CSV in an OFX envelope and stop there. They skip FITID generation (so re-imports duplicate rows), skip categorization (so every transaction lands uncategorized), and skip normalization (so a debit column and credit column produce two entries per row). Karchu handles each of those, and does it without per-file fees or watermarks. If you have been paying per statement or per QBO file, that alone is a reason to switch.
Frequently asked questions
What is a QBO file?
QBO (Web Connect) is the Intuit-flavored OFX file QuickBooks Online and Desktop import natively for bank feeds. It carries the account block, unique transaction IDs (FITID), signed amounts, and posted dates QuickBooks needs to dedupe and post entries automatically.
Why convert CSV to QBO instead of just importing the CSV?
QuickBooks accepts CSVs, but each import forces you to remap columns, resolve date formats, and manually match transactions. A QBO file carries the account ID, a stable FITID per transaction, and the correct DEBIT/CREDIT type, so QuickBooks dedupes on re-import and drops rows straight into the right account without column mapping.
Does Karchu assign FITIDs correctly?
Yes. Karchu computes a deterministic FITID per transaction from the date, amount, and normalized description. Re-importing the same statement never creates duplicates, and overlapping months across statements are deduped automatically.
Which CSV layouts are supported?
Any CSV with recognizable date, description, and amount columns. Karchu detects debit/credit split columns, signed single-amount columns, running-balance columns, and quoted descriptions. There is no per-bank template to configure.
Will the QBO file import into QuickBooks Desktop too?
Yes. The generated QBO conforms to OFX 1.0.3 with the Intuit header block, which both QuickBooks Online and QuickBooks Desktop (Pro, Premier, Enterprise) accept as a Web Connect file.
Can I categorize before exporting?
Yes, and you should. Karchu applies your deterministic rule set to every transaction before the QBO export, so the file QuickBooks receives already carries the category and payee your rules assigned. That cuts the manual coding step inside QuickBooks to a handful of edge cases.
Is my CSV private during the conversion?
Yes. CSV files are parsed entirely in your browser. The extracted transactions are stored only when you deliberately save them into your private vault.
Convert a CSV now
Sign in, drop in the last CSV your bank sent you, and export the QBO. Import it into QuickBooks Web Connect. If the register is cleaner than what you get from any other converter you have tried, keep going.