Convert bank statement PDF to OFX
Drop the PDF below and download an .ofx file in OFX 2.2 XML. Use it with any program that imports Open Financial Exchange files, such as Xero, GnuCash, Moneydance, Banktivity or MoneyMoney. Each currency on the statement becomes its own statement block with its own closing balance, and every transaction has a deterministic ID so duplicates can be detected on re-import.
What OFX is and where it imports
OFX (Open Financial Exchange) is a bank-neutral standard for statement data. Version 2 is XML; version 1 is the older SGML form that QuickBooks and Quicken still read. We write 2.2, because XML is easier for current software to validate and less fussy about line endings.
Each transaction records its type (debit or credit), posted date, signed amount, a FITID and the payee name. Descriptions longer than 32 characters also go into MEMO, since many apps truncate the name field.
Unlike CSV, an OFX file carries the account currency and the ledger balance, so the receiving app knows what the closing balance should be. If the statement did not print a closing balance, the value is computed and you see a note before download.
Imports into: Xero, GnuCash, Moneydance, Banktivity, MoneyMoney, QuickBooks Online (bank upload)
How to import the file
GnuCash
- Choose File > Import > Import OFX/QFX and pick the .ofx file.
- Select the GnuCash account to import into, or create it when asked.
- In the import matcher, confirm or change the transfer account for each row, then click OK.
Xero
- Open Accounting > Bank accounts, pick the account, then Manage account > Import a statement.
- Choose the .ofx file and click Import; OFX needs no column mapping.
- Go to the Reconcile tab to match the imported lines.
Common import errors
- The app only lists QFX or OFX 1 files.
- Some older software reads only the SGML version. Use the QBO export, which is OFX 1.0.2, or check whether the app has a separate OFX 2 option.
- Transactions land in the wrong currency account.
- A multi-currency statement has one block per currency. Import into an account whose currency matches each block, or pick the block when the app asks.
- Payee names are cut short.
- The OFX name field holds 32 characters. The full text is in the memo field; most apps can show it as a column.
Download a sample file
Built from our synthetic sample statement by the same exporter the converter uses. Open it to see the exact layout before you convert your own statement.
CSV vs QBO vs OFX vs Xero CSV
| Format | Best for | Duplicate detection | Carries closing balance | Column mapping on import | Date format |
|---|---|---|---|---|---|
| CSV | Spreadsheets, scripts, tools with a custom CSV import | No | Per-row running balance column | Yes, every time | Your choice: ISO, MM/DD/YYYY or DD/MM/YYYY |
| QBO (Web Connect) | QuickBooks Online | Yes, FITID per transaction | Yes, ledger balance | No | Fixed YYYYMMDD, never ambiguous |
| OFX 2.2 | Xero, GnuCash, Moneydance and other finance apps | Yes, FITID per transaction | Yes, ledger balance per currency | No | Fixed YYYYMMDD, never ambiguous |
| Xero CSV | Xero bank statement import with a line-by-line review | No transaction IDs; Xero may flag possible duplicates | No | Template columns, recognised by Xero | DD/MM/YYYY |
FAQ: OFX
Is OFX the same as QBO?
QBO is OFX version 1 with an Intuit bank ID added. Plain OFX has no Intuit-specific tags, which is why it works in a wider range of programs but QuickBooks prefers QBO.
Which OFX version do you export?
OFX 2.2, the XML form. If your software needs OFX 1, the QBO file is OFX 1.0.2 and many apps accept it under the .ofx extension.
Can I import the same OFX file twice by mistake?
Most apps compare transaction IDs and skip ones they have seen. Our IDs come from the row data, so a second export of the same statement repeats them.
Would ChatGPT produce a usable OFX file?
Maybe for a few rows, but OFX needs exact tags, signed amounts and unique IDs, and a chat reply will not tell you when it dropped a transaction. Here the statement is reconciled row by row on your device before the file is written to the OFX 2.2 schema.
Does OFX keep the running balance of each row?
No, OFX stores only the ledger balance at the end of the period. If you need per-row balances, use the Excel or CSV export alongside it.