If you have ever helped a small business owner or bookkeeper import bank statements into QuickBooks, you have probably run into a surprisingly stubborn wall:

  1. QuickBooks Online and Desktop frequently reject .QBO or .QFX files with Error OL-222 or "Unable to verify the Financial Institution".
  2. Native 3-column CSV imports strip out Check Numbers (CHECKNUM), break on multi-line bank summary headers (like Chase or Wells Fargo), and reverse credit card charges on Amex/Citi exports.
  3. Sunsetted QuickBooks Desktop editions (2018–2023) block Web Connect (.QBO) entirely, forcing bookkeepers to use legacy double-entry .IIF files or pay $150–$299/year for old desktop CSV2QBO converter tools.

While building a 100% client-side CSV to .QBO converter that runs entirely in browser memory (zero server uploads), I had to dig through the actual OFX 1.02 SGML and Intuit .IIF specifications. Here are the exact format quirks that cause QuickBooks imports to fail—and how to fix them cleanly.

1. What actually causes QuickBooks Error OL-222?

Despite the .qbo extension, a QuickBooks Web Connect file is an OFX 1.02 SGML document (not strict XML) with an Intuit-specific <INTU.BID> tag injected inside the <SONRS> sign-on block.

Three small syntax issues trigger OL-222 or OL-301 almost every time:

  • Unescaped ampersands (&) in merchant names: A raw payee like AT&T or MARKS & SPENCER inside <NAME> or <MEMO> breaks QuickBooks' SGML parser unless escaped as &amp;.
  • Missing or Quicken-only <INTU.BID>: When you download a .QFX file from a bank or try to convert from Quicken to QuickBooks (.QFX / .OFX to .QBO), renaming .qfx to .qbo fails because QuickBooks validates the <INTU.BID> institution code against its internal whitelist (code 3000 is universally accepted across both QuickBooks Online and supported Desktop editions).
  • Field length truncation: The OFX 1.02 spec limits <NAME> to 32 characters and <MEMO> to 255 characters. Leaving long bank descriptions inside <NAME> either truncates vendor names mid-word or trips older Desktop parsers.
OFXHEADER:100 DATA:OFXSGML VERSION:102 SECURITY:NONE ENCODING:USASCII CHARSET:1252 COMPRESSION:NONE OLDFILEUID:NONE NEWFILEUID:NONE <OFX> <SIGNONMSGSRSV1> <SONRS> <STATUS><CODE>0<SEVERITY>INFO</STATUS> <DTSERVER>20261108120000[0:GMT] <LANGUAGE>ENG <INTU.BID>3000 </SONRS> </SIGNONMSGSRSV1> 

2. Preserving Check Numbers and fixing reversed Credit Card polarity

When a bookkeeper uses QuickBooks' built-in 3-column CSV upload (Date, Description, Amount), QuickBooks drops the Check Number column completely.

By converting the CSV into a structured .QBO <STMTTRN> block instead:

  • Check serials map directly into <CHECKNUM> with <TRNTYPE>CHECK.
  • Clean 32-character vendor names go into <NAME>, while the full 255-character raw description stays intact inside <MEMO>.
  • If an Amex or Capital One CSV exports credit card purchases as positive numbers (+42.50) and payments as negative numbers, flipping the sign polarity before emitting <CREDITCARDMSGSRSV1> prevents purchases from importing backwards as payments.

3. Bypassing the 3-year Web Connect sunset on QuickBooks Desktop with balanced .IIF

Intuit disables .QBO Web Connect Bank Feeds on QuickBooks Desktop after 3 years (affecting Desktop 2018–2023). However, File → Utilities → Import → IIF Files remains a built-in offline Desktop importer.

The catch with .IIF (Intuit Interchange Format) is that it writes directly to the register and requires strict double-entry balance (TRNS + SPL = 0.00) on every single transaction:

!TRNS\tTRNSID\tTRNSTYPE\tDATE\tACCNT\tNAME\tAMOUNT\tDOCNUM\tMEMO !SPL\tSPLID\tTRNSTYPE\tDATE\tACCNT\tNAME\tAMOUNT\tDOCNUM\tMEMO !ENDTRNS TRNS\t1\tCHECK\t10/15/2026\tChase Checking\tOffice Depot\t-142.80\t1042\tOffice supplies SPL\t2\tCHECK\t10/15/2026\tAsk My Accountant\tOffice Depot\t142.80\t1042\tOffice supplies ENDTRNS 

If TRNS and SPL are off by even a cent, QuickBooks throws "Transaction is not in balance". Routing the offset SPL row to Ask My Accountant (or a Suspense account) using a browser-based CSV & .QBO to .IIF converter keeps the bank register balance 100% accurate immediately while grouping uncategorized items in one place for batch reclassification.

If you need to test a messy statement without uploading client banking data to a third-party server, you can preview all parsed rows and export the first 10 transactions for free at BankFilePro.