Bank statement to OFX
Upload a PDF statement (or a scan) and download an OFX file for Xero, MYOB, GnuCash, Moneydance, Banktivity and the other finance apps that read bank files. Transactions arrive in order, with the account details those readers expect alongside them.
Upload a file
What the OFX file contains
- One entry per transaction, in statement order
- Amounts on the side the statement shows them
- Account details where an OFX reader looks for them
- Dates as the statement prints them, not reformatted
What the OFX file looks like
OFX wraps each transaction in a <STMTTRN> block with the posting date, the signed amount, a unique <FITID> and the description in <MEMO>. <CURDEF> carries the currency, so an AUD or GBP statement imports as AUD or GBP rather than being assumed to be dollars.
OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE
<OFX>
<SIGNONMSGSRSV1>
<SONRS>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<DTSERVER>20260310120000</DTSERVER>
<LANGUAGE>ENG</LANGUAGE>
</SONRS>
</SIGNONMSGSRSV1>
<BANKMSGSRSV1>
<STMTTRNRS>
<TRNUID>1</TRNUID>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<STMTRS>
<CURDEF>USD</CURDEF>
<BANKACCTFROM>
<BANKID>000000000</BANKID>
<ACCTID>0000000000</ACCTID>
<ACCTTYPE>CHECKING</ACCTTYPE>
</BANKACCTFROM>
<BANKTRANLIST>
<DTSTART>20260302</DTSTART>
<DTEND>20260306</DTEND>
<STMTTRN>
<TRNTYPE>DEBIT</TRNTYPE>
<DTPOSTED>20260302</DTPOSTED>
<TRNAMT>-120.00</TRNAMT>
<FITID>20260302-12000-DirectDebit</FITID>
<NAME>Direct Debit 4471 Acme Insurance</NAME>
<MEMO>Direct Debit 4471 Acme Insurance</MEMO>
</STMTTRN>
<STMTTRN>
<TRNTYPE>DEBIT</TRNTYPE>
<DTPOSTED>20260304</DTPOSTED>
<TRNAMT>-38.40</TRNAMT>
<FITID>20260304-3840-CardPayment</FITID>
<NAME>Card Payment Corner Grocer</NAME>
<MEMO>Card Payment Corner Grocer</MEMO>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20260306</DTPOSTED>
<TRNAMT>500.00</TRNAMT>
<FITID>20260306-50000-TransferRec</FITID>
<NAME>Transfer Received J Smith</NAME>
<MEMO>Transfer Received J Smith</MEMO>
</STMTTRN>
</BANKTRANLIST>
<LEDGERBAL>
<BALAMT>2341.60</BALAMT>
<DTASOF>20260306</DTASOF>
</LEDGERBAL>
</STMTRS>
</STMTTRNRS>
</BANKMSGSRSV1>
</OFX>Where an OFX file imports
OFX is the format most finance software accepts when a bank feed is missing or only reaches back a few months: Banktivity, Moneydance and GnuCash, Xero, MYOB and Reckon, Sage, YNAB and Actual Budget. Two exceptions: QuickBooks prefers its own QBO, and Quicken for Windows does not import .ofx files at all — it takes a CSV, see bank statement to Quicken.
Most banks stop offering OFX downloads for older periods, and some never offered it at all — but they always give you the PDF statement. Converting that PDF is how you backfill a year of history into a new app or catch up an account whose feed broke.
How to convert
Upload your statement
Drop in the PDF you downloaded from your bank, or a scan of a paper statement.
Choose OFX
Leave the output format on OFX — it is preselected on this page.
Import the file
Bring the .ofx in through your finance app’s bank statement import.
Statements it handles
Layouts differ from bank to bank, so nothing is matched against a fixed template. An unusual statement still produces a table you can check before exporting — which is what makes it usable for bookkeepers and accountants who receive statements from every client.
PDF statements and CSV exports
A statement downloaded from your bank, or the CSV your bank lets you export. Both arrive as the same clean table.
Multi-page statements, read as one table
A statement that runs over several pages — or several statements uploaded together — is read as one continuous table, not one file per page.
Amounts and dates kept as your bank prints them
Debit and credit signs, decimal places and date formats are left as printed, so the numbers still reconcile against the statement.
Scanned, image-only PDFs, read with OCR
A statement with no text layer is read with OCR and may need a quick review — the one case where a row can come out wrong.
- CSV
- Scan
Why this is more accurate than OCR
OCR reads a statement by position on the page, so a wrapped description or a pair of narrow amount columns sends the text to the wrong row. Reading the content instead of the coordinates is what keeps each transaction whole.
01
A wrapped description becomes two rows
The second line of a description sits below the first, so it is read as a new row — and the amount follows it down, onto the wrong transaction.
02
Debit and credit collapse into one column
Two narrow amount columns are read as one, so a payment and a deposit come out identical — the sign that told them apart is gone.
03
The totals block becomes transactions
Opening balance and closing balance are printed like rows, so they are read like rows — and land in your books as money that never moved.
Why OCR mangles bank statements — the four failures in detail.
Frequently asked questions
How do I convert a bank statement to OFX?
Upload the PDF from your bank (or a scan) above, keep OFX as the output format, and download the file. No account and nothing to install.
What is an OFX file?
OFX (Open Financial Exchange) is a structured format for bank feeds. Unlike a spreadsheet export it also carries account information, which is why finance programs prefer it for imports.
What is the difference between OFX and QFX?
They carry the same transactions. QFX is Quicken’s variant of OFX with an Intuit bank ID that Quicken checks against the banks offering Web Connect, so a QFX has to come from your bank; this page writes OFX. Most apps that read one read the other.
Can I convert a PDF bank statement to OFX?
Yes. Upload the PDF, pick OFX, and download the file.
Can I import the OFX into Xero or MYOB?
Yes. Both accept OFX as a manual bank statement import — in Xero under the bank account’s Import a Statement, in MYOB under Banking, Bank Feeds or Import Statements depending on the edition. The currency is set in the file, so a non-dollar statement keeps its currency.
Is my statement kept after conversion?
No. The file is deleted when the conversion finishes; only the converted copy stays at your private link.
Do I need an account?
No. The converter works without signing up.