VouchRow

Browser tool · nothing is uploaded

QBO file validator: check a .qbo before importing

Open a .qbo, .qfx or .ofx file and the QBO file validator checks what QuickBooks and Quicken read: the header, the Intuit bank ID, the account, the statement dates and every transaction’s FITID, date and amount. Each problem comes with a plain explanation and the fix.

  • Runs in your browser; nothing is uploaded
  • OFX 1.x (SGML) and 2.x (XML)
  • Duplicate FITIDs and bad dates flagged by row
  • Account number shown as the last four digits
Importing into
Read in this browser, never uploaded

Drop a .qbo, .qfx or .ofx file here

The file is opened by this page, on your device. Nothing is sent anywhere.

What a QBO file validator looks for

A .qbo file is an OFX bank statement with a few Intuit tags added. QuickBooks reads it in a fixed order: the header, the signon block that names the bank, then the statement with its account, date range, transactions and closing balance. When any of those is missing or malformed, the import fails, often with a message that blames the bank or the connection.

Intuit’s own troubleshooting article for Web Connect puts these failures down to things like “incomplete bank files or incompatible formats”, and suggests trying the import in a test company file to see whether the problem is the file. A validator answers that question first, without touching your company file.

The checks follow the OFX specification (version 2.0.2, which also documents the 1.x header) for structure, field names and formats, and Intuit’s help pages for what QuickBooks does with duplicate IDs and how large an upload to QuickBooks Online can be.

How to validate a .qbo file before importing

  1. 1Choose what you are importing into: QuickBooks, Quicken or another OFX reader. Opening a file picks this from its extension.
  2. 2Drop the file on the page or choose it. You can also paste the text if you have the file open in an editor.
  3. 3Read the verdict. Problems marked Fix will stop or spoil the import; those marked Check are worth a look but may import anyway.
  4. 4Fix the file, or download it again from the bank, and open it here once more before importing.

The checks

Every check, and why it matters

Run in this order, because a later check means little if an earlier one fails. A file with no statement block has no transactions to test.

CheckPasses whenWhy it matters
HeaderOFXHEADER:100 and a 1.x VERSION, or an <?OFX OFXHEADER="200"?> line for XMLTells the reader which dialect follows
StructureEvery aggregate such as <STMTTRN> is closedA cut-off download leaves tags open
Signon<SIGNONMSGSRSV1> with one <SONRS>, a status and a server dateRequired in every OFX response
INTU.BIDPresent and numeric (required for .qbo)QuickBooks matches it to a bank on Intuit’s list
StatementBANKMSGSRSV1 with STMTRS, or CREDITCARDMSGSRSV1 with CCSTMTRSA card statement in the bank set, or the reverse, is rejected
ACCTTYPECHECKING, SAVINGS, MONEYMRKT or CREDITLINEThe only four bank account types in the specification
ACCTIDPresent, 22 characters at most, shown maskedTies the file to one account
CURDEFA three-letter currency codeRequired in every statement
DatesDTSTART and DTEND valid and in order; every DTPOSTED inside themDates are YYYYMMDD with an optional time
TransactionsTRNTYPE, DTPOSTED, TRNAMT and FITID on every rowThe four fields every reader needs
FITIDUnique within the accountA repeated FITID is skipped as already imported
AmountsPlain signed numbers, no $ or thousands separatorsThe format the specification defines
NAME32 characters at mostThe specification limit; longer names may be truncated
LEDGERBALBALAMT and DTASOF presentRequired in every statement

Fixing the failures that come up most

Duplicate FITIDs. The specification requires each FITID to be unique within an account, and QuickBooks uses it to recognize transactions it has already imported. Two different transactions with the same FITID means the second one is skipped. Give each row its own ID; if the two rows really are the same transaction, delete one.

A missing or wrong INTU.BID. Files made by hand or by a converter sometimes leave it out or use a placeholder. The safest value is the one in a .qbo your bank issued for the same account. Intuit does not publish its list, so no outside tool can confirm a number is on it.

ACCTTYPE CREDITCARD. A credit card is not a bank account type in OFX. Card statements use their own message set (CREDITCARDMSGSRSV1, CCSTMTRS and CCACCTFROM), so changing one tag is not enough.

Amounts with commas or dollar signs. OFX amounts are plain numbers with a leading minus for money out. 1,234.56 or (12.00) usually comes from a spreadsheet that was saved straight into OFX.

Long names. NAME is limited to 32 characters in the specification, so longer descriptions may be cut short after import. Keep the first 32 characters in NAME and the full text in MEMO.

SGML or XML

Two dialects of one format

Many banks issue OFX 1.x: a nine-line plain-text header, then tags like <TRNAMT>-12.00 with no closing tag. That is valid SGML and invalid XML, which is why a general XML validator rejects good .qbo files. OFX 2.x closes every tag and starts with an <?OFX?> line. Both are valid OFX, and the validator reads either.
Upload limits

QuickBooks Online has its own limits

Intuit’s upload page for QuickBooks Online asks for files of 350 KB or less and up to 1,000 lines per upload. The validator warns when a .qbo is over either; splitting the date range into smaller files is the fix.
Where it stops

What a file check cannot see

It cannot see Intuit’s bank list, which transactions your company file already holds, or whether the amounts match the PDF statement. A file can pass every check and still import into the wrong account if it is matched to one by mistake.

FAQ

QBO file validator: questions

What is a QBO file?

A .qbo file is a QuickBooks Web Connect file: a bank statement in the OFX format with Intuit’s extra tags, the most important being INTU.BID, which names the bank. QuickBooks Desktop imports it through Web Connect, and QuickBooks Online accepts it as an upload.

Is my file uploaded when I validate it?

No. The page reads the file with your browser’s own file reader and checks it on your device. Nothing is sent to VouchRow or anyone else, the account number is shown as its last four digits only, and the results are excluded from session recordings.

Can the validator tell me whether QuickBooks will accept my bank ID?

No. QuickBooks compares INTU.BID with Intuit’s list of Web Connect banks, and that list is not public. The validator checks that the tag is present and numeric; only QuickBooks can say whether it accepts that particular number.

Why does QuickBooks say “Nothing imported” or skip some transactions?

Intuit’s help article for the Mac version explains that QuickBooks will not import a transaction ID more than once, to prevent duplicates. If two rows share a FITID, or the transactions were imported before, they are skipped. The validator flags FITIDs repeated within the file.

Does it work for .qfx and .ofx files too?

Yes. All three are the same OFX format. Choose Quicken or Other OFX above the drop zone and the bank ID check adjusts: plain OFX readers do not need INTU.BID.

Does it check OFX 1.x and OFX 2.x files?

Both. OFX 1.x files are SGML with a plain-text header and leaf tags that are never closed. OFX 2.x files are XML with an <?OFX?> line. The validator reads either and reports which one it found.

Can it check that the transactions match my bank statement?

Not fully. A QBO file carries a closing ledger balance but no opening balance, so the validator shows the totals and the opening balance they imply for you to compare with the statement. To check rows against printed balances, use the running balance checker.

Need a .qbo from a PDF statement?

VouchRow converts PDF bank statements to QBO with a transaction ID on every row, so re-imports do not duplicate, and with the bank ID you enter. The conversion is checked against the statement’s balances before you download it.