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

  1. Choose File > Import > Import OFX/QFX and pick the .ofx file.
  2. Select the GnuCash account to import into, or create it when asked.
  3. In the import matcher, confirm or change the transfer account for each row, then click OK.

Xero

  1. Open Accounting > Bank accounts, pick the account, then Manage account > Import a statement.
  2. Choose the .ofx file and click Import; OFX needs no column mapping.
  3. 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

FormatBest forDuplicate detectionCarries closing balanceColumn mapping on importDate format
CSVSpreadsheets, scripts, tools with a custom CSV importNoPer-row running balance columnYes, every timeYour choice: ISO, MM/DD/YYYY or DD/MM/YYYY
QBO (Web Connect)QuickBooks OnlineYes, FITID per transactionYes, ledger balanceNoFixed YYYYMMDD, never ambiguous
OFX 2.2Xero, GnuCash, Moneydance and other finance appsYes, FITID per transactionYes, ledger balance per currencyNoFixed YYYYMMDD, never ambiguous
Xero CSVXero bank statement import with a line-by-line reviewNo transaction IDs; Xero may flag possible duplicatesNoTemplate columns, recognised by XeroDD/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.