1. Home
  2. Bank statement to CSV
  3. What is an OFX file

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

The Download dialog: choose a ready-made format such as Standard, QuickBooks-ready or Xero-ready, a file type and how to split the file.

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)
SyntaxSGMLXML
HeaderPlain lines before the tags: OFXHEADER:100, DATA:OFXSGML, VERSION:102 and so onAn XML declaration, then <?OFX OFXHEADER="200" VERSION="220" SECURITY="NONE" OLDFILEUID="NONE" NEWFILEUID="NONE"?>
Closing tagsOnly on aggregates; a single value such as <TRNAMT>-64.18 has noneRequired on every element: <TRNAMT>-64.18</TRNAMT>
Grammar fileA DTDAn XML Schema
Opens as XMLNoYes

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. 1

    <OFX>

    The root. Everything after the header sits inside it.

  2. 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. 3

    <BANKMSGSRSV1> › <STMTTRNRS>

    The banking messages, wrapped with a transaction ID and status. Credit cards use CREDITCARDMSGSRSV1 › CCSTMTTRNRS instead, and brokerages use INVSTMTMSGSRSV1.

  4. 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. 5

    <BANKTRANLIST>

    The date range (DTSTART and DTEND) followed by one STMTTRN per transaction.

  6. 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. 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 fileWhat 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.

TransactionAccountTRNAMTWhy
Customer payment depositedChecking2150.00Money into the account
Debit card purchaseChecking-37.60Money out of the account
PurchaseCredit card-64.18Adds to the amount owed
Payment to the cardCredit card1200.00Reduces the amount owed
Interest earnedSavings3.12TRNTYPE INT; the sign says which way
Interest chargedCredit card-21.75Same INT type, opposite sign
Balance owed (LEDGERBAL)Credit card-1873.40Balances 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.

QUESTIONS

What is an OFX file: common questions

Ask Damin directly
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

BOOK A CALL

Talk to Damin, our founder.

30 minutes. Pick a time on the next screen.

What would you like to talk about?