Skip to content

CSV to OFX converter

Upload the CSV your bank exported and download an .ofx file: every row becomes an OFX transaction with its date, signed amount, description and an ID the importing app uses to skip lines it already has. The columns are found by their headers or their contents, so there is nothing to map.

Upload a file

Read your statement

pages ready to read.

Drag your CSV hereA bank CSV — as many at once as you likeChoose files

What the OFX file contains

  • One <STMTTRN> record per row of the CSV, in the same order
  • Dates as YYYYMMDD, so the importer cannot swap day and month
  • A signed amount — two Debit/Credit columns become one
  • A <FITID> per transaction; two identical lines on the same day get different IDs, so neither is dropped
  • The description in <NAME> (first 32 characters, the payee column importers show) and in full in <MEMO>
  • The currency the CSV names in <CURDEF>, USD when it does not say, and the closing balance when the CSV has a balance column

How CSV columns map to OFX fields

Your CSV columnOFX fieldWhat happens to it
Date, Transaction Date, Posting Date, Booking Date<DTPOSTED>Written as YYYYMMDD. Day-first or month-first is decided once for the whole file.
Amount, or Debit / Credit<TRNAMT>One signed amount; <TRNTYPE> is DEBIT or CREDIT from its sign.
Description, Payee, Merchant, Details, Memo<NAME>, <MEMO>Accents are taken off (Café → Cafe), because the file is declared plain ASCII.
Balance, Running Balance<LEDGERBAL>The last balance becomes the statement’s closing balance.
—<FITID>Built from the date, amount and description, so the same file converted again gets the same IDs.
Posting Date,Description,Debit,Credit,Balance
2026-03-02,Direct Debit 4471 Acme Insurance,120.00,,1880.00
2026-03-04,Card Payment Corner Grocer,38.40,,1841.60
2026-03-06,Transfer Received J Smith,,500.00,2341.60
A typical bank CSV. Uploaded here, it becomes the .ofx file shown below.

What the OFX file looks like

The CSV above as an OFX file. Each <STMTTRN> block is one transaction; <FITID> is the ID the importing app uses to skip a line it already has, and <LEDGERBAL> carries the closing balance from the Balance column.

OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE

<OFX>
<SIGNONMSGSRSV1>
<SONRS>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<DTSERVER>20260310120000</DTSERVER>
<LANGUAGE>ENG</LANGUAGE>
</SONRS>
</SIGNONMSGSRSV1>
<BANKMSGSRSV1>
<STMTTRNRS>
<TRNUID>1</TRNUID>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<STMTRS>
<CURDEF>USD</CURDEF>
<BANKACCTFROM>
<BANKID>000000000</BANKID>
<ACCTID>0000000000</ACCTID>
<ACCTTYPE>CHECKING</ACCTTYPE>
</BANKACCTFROM>
<BANKTRANLIST>
<DTSTART>20260302</DTSTART>
<DTEND>20260306</DTEND>
<STMTTRN>
<TRNTYPE>DEBIT</TRNTYPE>
<DTPOSTED>20260302</DTPOSTED>
<TRNAMT>-120.00</TRNAMT>
<FITID>20260302-12000-DirectDebit</FITID>
<NAME>Direct Debit 4471 Acme Insurance</NAME>
<MEMO>Direct Debit 4471 Acme Insurance</MEMO>
</STMTTRN>
<STMTTRN>
<TRNTYPE>DEBIT</TRNTYPE>
<DTPOSTED>20260304</DTPOSTED>
<TRNAMT>-38.40</TRNAMT>
<FITID>20260304-3840-CardPayment</FITID>
<NAME>Card Payment Corner Grocer</NAME>
<MEMO>Card Payment Corner Grocer</MEMO>
</STMTTRN>
<STMTTRN>
<TRNTYPE>CREDIT</TRNTYPE>
<DTPOSTED>20260306</DTPOSTED>
<TRNAMT>500.00</TRNAMT>
<FITID>20260306-50000-TransferRec</FITID>
<NAME>Transfer Received J Smith</NAME>
<MEMO>Transfer Received J Smith</MEMO>
</STMTTRN>
</BANKTRANLIST>
<LEDGERBAL>
<BALAMT>2341.60</BALAMT>
<DTASOF>20260306</DTASOF>
</LEDGERBAL>
</STMTRS>
</STMTTRNRS>
</BANKMSGSRSV1>
</OFX>
Three transactions from a sample statement, exactly as the downloaded .ofx file writes them.

Where the OFX file imports

Xero
Accounting › Bank accounts › Manage Account › Import a Statement. Xero recommends OFX over CSV because nothing has to be mapped. See importing into Xero.
MYOB, Sage, GnuCash, Moneydance, Banktivity
Each reads OFX through its bank statement or file import; you pick the account it belongs to.
YNAB and Actual Budget
Both import OFX on the account’s Import option.
QuickBooks
QuickBooks Online takes .qbo as well as .ofx and recommends .qbo — use CSV to QBO.
Quicken for Windows
Quicken’s help says it does not import .ofx files. Use its CSV import instead: bank statement to Quicken.

How to convert

  1. Export the CSV from your bank

    Most banks offer CSV next to the PDF statement, under statements, activity or export.

  2. Upload it here

    Drop the .csv in above — OFX is already the selected output. Several CSVs can go in at once.

  3. Import the OFX

    Use your app’s bank statement import, pick the .ofx and the account.

Statements it handles

Layouts differ from bank to bank, so nothing is matched against a fixed template. An unusual statement still produces a table you can check before exporting — which is what makes it usable for bookkeepers and accountants who receive statements from every client.

PDF statements and CSV exports

A statement downloaded from your bank, or the CSV your bank lets you export. Both arrive as the same clean table.

Multi-page statements, read as one table

A statement that runs over several pages — or several statements uploaded together — is read as one continuous table, not one file per page.

Amounts and dates kept as your bank prints them

Debit and credit signs, decimal places and date formats are left as printed, so the numbers still reconcile against the statement.

Scanned, image-only PDFs, read with OCR

A statement with no text layer is read with OCR and may need a quick review — the one case where a row can come out wrong.

  • PDF
  • CSV
  • Scan
DateDescriptionAmount
02/03Direct Debit 4471120.00
04/03Card Payment-38.40
06/03Transfer Received500.00
08/03Standing Order-250.00
11/03Salary Payment2,400.00

Frequently asked questions

How do I convert a CSV to OFX?

Upload the CSV above, keep OFX as the output and download the .ofx file. Columns are detected for you, so there is nothing to map, and no account is needed.

Is there a free CSV to OFX converter?

Each CSV file counts as one page, and the first 3 pages of your first upload are free — three CSV files convert at no cost. After that it is $0.20 a file with a $3.90 minimum per batch, and no subscription.

Which apps import an OFX file?

Xero, MYOB, Sage, GnuCash, Moneydance, Banktivity, YNAB and Actual Budget, among others. QuickBooks prefers .qbo and Quicken for Windows does not take .ofx — each has its own page here.

Will importing the same file twice duplicate my transactions?

Apps that honour <FITID> skip the second copy: converting the same CSV again gives the same IDs. Two genuinely identical transactions on one day get different IDs, so both are kept.

Can I convert a CSV to QFX?

No. A QFX carries an Intuit bank ID that Quicken checks against the banks that offer Web Connect, so it has to come from your bank. For Quicken, use its CSV import: bank statement to Quicken.

Is my file kept after conversion?

No. The file is deleted when the conversion finishes; only the converted copy stays at your private link.