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.
Finance file 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.
1 · Source
2 · Result
Nothing converted yet
A sample OFX file is loaded — press “Convert to CSV” to see how the output looks.
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.
Each conversion shows the parsed transactions with money in, money out, and date range, plus warnings about ambiguous dates or missing account details.
PDFs and text files are read by your browser and never sent to a server. Close the tab and the data is gone.
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.
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.
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 & 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.
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,DEBITBanks 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.
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.
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.