Convert a Bank Statement PDF to OFX
Last verified May 23, 2026
Drop your bank statement PDF here
or click to browse. PDF only, max 50MB.
A bank statement PDF becomes an OFX file by extracting every posted transaction and writing it inside the Open Financial Exchange container, a structured XML/SGML document with a bank block, an account block, and one record per transaction carrying a date, a signed amount, a memo, and a unique transaction ID. Upload the PDF above, confirm the preview, choose OFX, and download. The first five pages each month are free with no account, and most statements convert in under ten seconds.
- What OFX is: the Open Financial Exchange standard, an open XML/SGML spec originally published by Intuit, Microsoft, and CheckFree, read by most personal-finance and accounting apps.
- What you get: a valid .ofx file with a populated BANKMSGSRSV1 block, account identifiers, and one STMTTRN record per transaction with a stable FITID.
- Where it imports: Xero, Sage, GnuCash, YNAB, MoneyDance, Banktivity, and most desktop finance tools accept OFX directly.
- Coverage: tested against 500+ bank layouts across the US, UK, India, Canada, and the EU.
- Cost and privacy: 5 pages/month free, then credit packs; the PDF is parsed in memory and not stored.
What goes inside the file the converter builds
The output is a complete Open Financial Exchange document, not a CSV with the extension renamed. Each transaction is written as a STMTTRN record with the four elements importers actually read: a transaction type (DEBIT or CREDIT), a posting date in OFX's YYYYMMDD datetime form, a signed TRNAMT, and a NAME or MEMO carrying the description.
The piece most converters get wrong is the FITID, the financial institution transaction ID. OFX importers use the FITID to recognize duplicates, so if two imports share an ID the second is skipped instead of double-posting. The converter generates a stable, unique FITID per row from the date, amount, and description, which keeps re-imports idempotent. The document is wrapped in the standard SIGNONMSGSRSV1 and BANKMSGSRSV1 envelopes with the account's BANKID and ACCTID so the receiving app knows which account the data belongs to.
Two more elements round out a usable file. The STMTTRNRS response carries a CURDEF currency declaration so an app reading a euro statement does not assume dollars, and the converter sets it from the statement where the currency is printed. The BANKACCTFROM block names the account type, checking, savings, or a credit line, because some apps file the transactions differently depending on it. Where the bank prints an opening and closing balance, the LEDGERBAL can be carried so the destination has a figure to reconcile against, something the older QIF format cannot express at all.
Which apps read OFX without a conversion step
OFX is the closest thing to a universal import format outside of CSV, and unlike CSV it carries field structure so there is no column mapping. It opens in nearly every personal-finance and small-business accounting app through a File or Import menu.
| App | How it imports OFX | Watch out for |
|---|---|---|
| Xero | Accounting > Bank Accounts > Manage > Import a Statement | Expects a bank feed match; the account in the file must line up with an existing Xero account |
| GnuCash | File > Import > Import OFX/QFX | Asks you to map the OFX account to a GnuCash account on first import |
| YNAB | Account > File-based import (OFX, QFX, CSV) | Direct file import; YNAB favors bank linking but accepts OFX uploads |
| MoneyDance | File > Import, then pick the .ofx file | Uses the FITID for de-duplication, so a stable ID matters on repeat imports |
| Sage | Bank reconciliation / statement import | Some Sage editions prefer their own format; OFX works for the desktop bank import |
| Banktivity, IBank | File > Import transactions | Confirm the currency in the file matches the account currency |
OFX or QBO, and when neither is right
QBO is QuickBooks' own variant of OFX. The two files share the same structure, but QBO adds Intuit-specific tags that QuickBooks requires and that generic OFX apps ignore. Pick the format your destination expects, not the one that looks more familiar.
| Format | Best for | Main tradeoff |
|---|---|---|
| OFX | Xero, Sage, GnuCash, YNAB, MoneyDance, most finance apps | Some banks need an FID or institution ID set for a clean match |
| QBO | One-click import into QuickBooks Desktop and Online | QuickBooks only; relies on Intuit's INTU.BID tag |
| QIF | Quicken and older desktop tools | Legacy text format; no balance assertions and no FITID de-duplication |
| CSV | Spreadsheets and custom analysis | No structure beyond columns; the destination has to map fields |
If your destination is QuickBooks, use the QBO converter so the Intuit tags are written correctly. If you start from a stack of PDFs and want the export-format choice made later, the PDF to OFX page covers that workflow. For Quicken specifically, QIF is the safer match.
OFX, QFX, and the version numbers that trip up imports
OFX comes in two practical flavors and two era of syntax, and the wrong combination is a common reason an import silently fails. QFX is Intuit's branded OFX used by Quicken; it is OFX plus a few Intuit tags. The syntax split is between the older SGML-style OFX (version 1.x, with unclosed tags) and the newer pure-XML OFX (version 2.x, fully closed tags with an XML declaration). Most desktop apps still expect the 1.x SGML style.
| Variant | What it is | Where it fits |
|---|---|---|
| OFX 1.x (SGML) | Header block plus SGML-style tags, many left unclosed | The most widely accepted form; GnuCash, MoneyDance, most desktop apps |
| OFX 2.x (XML) | A strict XML document with a declaration and closed tags | Newer systems and validators; some older apps reject it |
| QFX | OFX with Intuit branding tags layered on | Quicken; treated as its own format by Intuit |
| QBO | OFX with the INTU.BID institution tag | QuickBooks only |
The converter writes the broadly compatible 1.x SGML form by default, which is what the largest set of apps reads without complaint. If an import fails on a newer system that expects strict XML, that is the version mismatch to check first, not the data itself. The transaction records inside both versions are identical, only the envelope syntax differs.
The OFX details most converters skip
- FID and INTU.BID. Plain OFX uses a numeric FID inside the financial-institution block; QBO additionally requires Intuit's INTU.BID. A file missing the identifier the app expects often imports as an "unknown bank" or is rejected outright. The converter writes a generic-but-valid identifier and flags where a bank-specific value would help.
- Date format. OFX dates are written as YYYYMMDD (optionally with a time and timezone), not the locale string printed on the statement, so a UK statement showing 14/02/2026 lands as 20260214 and never gets misread as a US month/day.
- Signed amounts. TRNAMT is a single signed field, debits negative, credits positive, rather than separate withdrawal and deposit columns, which is what apps reading OFX expect.
- FITID stability. The same statement converted twice produces the same FITIDs, so a re-import updates rather than duplicates. Many converters use a row counter instead, which breaks de-duplication.
What we see across 500+ bank layouts
From parsing statements across hundreds of bank templates, three issues cause most OFX import failures elsewhere, and the converter handles each explicitly:
- Missing or wrong institution identifiers. Many free tools emit OFX with an empty FI block, which QuickBooks and a few stricter apps refuse. We always populate the FI and account blocks so the file validates against the OFX envelope.
- Locale date strings copied verbatim. Statements print dates in regional order; a naive converter passes "02/03/2026" straight through and the importer guesses wrong. We parse to a real date first, then write the unambiguous YYYYMMDD form.
- Scanned statements. A photographed or scanned PDF has no text layer, so there is nothing to map into STMTTRN records. Those need OCR, which is on the roadmap but not yet supported, see the note below.
The fastest path from PDF to OFX
Drop the PDF on the converter above, scan the preview to confirm the transactions read correctly, choose OFX, and download. Import it through your app's File or Import menu, Xero, GnuCash, YNAB, and MoneyDance all accept the file directly. If the import flags an unknown bank, your software likely wants the QuickBooks-specific QBO variant instead, and if it complains about the file structure, it is probably expecting the strict XML version rather than the SGML one. For recurring work across many statements, credit packs bring the per-page cost below desktop converters while keeping everything in the browser.
One habit saves the most rework: import each statement once and let the FITID do the de-duplication on any later re-import, rather than deleting and re-adding transactions by hand. Because the converter derives the FITID from the transaction's own date, amount, and description, the same statement always produces the same IDs, so a corrected re-export merges cleanly instead of doubling your ledger. That single property is the practical reason OFX beats QIF and CSV for anyone reconciling more than a page or two a month.
Related converters & guides
Frequently asked questions
How do I convert a bank statement PDF to OFX?▾
Upload the PDF to the converter above, confirm the extracted transactions in the preview, choose OFX as the output, and download. The whole process takes a few seconds and no account is needed for your first five pages each month.
Is converting a bank statement to OFX free?▾
Yes, the first five pages every month are free with no signup or card. Longer statements and ongoing use are covered by affordable credit packs.
What is the difference between OFX and QBO?▾
QBO is QuickBooks' own variant of OFX. Both share the same XML/SGML structure, but QBO adds Intuit-specific tags such as INTU.BID that QuickBooks requires. Generic apps like Xero, GnuCash, and MoneyDance read plain OFX; for QuickBooks, use the QBO format.
Which apps can import an OFX file?▾
Xero, Sage, GnuCash, YNAB, MoneyDance, and Banktivity all import OFX directly through a File or Import menu. Because OFX carries field structure, there is no column mapping step the way there is with CSV.
Why does my OFX import show an unknown bank or get rejected?▾
That usually means the financial-institution block is missing the identifier the app expects. Stricter apps like QuickBooks need an INTU.BID tag, which is why a QBO file works there when a plain OFX file does not.
Can I convert a scanned or photographed statement?▾
Not yet. Scanned and image-only PDFs have no text layer to extract into transaction records, which requires OCR. Text-based PDFs, what most banks issue, convert fully today.