OFX to CSV converter
Turn a bank's OFX, QFX or QBO download into a CSV, one row per transaction. Your statement never leaves your browser.
Drop an OFX, QFX or QBO file here
An .ofx, .qfx or .qbo file from your bank, up to 100 MB. It stays on your computer.
No file to hand?
- No sign-up
- Nothing uploaded
- QFX and QBO too
A CSV with one row per transaction.
Your statement stays on your computer
The file is read and the CSV is written in your browser. Nothing is sent to Mammoth or anyone else.
Every account in the file
A download with checking, savings and a credit card in it gives one CSV, with an Account column on each row.
Investment files too
Buys, sells and dividends each get a row, with the quantity, the price and the name of the security.
How to convert OFX to CSV
Each transaction becomes a row with its date, description, memo and amount. Columns the file leaves empty are left out.
- 1
Add your bank file
Drop an .ofx, .qfx or .qbo file on the box, or choose one from your downloads.
- 2
Check the rows
A preview shows the transactions. Pick a date style, or split money in and money out.
- 3
Download
Save the CSV, with commas, semicolons or tabs, or save it as an Excel file.
Other ways to do it
Python can read an OFX file too. The difference is the code you write, and what happens to the dates.
Python with ofxparse
A script that runs every month
- Keeps the date the bank postedNo
- Reads investment statementsYes
- Every account in one fileYes
- No code to writeNo
- This page
This converter
A clean CSV in one step
- Keeps the date the bank postedYes
- Reads investment statementsYes
- Every account in one fileYes
- No code to writeYes
How to convert OFX to CSV in Python
The ofxparse library reads an OFX, QFX or QBO file, and Python's csv module writes the rows. Here is the whole script.
Want a spreadsheet, not a CSV? The OFX to Excel converter writes an .xlsx with real dates and amounts. For a PDF statement, use the bank statement converter.
import csv
import ofxparse
with open("statement.ofx", "rb") as f:
ofx = ofxparse.OfxParser.parse(f)
with open("statement.csv", "w", newline="") as out:
w = csv.writer(out)
w.writerow(["date", "payee", "memo", "amount"])
for account in ofx.accounts:
for t in account.statement.transactions:
w.writerow([t.date.date(), t.payee, t.memo, t.amount])For a bank or credit card file (ofxparse 0.21). ofxparse turns each posting time into UTC, so in our test a transaction posted at 20:20 on 15 December came out dated 16 December. Investment rows have no payee, so they need their own columns.
Your file stays private
The converter runs inside this page. Your bank file is read and turned into a CSV on your computer, and nothing is sent to Mammoth. Your account numbers and transactions stay with you.
Once the page has loaded, it works with your internet switched off.
Getting a statement every month?
Mammoth can take it from there. Put each month's CSV in a folder and the rows are added to one table, ready to filter, total and download.
Bank statements
| August | Aug 01 | Harbor & Pine Payroll | 2,150.00 | |
| August | Aug 14 | City Water Utility | -58.12 | |
| September | Sep 02 | Blue Door Coffee | -4.50 | |
| October | Oct 05 | Check 1042 | -1,200.00 | |
| October | Oct 31 | Interest paid | 0.42 |
Illustration. Every new file in the folder is added to the same table.