1. Your bank file
A .qfx / .ofx (Web Connect) download from a bank or card issuer, OFX 1.x (SGML) or 2.x (XML).
Choose a file or paste the text, then click Check file.
Result
Fixed file
The rules, and what they leave out
- Format and header: OFX 1.x (SGML) or 2.x (XML) detected; OFXHEADER, DATA, VERSION, SECURITY, ENCODING, CHARSET, COMPRESSION, OLDFILEUID and NEWFILEUID present with valid values (or the <?OFX?> line for 2.x); byte order mark; blank line before <OFX>.
- Structure: every container tag closed in order, every value tag closed in 2.x.
- Transactions: TRNTYPE, DTPOSTED, TRNAMT and FITID present; DTPOSTED in YYYYMMDD[HHMMSS[.XXX][offset]] and a real date; TRNAMT numeric with a period; sign against type; duplicate FITIDs per account; FITID, NAME and MEMO lengths.
- Statement: BANKID, ACCTID and ACCTTYPE (or ACCTID for a card) present and valid; DTSTART and DTEND present, in order, and covering every DTPOSTED; LEDGERBAL and AVAILBAL numeric and dated. A count and sum of the transactions is shown for you to compare with the bank.
- Characters: unescaped & and <; non-ASCII text against ENCODING and CHARSET.
- Fixed automatically: byte order mark removed, missing header lines added, bare & escaped, ISO dates (2024-03-04) rewritten as 20240304, duplicate FITIDs made unique with a suffix, missing closing tags added.
- Never guessed: slash dates and comma amounts, balances, which duplicate transaction is the real one, how to shorten a long NAME, how to transliterate non-ASCII text.
- Not checked: whether your bank issued or signed the file, that amounts and balances are true, investment statements, and any extra rule a given app applies at import. Read from memory of the OFX 1.0.2 and 2.x specifications; confirm against the current standard.
Common questions
Why does my QFX or OFX file fail to import into QuickBooks?
The usual causes are a header missing one of its nine lines, a missing or duplicate FITID (the transaction ID QuickBooks uses to avoid importing a transaction twice), a date that is not YYYYMMDD, an unescaped & in a payee name, and tags left unclosed because the download was cut off. This tool reports each with its line number.
What does an invalid date error on an OFX import mean?
OFX dates must be YYYYMMDD, optionally followed by HHMMSS, milliseconds and a bracketed time-zone offset. A date written 2024-03-04 or 03/04/2024 is rejected. The tool rewrites the unambiguous ISO form and only reports slash dates, because day-first and month-first cannot be told apart.
What is a duplicate FITID and how is it fixed?
FITID is the bank's unique ID for each transaction. Two transactions with the same FITID in one account look like the same transaction, so QuickBooks and Quicken drop or reject the second. The fix appends -2, -3 and so on so every ID is unique. Check that the two transactions really are different before importing.
What is the difference between OFX 1.x (SGML) and 2.x (XML)?
OFX 1.x files start with plain header lines (OFXHEADER:100 and so on) and leave value tags unclosed. OFX 2.x files are XML, start with an xml declaration and an OFX header line, and close every tag. The tool detects which one you have and checks it by that format's rules.
Is my bank file uploaded anywhere?
No. The page reads the file in your browser and a test in the code asserts there are no network calls. A bank export holds account numbers and transactions, so that matters.
What does this not check?
Whether your bank signed or authorised the file, that balances and transactions are true, investment statements, or the extra rules any one app applies at import (QuickBooks, for example, may also require a supported bank ID).