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
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
- 1Choose what you are importing into: QuickBooks, Quicken or another OFX reader. Opening a file picks this from its extension.
- 2Drop the file on the page or choose it. You can also paste the text if you have the file open in an editor.
- 3Read the verdict. Problems marked Fix will stop or spoil the import; those marked Check are worth a look but may import anyway.
- 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.
| Check | Passes when | Why it matters |
|---|---|---|
| Header | OFXHEADER:100 and a 1.x VERSION, or an <?OFX OFXHEADER="200"?> line for XML | Tells the reader which dialect follows |
| Structure | Every aggregate such as <STMTTRN> is closed | A cut-off download leaves tags open |
| Signon | <SIGNONMSGSRSV1> with one <SONRS>, a status and a server date | Required in every OFX response |
| INTU.BID | Present and numeric (required for .qbo) | QuickBooks matches it to a bank on Intuit’s list |
| Statement | BANKMSGSRSV1 with STMTRS, or CREDITCARDMSGSRSV1 with CCSTMTRS | A card statement in the bank set, or the reverse, is rejected |
| ACCTTYPE | CHECKING, SAVINGS, MONEYMRKT or CREDITLINE | The only four bank account types in the specification |
| ACCTID | Present, 22 characters at most, shown masked | Ties the file to one account |
| CURDEF | A three-letter currency code | Required in every statement |
| Dates | DTSTART and DTEND valid and in order; every DTPOSTED inside them | Dates are YYYYMMDD with an optional time |
| Transactions | TRNTYPE, DTPOSTED, TRNAMT and FITID on every row | The four fields every reader needs |
| FITID | Unique within the account | A repeated FITID is skipped as already imported |
| Amounts | Plain signed numbers, no $ or thousands separators | The format the specification defines |
| NAME | 32 characters at most | The specification limit; longer names may be truncated |
| LEDGERBAL | BALAMT and DTASOF present | Required 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.
Two dialects of one format
QuickBooks Online has its own limits
What a file check cannot see
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.