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.