ConvertCSV

Finance file converter

OFX to CSV Converter

Extract OFX bank transactions, in SGML or XML form, into spreadsheet-ready CSV rows. Upload a file or paste its contents, check the parsed transactions, then download the CSV file.

  • No signup
  • Files stay on your device
  • Transaction preview
  • Download ready

1 · Source

Add your OFX file

.ofx.csv

2 · Result

Output preview

Nothing converted yet

A sample OFX file is loaded — press “Convert to CSV” to see how the output looks.

Designed for finance exports

The parser recognises date, description, amount, debit/credit, memo, category, and transaction id fields, including headers like Narration or Withdrawal Amt. used by many banks.

Check before you import

Each conversion shows the parsed transactions with money in, money out, and date range, plus warnings about ambiguous dates or missing account details.

Private browser workflow

PDFs and text files are read by your browser and never sent to a server. Close the tab and the data is gone.

OFX to CSV Converter

OFX (Open Financial Exchange) is the statement download format most US and Canadian banks offer next to CSV, and it is the file behind many “Download transactions” buttons. Open it in a text editor and you will see either SGML tags with no closing markers, such as <TRNAMT>-39.99 on one line, or well-formed XML with matching closing tags. Excel and Google Sheets do not read either one as a table, so the transactions stay locked inside the markup.

This OFX to CSV Converter reads the transaction list from a plain .ofx file and writes one CSV row per <STMTTRN> block. It accepts both the SGML and the XML flavour of OFX, and it also accepts .qfx files because Quicken’s Web Connect download is the same statement payload with a different extension. Paste the text or upload the file. The conversion runs in your browser, so the statement is never sent to a Convert CSV server.

The sections below show a real input and output pair, explain which OFX fields become which CSV columns, and cover the pitfalls that catch people when they reconcile a bank export in a spreadsheet: multiple accounts in one file, sign conventions, and transaction types the tool does not read.

Key features

  • Reads transactions from both SGML and XML OFX files, including a .qfx download, using the same parser as the QFX to CSV converter.
  • Writes Date, Description, Amount, Memo, Category, ID and Type columns, with the bank’s FITID kept in the ID column.
  • Uses ISO dates (YYYY-MM-DD) so the output sorts correctly in any spreadsheet without a date-order setting.
  • Shows a preview of the CSV before you download, so you can check row counts and the first few payees.
  • Runs in the browser with no account, and no statement text is sent to a server during conversion.
  • Points to related converters on the Finance File Converter hub: OFX to QBO for QuickBooks Web Connect, OFX to QFX, and OFX to PDF for a printable report.

About the OFX to CSV format

An OFX file has two parts. The first part is a header of colon-separated keys such as OFXHEADER, DATA, VERSION and ENCODING. The second part is the <OFX> body, which holds sign-on responses, then one or more statement responses. Bank accounts sit under BANKMSGSRSV1 and credit cards under CREDITCARDMSGSRSV1. Each statement contains a transaction list, and each transaction is wrapped in a <STMTTRN> block.

SGML OFX, the older form, leaves most leaf tags unclosed. A value runs from its opening tag to the next line break, so <NAME>Cloud hosting is the whole name. XML OFX, used by many newer bank APIs, wraps each value as <NAME>Cloud hosting</NAME>. Both forms carry the same fields, so the converter reads them with one rule: take the text after an opening tag up to the next “<” or line break.

The fields that matter for a spreadsheet are DTPOSTED (the posted date, written as YYYYMMDD with an optional time and time zone), TRNAMT (the signed amount), NAME (the payee or merchant), MEMO (extra detail the bank adds), FITID (the bank’s unique transaction id) and TRNTYPE (DEBIT, CREDIT, CHECK, ATM, POS and similar codes). The CSV keeps those as Date, Description, Amount, Memo, Category, ID and Type columns. Category is always empty because OFX has no category field.

How it works

The converter first splits the file at each <STMTTRN> tag, so every transaction becomes its own block. A block ends where the next transaction starts or where the transaction list closes, which works the same whether the file is SGML or XML.

For each block it reads the tag values it needs. DTPOSTED is trimmed to its first eight digits and rewritten as YYYY-MM-DD. TRNAMT is kept exactly as the bank wrote it, including the minus sign. NAME is used as the Description, and MEMO is kept separately; if NAME is missing, PAYEE or MEMO is used instead. Entities such as &amp; are decoded.

The rows are written under a single header line, with commas, quotes and line breaks inside values escaped the usual CSV way. If the file has no STMTTRN blocks, nothing is produced and the page reports that the transactions were not found.

Common use cases

  • A small-business owner downloads last month’s checking activity as OFX and needs a sheet to tag each payment as a business expense or a draw.
  • A bookkeeper receives OFX files from several client banks and wants one CSV layout per client before importing into a ledger.
  • A household budget spreadsheet needs card and checking transactions in the same columns, so pivot tables can total spending by month.
  • A reconciliation check compares the sum of Amount in the CSV with the closing balance printed on the bank statement.
  • A developer needs a quick sample of real transaction rows, with the FITID column kept, to test a parser or import script.

How to use this tool

  1. Download the statement from your bank as OFX (sometimes labelled “Quicken” or “Money” if the bank does not list OFX separately).
  2. Open /finance-file-converter/ofx-to-csv and paste the file contents, or upload the .ofx file.
  3. Check the preview: the row count should match the number of transactions you see online, and the dates should fall in the period you asked for.
  4. Download the CSV, or copy the text, and open it in Excel or Google Sheets. Choose UTF-8 if payee names contain accents.
  5. Reconcile the sum of Amount against the statement balance, then store the original .ofx with the working CSV.

Example

OFX (SGML, trimmed)

<OFX>
<BANKMSGSRSV1>
<STMTTRNRS>
<STMTRS>
<BANKTRANLIST>
<STMTTRN>
<TRNTYPE>DEBIT
<DTPOSTED>20260503000000
<TRNAMT>-39.99
<FITID>txn-2
<NAME>Cloud hosting
<MEMO>Software
</BANKTRANLIST>
</STMTRS>
</STMTTRNRS>
</BANKMSGSRSV1>
</OFX>

CSV

date,description,amount,memo,category,id,type
2026-05-03,Cloud hosting,-39.99,Software,,txn-2,DEBIT

Tips for best results

  • Export the widest date range the bank allows in one file. Overlapping monthly downloads are fine, but keep the FITID column so duplicates can be removed by id rather than by eye.
  • Check the first and last Date values in the preview against the statement period. A file dated 2026-07-31 that starts on 2026-06-01 usually means the bank included a few days of the previous period.
  • Look for a BANKACCTFROM or CCACCTFROM block before you trust the output. If you have a second account, its rows are added to the same table, so note which download each CSV came from in the file name.
  • Format the Date column as a real date in your spreadsheet after import. The converter writes ISO dates (2026-05-03), which Excel and Sheets sort correctly in every locale.
  • Keep the original .ofx next to the CSV. OFX is the source of record, and the CSV is a working copy you can rebuild at any time.

Common errors and how to fix them

The converter says no <STMTTRN> transactions were found.
The file is probably a PDF, a QIF or CSV export, or an investment statement. Confirm the first line is OFXHEADER or <?xml, then look for STMTTRN in a text editor. Investment-only downloads need a different tool.
The CSV has the right rows but every Amount is positive.
The converter keeps TRNAMT exactly as the file wrote it, so a positive value in the file stays positive in the CSV. Compare a few rows with the statement. If the bank’s signs are wrong in the source, flip them in the spreadsheet rather than editing the .ofx by hand.
Some payee names look cut short.
SGML OFX ends a value at the line break. If a NAME was wrapped in the file by an email client, the rest of the text moved to the next line. Re-download the file, or open it in a plain-text editor and join the broken line before converting.
The output has more rows than the statement page online.
A file can include several accounts. Count rows by account, and check whether the same FITID appears twice across two downloads that overlap.

Best practices

  • Name each CSV with the bank, the account nickname and the statement period, for example chase-checking-2026-05.csv, so you can tell files apart later.
  • Keep FITID. It is the only stable key the bank gives each transaction, and it is the easiest way to spot a transaction that appears in two overlapping downloads.
  • Convert one account per file where you can. The CSV has no account column, so one file per account keeps balances simple to check.
  • Reconcile the total before you categorize. A short check on row count and the sum of Amount catches a truncated download before it reaches the ledger.

SGML and XML OFX look different but produce the same CSV

Banks ship both forms, and the difference is easy to see when you open the file. In SGML the header has no closing tag and the values are not wrapped. In XML the header is followed by an XML declaration, and every value has a closing tag such as </TRNAMT>. Some banks also add an INTU.BID tag for Intuit products, which does not affect the transaction rows.

The converter does not ask which form you have. It looks for the transaction tags, reads each value up to its end, and produces the same seven columns either way. If a bank changes its export and a field moves, the preview is the place to see it, because a missing NAME falls back to MEMO and then to a generic “Transaction” label.

Checking the result before you rely on it

A short check takes a minute and catches most problems. Count the rows in the CSV and compare the number with the transactions you can see in online banking for the same dates. Add up the Amount column and compare the total with the change in balance across the period. If the two numbers disagree, the file is probably missing a block or includes a second account.

Look at the first and last dates. OFX posted dates are the bank’s posting dates, so a purchase made on a Friday may appear on Monday. That is normal, and it explains most small date differences between the statement and a receipt.

  • Row count matches the transaction list online for the same dates.
  • The sum of Amount matches the change in balance for the period.
  • No two rows share a FITID unless you intentionally merged overlapping files.
  • Dates fall inside the statement period you downloaded.

Frequently asked questions

Does this converter also handle QFX files?

Yes. A QFX file from Quicken’s Web Connect download contains the same STMTTRN transaction blocks as OFX, so the same parser reads it. The QFX to CSV page uses the same logic, and you can use either page for a .qfx download.

Why is the Category column empty?

OFX does not include a category or account-coding field. Banks put their own short labels into NAME and MEMO, but there is no standard category to copy. Fill the column in your spreadsheet, or use the Online CSV Editor after conversion.

Is my bank statement uploaded anywhere?

No. The text is read by JavaScript running in your browser tab, and the CSV is built there too. Closing the tab clears the page. Still, redact account numbers before you share the CSV with anyone, because the file names and memo text can contain them.

Can I convert an OFX file to Excel directly?

This page produces CSV, which Excel opens with File > Open or Data > From Text/CSV. If you want a formatted workbook, use the Finance File Converter’s QFX to Excel tool on the same file, or save the CSV and convert it with CSV to Excel.

For more background on data formats and conversion workflows, read our format guides.