Shard Tools

OFX to CSV

Turn an OFX bank statement into a spreadsheet-ready CSV, without the file leaving your browser.

Maintained by Roshan · Page and browser-local behavior last reviewed August 31, 2026.

Browser-local statement reader

Use OFX to CSV

Reads an OFX statement in this tab and writes the transactions out as CSV. The file is never uploaded, which is the point: a statement names every counterparty you paid.

PDF and scanned statements are not supportedThis reads OFX, the structured file your bank generates for accounting software. A PDF statement is a page layout, not a data file, and pulling transactions out of one needs layout analysis or OCR that this tool deliberately does not do. Download the OFX version from your bank instead. Note also that accounting software rarely accepts a CSV as-is — most import screens ask you to map these columns to their own fields.

Checked against a 1.0.2 SGML export with unclosed leaf tags and a 2.1.1 XML export from a UK bank. The closing balance in LEDGERBAL uses the same amount tag as a transaction and is correctly excluded from the row count; timezone suffixes on DTPOSTED resolve to the posting day rather than shifting it.

More in this category

Explore developer and data tools tools

Find related browser-local tools for nearby tasks without starting another search.

Browse all developer and data tools tools

About OFX to CSV

Open Financial Exchange is the format banks settled on for handing account data to software rather than to people. Your bank generates it for accounting packages, and it holds everything a statement does — posting date, payee, memo, signed amount, transaction type and a unique identifier per row — in a structure a program can read exactly. What it does not do is open in a spreadsheet. Double-clicking an .ofx file gets you a chooser dialog or a wall of angle brackets, which is why so many people end up retyping a month of transactions by hand. This converter reads the file in your browser tab and writes the transactions out as CSV. There is no upload step, and this site operates no endpoint that could accept one. That matters more here than on most pages: a statement is a complete list of everyone you paid and how much, which is among the last things anyone should hand to an unfamiliar website in exchange for a download link.

Work through the input

  1. Two generations of OFX exist and both are read by the same parser. Version 1.x is SGML, where closing tags are optional and a value simply runs until the next tag begins. Version 2.x is well-formed XML. A file that omits half its closing tags is not broken; it is 1.x behaving normally.
  2. Only records inside <STMTTRN> blocks become rows. The closing balance in <LEDGERBAL> uses the same amount tag as a transaction, so a converter that scans for tags rather than tracking structure quietly adds the balance as an extra transaction. This one does not.
  3. <DTPOSTED> carries a timestamp and a bracketed timezone offset — 20260115120000[-5:EST] — and the calendar day is taken from the leading eight digits rather than converted, so a late-evening purchase does not slide onto the previous day.
  4. The statement's <CURDEF> declaration is applied to every row, and the account number from <BANKACCTFROM> or <CCACCTFROM> is carried into its own column so files from several accounts stay distinguishable after they are combined.
  5. Amounts are converted to whole pence or cents before anything is totalled, so summing several hundred rows returns an exact figure instead of one that is a penny out from floating-point drift.

When ofx to csv is useful

A year of statements for an accountant

Convert each monthly OFX in turn and concatenate the results. The account number column keeps rows from different accounts separable once they sit in one sheet.

Checking a figure without installing anything

Convert, sort by amount, and the largest debits are visible in seconds. The credits, debits and net movement are shown before you download, so an obviously wrong total is caught before the file goes anywhere.

Check the output

Questions about OFX to CSV

Why will my OFX file not just open in Excel?

Because it is a tagged data format rather than a table. Excel has no importer for it, and renaming the file to .csv produces a single column of tags. The structure has to be read and flattened first, which is what this does.

What is the FITID column for?

It is the financial institution transaction ID, a unique reference the bank assigns to each entry. It is the reliable key when matching this statement against a ledger, because two coffees on the same day for the same amount are otherwise indistinguishable.

Do the debit and credit signs survive?

Yes. OFX stores a signed amount, and the sign is preserved exactly as written, so debits stay negative. The summary totals credits and debits separately and shows the net movement so you can check the file against the statement you were sent.

Can it read a statement with several accounts in one file?

Yes. Each account block is read in turn and the account number travels with every row, so the combined CSV can be filtered back into separate accounts afterwards.

Related tools

QFX to CSV

Convert a Quicken QFX file to CSV in your browser. Works without a Quicken subscription. No upload, no bank login, no account needed.

QBO to CSV

Convert a QuickBooks .qbo Web Connect file to CSV in your browser. No upload, no QuickBooks licence, no bank feed. See every transaction before you import.

QIF to CSV

Convert a QIF file to CSV in your browser, with the day/month order made explicit instead of guessed. No upload, no account, no bank connection.

Local Reconciliation Suite

Reconcile bank, ledger, processor and marketplace exports in your browser. Write your own matching rules, review the exceptions, and export a full audit package. The files are not uploaded.

CSV to JSON Converter

Convert CSV to a JSON array locally. Parse quoted commas, embedded newlines, BOM files, duplicate headers, sparse rows, and optional safe value types.