Convert bank statements to OFX files

Upload a bank or credit card statement — a PDF, a scan, a phone photo, or the CSV or Excel file your bank exports — and download an OFX file with a clean payee and a unique ID on every transaction, checked against the statement's own balances before it goes anywhere near your books.

Drop your statement here

PDF, scans and phone photos, or CSV, Excel, OFX, QIF, CAMT and MT940 exports

See the result before you payAny bank, any language

Updated October 28, 2026

Step by step

  1. 1

    Upload the statement

    Drop a PDF, scan or photo, or a CSV or Excel export from online banking. You can upload several statements at once, and password-protected PDFs work too.

  2. 2

    Check the result

    Every transaction is extracted and checked: opening balance + money in − money out must equal the closing balance. Fix anything you like in the review — the check runs again on save.

  3. 3

    Export to OFX and import it

    Choose Export → OFX and open the file in your app's import screen. In most apps that is File → Import or a bank account's statement import.

What is an OFX file?

OFX (Open Financial Exchange) is a standard file format for bank and credit card transactions. Instead of columns that you have to map by hand, an OFX file labels everything: which account it belongs to, the date of each transaction, the amount, the payee, and the closing balance. That is why finance apps can import it without asking you which column is which.

OFX also removes two problems that plague CSV imports. Dates are written as YYYYMMDD, so 03/04 can never be mistaken for 4 March or 3 April, and amounts always use a decimal point with a minus sign for money out. For the background — how OFX relates to QFX and QBO, and where banks offer it — see what an OFX file is.

What's inside the OFX file you download

You get an OFX 1.0.2 file (the SGML version), which is the version most personal finance and accounting apps read. Each statement becomes one statement section in the file:

OFX elementWhat's in it
AccountA checking or savings account section, or a credit card section for card statements, so the app opens it as the right account type
DTPOSTEDThe transaction date as YYYYMMDD
TRNAMTThe amount: negative for money out, positive for money in
TRNTYPEDEBIT or CREDIT
FITIDA unique ID for each transaction, used by apps to recognise transactions they already have
NAMEThe clean payee name, e.g. Shell instead of POS 4471 SHELL OIL 57442 (OFX allows up to 32 characters here)
MEMOThe full description exactly as printed on the statement
LEDGERBALThe statement's closing balance and its date

Plain OFX has no Intuit bank ID, so QuickBooks Desktop won't import it. For QuickBooks Desktop, export the .qbo Web Connect file instead — see bank statements to QuickBooks.

Which apps import OFX?

OFX is supported by a long list of desktop and online apps. A few common ones, and the right file for the ones that need something else:

AppOFX?Notes
GnuCashYesFile → Import → Import OFX/QFX. The first time, it asks which GnuCash account the file belongs to and remembers it
XeroYesUse the bank account's statement import. Xero also takes its own CSV layout — see bank statements to Xero
Wave, SageYesUpload the OFX file in the bank account's statement upload
MoneyMoney, HomeBankYesBoth import OFX alongside CSV and QIF
QuickBooks DesktopUse .qboNeeds a Web Connect (.qbo) file, which is a separate export
QuickenUse QIFQuicken's file import is built around .QFX files from participating banks, so a plain OFX file often isn't accepted. Use QIF for Quicken

PDF to OFX: why the balance check matters

Once a transaction is imported, it sits in your register and gets reconciled against. If a converter skipped a line at a page break or read a debit as a credit, you usually find out weeks later when the account won't reconcile — and then you have to hunt for the cause.

Every statement is checked before you export it. The opening balance plus money in, minus money out, must equal the closing balance, and the running balance is checked on every row. Signs that were misread are corrected from the running balance, duplicate rows at page breaks are removed, and any row that still doesn't add up is flagged with its page number. A statement that doesn't balance uses no pages (up to 30 pages a month).

Scans and phone photos go through the same check. See scanned bank statements to Excel for tips on photos.

CSV to OFX and Excel to OFX

Many banks only offer CSV downloads, while your app imports OFX more reliably. Upload the bank's CSV or Excel file and export OFX: columns are recognised automatically, including separate debit and credit columns, decimal commas and day-first or month-first dates, so there is no template to set up.

CSV, Excel, OFX, QIF, CAMT.053 and MT940 files use no pages, because there is nothing to read from images. You still need an active plan or a page pack to export them. If you want to go the other way — open an OFX file in a spreadsheet — upload it and export Excel or CSV.

How duplicates are avoided when you import twice

Each transaction in the file carries its own FITID. Apps that support OFX use it to spot transactions they have already imported: GnuCash, for example, compares transaction IDs, dates and amounts against what is already in the account and skips exact matches. If you export the same statement again, the IDs stay the same, so a second import doesn't double up.

The one case IDs can't solve is overlap with a bank feed. Transactions that arrived through a live connection carry the bank's IDs, not ours, so the app sees them as different. Before importing, check the date of the last transaction the feed brought in, and use the export's date range to include only the period the feed doesn't cover.

Several statements in one OFX file

  • Select several statements and export them together; each account gets its own statement section in one file.
  • Limit the export to a date range, for example the months before your bank feed started.
  • A PDF that contains several accounts or currencies is split into one statement per account before export.
  • Accounts are identified by the last four digits of the account number, so the first time you import, your app may ask which account the file belongs to.

Questions

What is an OFX file and which apps import it?

OFX is a standard file for bank transactions with the account, dates, amounts and payees labelled, so apps import it without column mapping. GnuCash, Xero, Wave, Sage, MoneyMoney and HomeBank are among the many apps that accept it.

Can I convert a CSV or Excel file to OFX?

Yes. Upload the CSV or Excel file from your bank and export OFX. Structured files like these use no pages, though you need a plan or page pack to export.

Which OFX version do I get?

OFX 1.0.2, the SGML version, which has the widest support. Bank accounts and credit cards get the matching statement type.

Will importing the same OFX file twice create duplicates?

Not in apps that check transaction IDs: each transaction has a unique FITID that stays the same if you export the statement again. Overlap with a bank feed is different — limit the export to dates the feed doesn't cover.

Does the OFX file work in QuickBooks Desktop or Quicken?

Not reliably. QuickBooks Desktop needs a .qbo Web Connect file, which you can export instead (QuickBooks). For Quicken, export QIF.

Is there a free PDF to OFX converter?

Your first statement is free (up to 10 pages, one month). After that you pay, but you always see the transaction count, the balance check result and the first rows before you pay. Pages cost from $12 for 100; see pricing.

Your next statement takes seconds.

See what we find on your statement before you pay.

Upload a statement