“Invalid OFX file — unable to read file”
Every finance app phrases it differently — "invalid file", "unable to read", "not a recognized format" — but underneath, OFX imports fail for a small, well-understood set of reasons. This page is the checklist.
Symptoms
The app refuses the file outright with a generic message The import starts and dies partway through A file that worked every month suddenly stops working
What actually causes it
Byte-order mark before OFXHEADER
An invisible three-byte marker sits at the very start of the file, before the word OFXHEADER. Parsers that require the header to be the first thing they see reject the file outright, and because the marker is invisible in every text editor, the file looks flawless while failing every time.
Missing OFX declaration header
OFX 1.x files must open with a header block — OFXHEADER, DATA, VERSION, ENCODING, CHARSET and a few others — before the <OFX> body begins. Exports that jump straight into the body, and files that have been trimmed by hand, are refused before a single transaction is read.
Unescaped ampersands
A raw "&" in a payee or memo ends the parse at that exact character, because the parser expects a character reference to follow. One new merchant with an ampersand in its name — AT&T, M&S, Johnson & Johnson — is enough to break a file that worked every month before.
Malformed dates
Date fields must be YYYYMMDD, optionally followed by a time and a timezone offset. Exports that emit ISO dates (2026-08-01) or locale dates (01/08/2026) cause importers to reject either the individual transaction or the entire document, depending on how strict they are.
Missing or duplicate FITIDs
Every transaction carries a unique id used to recognise entries that have already been imported. Transactions with no id are dropped silently by some importers and fail the whole file in others, while two transactions sharing an id mean the second one is treated as a copy of the first and skipped.
Truncated file
When a download is interrupted, the file ends mid-transaction and the closing tags never arrive. The data up to the cut is perfectly valid, which is why the file opens fine in an editor while every importer refuses it as malformed.
How to fix it
- Drop the file into the fixer below. Every cause on this list is checked automatically, locally in your browser.
- Apply the automatic repairs and download the fixed file.
- Re-import. If the app still refuses a structurally valid file, the block is app-specific — see the per-app guides on this site.
Related import problems
Skip the manual edit — fix it automatically
This page's checklist is exactly the fixer's OFX rule set. Free, no signup, no upload.
Open the fixer