Skip to content

OFX to CSV

Converter Tools ·
·

Convert an OFX bank or credit-card statement to CSV with Date, Amount, Type, Name, Memo, and FITID columns. Parses unclosed SGML tags in your browser.

What’s inside an OFX file anyway?

Your bank lets you download a statement, you pick OFX, and you end up with a file Excel flat-out refuses to open. Annoying. OFX (Open Financial Exchange) is the format Quicken, Money, and dozens of accounting apps speak to each other. It’s great for software, terrible for a human staring at it.

Paste the contents here and every transaction drops into a row. The columns cover Date, Amount, Type, Name/Payee, Memo, Check Number, Reference Number, FITID, plus the Account ID, Account Type, Bank ID, and Currency the transaction came from. If your file holds a checking statement and a credit-card statement together, each row keeps the account it belongs to, so nothing gets cross-posted. From there it’s a normal spreadsheet. Sort by amount, filter the debits, sum a category, or feed it into whatever bookkeeping tool actually wants CSV.

Under the output you get a running tally: money in, money out, the net, and the ledger balance when the statement carries one. Pick a comma, semicolon, or tab delimiter, add a UTF-8 BOM if Excel mangles your accents, and optionally append the LEDGERBAL and AVAILBAL rows to the bottom of the CSV.

The two flavors of OFX, and why they trip up parsers

Here’s the catch most converters miss. There are two dialects, and they look different.

Older statements (OFX 1.x) are SGML. Leaf tags never close:

<TRNAMT>-12.40
<NAME>Blue Bottle Coffee

The value just runs until the next tag starts. Newer ones (OFX 2.x) are proper XML and close everything: <TRNAMT>-12.40</TRNAMT>. Banks ship both, sometimes in the same .qfx download. This parser reads each field by grabbing whatever sits between the opening tag and either its closing tag or the next <. So both shapes come out the same.

It also decodes the SGML entities. &amp; turns back into &, &lt; into <, numeric references like &#233; into the actual character. A memo that reads Card purchase &amp; tip in the raw file shows up as Card purchase & tip in your CSV.

How each transaction gets read

The parser splits the file into statements first, so a bank statement and a credit-card statement in the same download each keep their own account. Then inside every <STMTTRN> block, which is where banks wrap one transaction, it pulls these fields:

  • DTPOSTED becomes the Date. A value like 20260503 reads as 2026-05-03. When it carries a time and a [-5:EST] style timezone bracket, the bracket is stripped and the local posted time is kept as-is. It stays on the bank’s own calendar date on purpose: converting to UTC could roll a late-evening charge onto the next day and throw off a reconciliation.
  • TRNAMT is the Amount, signed. Debits stay negative, credits positive, exactly as the bank wrote them. A leading + on a credit is dropped so it reads as a plain number.
  • TRNTYPE is the Type: DEBIT, CREDIT, CHECK, FEE, INT, and so on.
  • NAME (or the PAYEE aggregate when present) becomes the Name/Payee column.
  • MEMO is the free-text note, often the full merchant string or a check description.
  • CHECKNUM and REFNUM land in the Check Number and Reference Number columns.
  • FITID is the bank’s unique ID for that transaction. Handy for dedup when you’re merging months. If a statement omits it, a stable AUTO- id is generated so no two rows collide.
  • BANKID / ACCTID / ACCTTYPE and CURDEF ride along from the statement so every row says which account and currency it belongs to.

Missing fields don’t break anything. If a transaction has no memo, that cell is just blank and your columns stay aligned.

The CSV it hands back

Output follows RFC 4180. Any field holding a comma, a quote, or a line break gets wrapped in double quotes, and inner quotes are doubled. That’s what stops a merchant name like Whole Foods Market #221, Austin from splitting into two columns. Rows end with CRLF, which is what Excel expects on import.

Hit Download for a transactions.csv, or copy the text straight into a sheet. Nothing uploads. The parsing runs in your browser, which matters here since a statement is about as sensitive as a file gets.

FAQ

Does it work with .qfx files from Quicken?

Yep. QFX is OFX with a couple of Intuit-specific tags bolted on. The transaction blocks are identical, so paste the contents and it parses fine.

Why is my amount showing as negative?

That’s straight from the bank. OFX records spending as a negative TRNAMT and deposits as positive. The converter doesn’t flip signs, so a -12.40 purchase stays -12.40.

What’s the FITID column for?

It’s the bank’s unique fingerprint for each transaction. If you import two overlapping statements, matching on FITID is how you drop the duplicates instead of double-counting.

My file won’t open in Excel directly. Can I just paste it here?

That’s the idea. Open the OFX in any text editor, copy everything, paste it into the input box. You don’t need a clean file or a specific extension.

Does it handle both the old and new OFX versions?

It does. Unclosed SGML tags from OFX 1.x and fully-closed XML tags from OFX 2.x both parse correctly, including files that mix conventions.

converter ofx csv finance bank-statement

Related Tools

More in Converter Tools

Square Meters to Square Feet

Convert square meters to square feet in the browser. One sq m is 10.7639 sq ft. Live converter with a unit dropdown and a reference table for floor plans.

XML to TXT

Strip XML tags and pull clean plain text from any markup. Collapse whitespace, label elements, or flatten to one line. Runs in your browser.

Yards to Meters

Convert yards to meters in the browser. One yard equals exactly 0.9144 meters. Live converter with a unit dropdown and a reference table for sports and fabric.

YAML JSON Converter

Bidirectional converter between YAML and JSON with support for objects, arrays, and nested structures

Acres to Square Feet

Convert acres to square feet in your browser. One acre is exactly 43,560 sq ft. Live converter with a unit dropdown and a reference table for land and lots.

Bar to PSI

Convert bar to psi instantly. 1 bar equals 14.5038 psi. Live pressure converter with a reference table for tires, espresso, and diving. Browser-side.

Celsius to Fahrenheit

Convert Celsius to Fahrenheit instantly. F = C x 9/5 + 32. Anchors: 0C is 32F, 100C is 212F, body temp 37C is 98.6F. Runs in your browser.

Celsius to Kelvin

Convert Celsius to Kelvin instantly. K = C + 273.15. Anchors: 0C is 273.15K, absolute zero is -273.15C (0K), 100C is 373.15K. Runs in browser.

CM to Inches

Convert centimeters to inches instantly in your browser. 1 inch equals 2.54 cm exactly, so 1 cm is 0.393701 inches. Live converter plus a reference table.

Cooking Converter

Convert between cooking units, cups, tbsp, tsp, ml, oz, grams, lbs, and oven temperatures (°F, °C, gas mark).

Color Format Converter Pro

Convert colors between HEX, RGB, HSL, HSV, CMYK, CSS modern syntax, and integer formats

Cups to ML

Convert cups to milliliters for cooking and baking. 1 US cup equals 236.588 ml. Handles the US cup vs 250 ml metric cup gap, live in your browser.

View all 62Converter Tools