OFX to CSV Converter

Turn an OFX or QFX bank statement into a CSV table in your browser: the seven columns the file actually carries, amounts as plain decimals, dates that sort, and nothing sent anywhere.

Choose your OFX file
Pick the bank statement you want as a table.

Your statement stays on this device.

How to Convert OFX to CSV

An OFX to CSV conversion here runs in one tab: the statement is read where it sits, the records become rows, and the file you download is the only copy that goes anywhere.

  1. 1
    Choose your .ofx or .qfx file, or drag it onto the drop area
  2. 2
    Convert; every transaction record in the file becomes a row
  3. 3
    Check the count it reports against the statement, then download the .csv

Amounts come out as plain decimals, so a spreadsheet reads a column of them as numbers rather than as text, and dates come out as YYYY-MM-DD, which sorts correctly in any tool. What is not in the file: a running balance and a currency, because neither one belongs to a single row.

What an OFX Statement Holds, and What a CSV Keeps

OFX is not a spreadsheet format that someone made awkward. It is a message format: a statement arrives as tagged records, one block per transaction, and each block carries its own date, amount, payee and reference. That is why a bank can hand you a .ofx file and why a double-click on it opens a wall of tags instead of a table. An OFX to CSV conversion is the act of flattening those records into a grid, and flattening is a decision with consequences: whatever belongs to a record survives, and whatever belongs to the statement as a whole has nowhere to sit. This page converts in that direction only, and it never invents a value the file did not carry.

OFX is a published, maintained format rather than a bank's private export: it is looked after by the OFX Work Group at the Financial Data Exchange, which is why statements from different banks follow the same shape.

Records or Rows: Why a .ofx Is Not a Table Yet

Two shapes are at work in this conversion, and the difference between them explains almost every surprise in the result. A statement is a stream of records, each one self-describing, so it can carry a field that appears in one record and not the next. A CSV is a grid, where every row has the same columns and an empty cell is the only way to say nothing. An OFX to CSV conversion means deciding, once, which fields are columns, and then living with that decision for every row in the file. If you want the same rows with formatting, formulas or more than one sheet, the XLSX version of this page writes a workbook instead of a CSV.

One file, two shapes
A .ofx file is records with tags; a .csv file is a grid. The conversion is the act of turning the first into the second.
What the tags cost you
Nothing opens a .ofx file as a table, because there is no delimiter to split on. The tags are the structure, and a spreadsheet has no way to guess it.
What the grid costs you
A running balance and a currency belong to the statement rather than to a transaction. A table of transactions has no column for either, so neither is in the CSV.
Where the reference number goes
A statement gives every transaction an id of its own, and a card download usually has no cheque number. The Transaction ID column takes whichever of the two the file carries.

The Seven Columns, and Where Each One Comes From

Every column in the CSV is a field the statement already held. This is the mapping an OFX to CSV conversion follows, in the order the columns are written.

CSV columnWhich OFX tag it comes from
DateDTPOSTED, the date the bank posted the transaction, rewritten as YYYY-MM-DD so that a column of dates sorts in order.
TypeTRNTYPE, the kind of movement: a debit card payment, a cheque, a transfer, a fee.
AmountTRNAMT, kept with the sign the file used and written as a plain decimal. Money out is usually negative, but the sign is read rather than assumed.
NameNAME, or PAYEE in files that use the older tag, which is the name on the register line.
MemoMEMO, when the bank sent one along with the transaction. It is often empty on card payments.
Transaction IDFITID, the statement's own id for the record. A file without one falls back to CHECKNUM.
AccountACCTID, taken from the statement's own account block rather than from the account at the other end of a transfer.

When the Result Is Empty or Shorter Than Expected

Almost every surprising result comes from the file rather than from the OFX to CSV conversion itself. These are the ones worth knowing before you assume something is broken.

A brokerage statement
Trades are kept in their own records rather than in transaction rows, so a brokerage statement converts to its cash movements only. A file with no cash rows converts to nothing, and the converter says so rather than leaving an empty table unexplained.
A file with no transaction records
Some OFX files carry only balances or account information. There is nothing to lay out as rows, which is a fact about the file rather than a fault in the conversion.
Amounts that look the wrong way round
The sign comes from the file. If a bank writes its spending as a positive number, the CSV shows it that way too, because flipping it would be inventing data.
Payees with commas or accents
A name containing a comma is quoted so that the column does not split, and the older single-byte encodings are decoded from the charset the file declares rather than assumed to be UTF-8.

What the CSV Is Good For

A CSV is the plainest thing a table can be, which is why the output of an OFX to CSV conversion goes almost anywhere.

  • Import the rows into accounting software that takes a CSV but not an OFX file
  • Build a pivot table by month, by payee or by type
  • Reconcile the statement against a second export from the same account
  • Hand an accountant a file they can open without an account of their own
  • Keep an archive that will still open in ten years

OFX to CSV Questions

An OFX file is a run of tagged records, not a table, so a spreadsheet opens it as one column of tags. Converting it to CSV or XLSX is what turns each record into a row, and this page does that in your browser.

Not as a table. Excel reads it as text, because the file is not delimited by commas or tabs. Once it is a CSV, Excel, Sheets and Numbers all open it directly.

Seven: Date, Type, Amount, Name, Memo, Transaction ID and Account. They are the fields a statement's records carry, and the field guide below says which tag each one comes from.

They are not in the CSV by design. A balance belongs to the statement rather than to any one transaction, and a table of transactions has no column to put it in, so the file keeps only what belongs to a row.

A brokerage statement keeps its trades in their own records rather than in transaction rows, so only the cash movements can be read. When the converter finds none, it says so instead of leaving you with an unexplained empty table.

No. The file is read in the page you are looking at, and no copy of it leaves your device.

Not on this page: it reads .ofx and .qfx statements, which is what most banks hand you. A .qbo file is a QuickBooks download rather than a bank one, and the QBO to CSV page reads that format.

Turn a statement into a plain table

No account, nothing uploaded, and the same seven columns every time.