GUIDE · BANK FILE FORMATS
What is an OFX file?
How the OFX file format is put together.
An OFX file is a bank, card or brokerage download in Open Financial Exchange, a format Microsoft, Intuit and CheckFree announced in 1997. It is tagged plain text, SGML in versions 1.x and XML from 2.0, with each transaction in an STMTTRN record holding a date, signed amount and unique ID. ZeraBooks reads PDF statements, not OFX files.
7-day trial · card required, nothing charged for 7 days · 1,000 pages a month from $79/month billed annually

WHERE IT CAME FROM
Who created the OFX format, and when?
Microsoft, Intuit and CheckFree announced Open Financial Exchange on January 16, 1997, and published version 1.0 a month later. Each company already had its own way for personal finance software to talk to banks. OFX merged Microsoft’s Open Financial Connectivity, Intuit’s OpenExchange and CheckFree’s electronic banking protocols into one standard that any bank could serve.
Versions 1.0 to 1.6 are written in SGML. Version 2.0 switched to XML, and the current banking version is 2.3. Since 2019 the specification has been looked after by the Financial Data Exchange (FDX), an industry group that also publishes the newer API standard banks use to share data with apps.
Intuit added its own tags to OFX for its programs. The Quicken flavour is the QFX file, covered in what is a QFX file, and the QuickBooks flavour is the QBO file.
Try it on your own documents. One-week free trial, both apps included.
1.X VS 2.X
What changed between OFX 1.x and OFX 2.x?
Both carry the same data. What changed is the syntax, and that decides which tools can read the file.
| OFX 1.x (1.0 to 1.6) | OFX 2.x (2.0 to 2.3) | |
|---|---|---|
| Syntax | SGML | XML |
| Header | Plain lines before the tags: OFXHEADER:100, DATA:OFXSGML, VERSION:102 and so on | An XML declaration, then <?OFX OFXHEADER="200" VERSION="220" SECURITY="NONE" OLDFILEUID="NONE" NEWFILEUID="NONE"?> |
| Closing tags | Only on aggregates; a single value such as <TRNAMT>-64.18 has none | Required on every element: <TRNAMT>-64.18</TRNAMT> |
| Grammar file | A DTD | An XML Schema |
| Opens as XML | No | Yes |
A program that reads only one style will reject the other, so check the first line of the file before blaming the bank. OFXHEADER:100 means 1.x; <?xml means 2.x.
STRUCTURE
How is an OFX file structured?
An OFX file is a set of nested blocks, which the specification calls aggregates. A bank statement download nests like this, from the outside in.
- 1
<OFX>
The root. Everything after the header sits inside it.
- 2
<SIGNONMSGSRSV1> › <SONRS>
The sign-on response: a status code, the time the bank built the file (DTSERVER), the language, and the bank’s ID as an institution.
- 3
<BANKMSGSRSV1> › <STMTTRNRS>
The banking messages, wrapped with a transaction ID and status. Credit cards use CREDITCARDMSGSRSV1 › CCSTMTTRNRS instead, and brokerages use INVSTMTMSGSRSV1.
- 4
<STMTRS>
The statement itself. It opens with CURDEF, the currency, and BANKACCTFROM: the bank ID (the routing number in the U.S.), the account number and the account type. Card statements use CCSTMTRS and CCACCTFROM, with no routing number.
- 5
<BANKTRANLIST>
The date range (DTSTART and DTEND) followed by one STMTTRN per transaction.
- 6
<STMTTRN>
One transaction: TRNTYPE, DTPOSTED, TRNAMT and FITID, plus a payee in NAME (32 characters at most) and optional MEMO, CHECKNUM or REFNUM.
- 7
<LEDGERBAL> and <AVAILBAL>
After the list, the ledger balance and the available balance, each with the date it applies to.
ANNOTATED SAMPLE
What does an OFX 2.x file look like?
A made-up business credit card for September 2026, in the XML style. The card number, merchant and amounts are invented. Long runs of tags are shortened with an ellipsis.
| Line in the file | What it means |
|---|---|
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | A standard XML declaration. This line alone tells you it is a 2.x file. |
| <?OFX OFXHEADER="200" VERSION="220" SECURITY="NONE" OLDFILEUID="NONE" NEWFILEUID="NONE"?> | The OFX header: header version 2.0, data written to OFX 2.2. |
| <OFX><SIGNONMSGSRSV1><SONRS><STATUS><CODE>0</CODE><SEVERITY>INFO</SEVERITY></STATUS> | Sign-on succeeded. Code 0 means no error. |
| <DTSERVER>20261002140500.000[-5:CDT]</DTSERVER> | Built at 2:05 pm Central Daylight Time on October 2, 2026. |
| <CREDITCARDMSGSRSV1><CCSTMTTRNRS> … <CCSTMTRS><CURDEF>USD</CURDEF> | A credit card statement, in U.S. dollars. |
| <CCACCTFROM><ACCTID>XXXXXXXXXXXX5521</ACCTID></CCACCTFROM> | The card account, shown masked here. |
| <BANKTRANLIST><DTSTART>20260901</DTSTART><DTEND>20260930</DTEND> | The period covered. |
| <STMTTRN><TRNTYPE>DEBIT</TRNTYPE><DTPOSTED>20260914</DTPOSTED> | A charge, posted September 14. With no time given, the time is midnight GMT. |
| <TRNAMT>-64.18</TRNAMT> | A purchase on a card is negative: it adds to what you owe. |
| <FITID>2609140221873</FITID><NAME>OFFICE SUPPLY DEPOT 212</NAME></STMTTRN> | The bank’s unique ID for the charge, and the merchant. |
| <STMTTRN><TRNTYPE>CREDIT</TRNTYPE><DTPOSTED>20260922</DTPOSTED><TRNAMT>1200.00</TRNAMT> | A payment to the card is positive: it reduces what you owe. |
| <FITID>2609220004410</FITID><NAME>PAYMENT THANK YOU</NAME></STMTTRN></BANKTRANLIST> | The payment’s ID and description. The transaction list ends. |
| <LEDGERBAL><BALAMT>-1873.40</BALAMT><DTASOF>20260930</DTASOF></LEDGERBAL> | The balance owed on September 30, negative because it is money you owe. |
| </CCSTMTRS></CCSTMTTRNRS></CREDITCARDMSGSRSV1></OFX> | Every block closes, as XML requires. |
DATES
How are dates written in an OFX file?
The full form is YYYYMMDDHHMMSS.XXX followed by an optional time zone in brackets: the offset from GMT and, if the bank wants, a name. 20260914093000.000[-5:CDT] is September 14, 2026, at 9:30 am Central Daylight Time, which is 2:30 pm GMT. There are no slashes or dashes, and the year always comes first.
Banks may cut fields off the right. 20260914 alone is allowed, and the standard says to read it as the start of that day in GMT. A program that converts it to U.S. local time can show the transaction on September 13, which is worth knowing when a bank file and a statement disagree by a day.
Spreadsheets want something else. The CSV files ZeraBooks Convert makes from PDF statements write U.S. dates as MM/DD/YYYY in every ready-made format; see choose a download format.
PLUS AND MINUS
Which way do the signs go in an OFX file?
Each transaction amount is signed by its effect on the account, from the customer’s side. TRNTYPE is only a label: software follows the sign, so a DEBIT with a positive amount imports as money in.
| Transaction | Account | TRNAMT | Why |
|---|---|---|---|
| Customer payment deposited | Checking | 2150.00 | Money into the account |
| Debit card purchase | Checking | -37.60 | Money out of the account |
| Purchase | Credit card | -64.18 | Adds to the amount owed |
| Payment to the card | Credit card | 1200.00 | Reduces the amount owed |
| Interest earned | Savings | 3.12 | TRNTYPE INT; the sign says which way |
| Interest charged | Credit card | -21.75 | Same INT type, opposite sign |
| Balance owed (LEDGERBAL) | Credit card | -1873.40 | Balances are signed by their effect on your net worth |
WHAT READS IT
Which programs open OFX files?
QuickBooks Online
The upload-from-file option in bank transactions takes .ofx, along with QBO, QFX and CSV. QuickBooks’ own flavour of OFX is the QBO file; see PDF to QuickBooks for what ZeraBooks makes instead.
Xero
Import a statement from the bank account’s Manage Account menu. OFX needs no column mapping, unlike CSV.
YNAB and GnuCash
Both import .ofx and .qfx files. YNAB takes several at once; GnuCash remembers which account each file belongs to.
Quicken
Quicken is built around the QFX flavour, which carries Intuit’s bank ID. A plain OFX file without it may be refused.
Excel
Only for 2.x files, through Data › Get Data › From File › From XML, and the nested blocks have to be expanded down to the STMTTRN rows by hand. A 1.x file isn’t valid XML and won’t load this way.
GETTING ROWS AND COLUMNS
How do you turn an OFX file into a spreadsheet?
Check for a CSV download first
The bank screen that offers OFX often offers CSV for the same dates. That is the shortest path to a spreadsheet, though a bank CSV rarely includes the balances.
Load a 2.x file into Excel
Use the From XML import above, then keep the DTPOSTED, TRNAMT, NAME and MEMO columns. Convert the dates yourself, since Excel reads 20260914 as a number.
Parse a 1.x file with a script
The open-source Python library ofxtools reads both styles, including QFX files, and gives you each transaction as an object you can write out as CSV.
Start from the PDF statement
If you have the statement PDF, convert the bank statement to CSV or Excel with ZeraBooks Convert. It checks every account against the printed opening and closing balances, which an OFX file can’t give you because it has no opening balance. The bank statement converter page covers every document type it reads.
What is the difference between OFX and QFX?
QFX is OFX with Intuit’s tags added so Quicken accepts it, mainly the INTU.BID bank ID. The transactions inside are written the same way. See what is a QFX file for a QFX sample line by line.
Is OFX still used?
Yes. Banks, card issuers and brokerages still offer OFX, QFX and QBO downloads, and the Financial Data Exchange says OFX is in use at over 7,000 financial institutions. Newer bank connections run on APIs, but file downloads remain the fallback when a connection breaks.
Is a QBO file an OFX file?
Yes. A QBO file is QuickBooks’ Web Connect format: OFX with Intuit’s tags. ZeraBooks doesn’t make QBO files; it makes a QuickBooks-ready CSV that QuickBooks Online’s bank upload accepts.
Can I upload an OFX file to ZeraBooks?
No. ZeraBooks Convert reads PDF documents only, and the General Ledger behind ZeraBooks AI bookkeeping takes statements as PDF or CSV. Neither imports OFX, QFX or QBO files, and there is no bank feed.
Can ZeraBooks make an OFX file from a PDF statement?
No. ZeraBooks makes Excel and CSV only. If your software needs an OFX, QFX or QBO file, DocuClipper makes them; our DocuClipper alternative page says where each tool fits.
Can I edit an OFX file?
You can, in any text editor, but a wrong tag or a broken sign makes the import fail or post the wrong way. If a single transaction is wrong, it is usually safer to import the file and fix the transaction in your software.
ONE-WEEK FREE TRIAL
Rows from the PDF, checked first.
CSV or Excel, your choice.
ZeraBooks Convert reads the statement PDF, proves each account against its printed balances and downloads the transactions. 7-day trial, card at checkout, then $79 a month billed annually; see ZeraBooks pricing.
Last updated October 14, 2026 · Written by Damin Mutti, founder of ZeraBooks