Skip to content

CSV to OFX Converter

Build an OFX 1.0.2 bank statement from a CSV with date, amount and payee columns, in your browser, with a unique ID for every row.

CSV to OFX Converter

Build an OFX bank statement from date, amount and payee columns.

Maximum file size: 25 MB per file. You can also drag files here.

Supported scope and limitations

Builds an OFX 1.0.2 bank statement from date, amount and payee columns. The account identifiers are placeholders, and the ledger balance is the net total of the rows, not your real account balance. Review a small import before loading a full statement.

Examples contain invented demonstration data. Replace it before using any export.

Privacy: files are processed in your browser and are never uploaded.

Convert CSV to OFX when a bank only gives you a spreadsheet but your money app imports Open Financial Exchange files. This CSV to OFX converter reads a date, an amount and a payee column, plus an optional memo column, and writes an OFX 1.0.2 bank statement with one STMTTRN block per row. The result is a small, standard file you can test in your app before you load a whole year.

How to use the CSV to OFX converter

  1. Choose a .csv file with a header row.
  2. Pick the Input date format: iso for 2026-01-05, mdy for 01/05/2026 or dmy for 05/01/2026.
  3. Type your column names if they are not date, amount and payee, and name a category column if you want it as the memo.
  4. Select Process files and download transactions.ofx.

What goes into the OFX file

The OFX 1.0.2 specification lists the parts a statement response needs. The file starts with the OFX header lines, then a sign-on response with a status code, then the bank message set. Inside it, STMTTRNRS carries a transaction ID and status, and STMTRS holds the currency, the account, the transaction list and a required ledger balance. The transaction list must start with DTSTART and DTEND. This CSV to OFX converter fills all of these in.

Each row becomes DEBIT when the amount is negative and CREDIT otherwise. Every row gets its own FITID that includes its position in the file, because apps use that ID to skip duplicates. Two identical coffees on the same day therefore import as two transactions, not one.

Worked example: two rows

date,amount,payee,category
2026-01-05,-12.50,Cafe,Food
2026-01-06,100.00,Refund,

The output lists a DEBIT of -12.50 to Cafe with memo Food, and a CREDIT of 100.00 from Refund. DTSTART is 20260105 and DTEND is 20260106. The ledger balance is 87.50, the net total of the two rows.

CSV to OFX example result preview
Illustrative result from this CSV to OFX converter using a fictional test file.

Placeholders you should know about

A CSV has no account details, so the account fields are placeholders: bank ID 000000000, account ID CSV, type CHECKING and currency USD. The ledger balance is the net of your rows, not your real balance, because the spreadsheet does not say what that is. Most apps ask which account to import into and ignore these values, but test one small CSV to OFX file first and check the result before importing more.

Common CSV to OFX errors

  • Use a valid date in the selected format, with an end after its start. A date does not match the format you picked.
  • Use a decimal amount with no currency symbol and at most two decimal places. Remove $, thousands separators and extra decimals.
  • Transaction text cannot contain line breaks. A payee or memo cell has a line break in it.
  • A required field or column is missing. The column names you typed are not in the header row.

Privacy: your transactions stay in your browser

The CSV to OFX converter runs with JavaScript in a background worker on this page. We checked the tool code: the statement is read from your device into browser memory, nothing is sent to a FileFix or Calcenzo server, and the only network requests the tool makes are for its own static files. Your file stays in your browser. The download is built in memory too. Bank files carry account numbers and balances, so on a shared computer clear the selection or close the tab when you are done.

Need a different import format? The CSV to QIF converter writes QIF, and the OFX to CSV converter lets you open the result and check every row.

Sources

The CSV to OFX converter follows these specifications and format guides:

Questions about this tool

Which OFX version does it create?

OFX 1.0.2 in SGML form, with a sign-on response, status codes, a transaction list with start and end dates and a ledger balance.

Why does the file show account CSV?

A spreadsheet has no account details, so the account fields are placeholders. Your app normally asks which account to import into.

Is the ledger balance my real balance?

No. It is the net total of the rows in your CSV. Check your account balance in your app after import.

Will identical rows be merged?

No. Every row gets its own FITID, so two identical transactions on the same day both import.

Is my CSV uploaded?

No. The OFX file is built in your browser.

Review the supported formats and limitations before using an output file. File processing happens in your browser.