Skip to content
Free during beta · No sign-up

Bank statement to OFX

A single OFX statement file from your reviewed rows — one transaction record per row, a stable ID on each, and the statement’s currency and closing balance stated inside the file.

The sample is a synthetic statement — no real bank, person, or account — and the excerpt shown is taken from that exact file, byte for byte.

Sample OFXstatementstudio-sample.ofx · synthetic data · lines 36–46
<BANKTRANLIST><DTSTART>20260501<DTEND>20260531<STMTTRN><TRNTYPE>CREDIT<DTPOSTED>20260501<TRNAMT>3250.00<FITID>bd664bfd-4ff3-5593-bf29-54d574decd5a<NAME>BACS SALARY ACME LTD MAY PAY<MEMO>BACS SALARY ACME LTD MAY PAY</STMTTRN>

Inside the sample file: the transaction list opens with the statement period, then one record per reviewed row — type, date, amount, stable ID, name, memo.

What you download

What's inside the OFX file.

OFX isn't columns — it's a structured statement document. These are the fields that matter when your accounting software reads it.

OFXHEADER · VERSION
The file declares OFX 1.02 — the plain-text form of the standard that accounting packages accept for manual statement import.
CURDEF
The statement’s currency, stated once for the whole file. If the currency can’t be determined from the statement, the export refuses to generate rather than guessing.
One record per row
Each reviewed transaction becomes one record: the type derived from the amount’s sign, the date as YYYYMMDD, the signed amount, and the reviewed description as name and memo.
FITID
A stable ID on every record. Re-exporting the same reviewed data produces the same IDs, so software that checks IDs won’t create duplicates if a file is imported twice.
LEDGERBAL
The statement’s closing balance and its as-of date — taken from the statement itself, never computed to force agreement.
Account identifiers
The account ID uses only the masked digits printed on the statement; the bank ID is a neutral placeholder. No bank-issued identifiers are invented — your software imports this as a statement file, not a live feed.
Reviewed, then exported

Convert a bank statement to OFX — with the checking done first.

Every row is extracted beside its source page and checked against the statement's balances before it becomes a record. Here is one reviewed row, written as a full OFX transaction record:

DateDescriptionAmountSource page
4 May 2026DIRECT DEBIT CITY ENERGY(£124.40)1
<STMTTRN><TRNTYPE>DEBIT<DTPOSTED>20260504<TRNAMT>-124.40<FITID>1c639235-65d8-5a95-8513-5eadbb64fa0b<NAME>DIRECT DEBIT CITY ENERGY<MEMO>DIRECT DEBIT CITY ENERGY</STMTTRN>
What this file is — and isn’t

A statement file — not a bank feed.

OFX is the format banks use for downloadable statements, so some software expects bank-issued identifiers inside it. This file uses a neutral placeholder instead — your accounting app imports it as a file you chose, and nothing stays linked afterwards.

Importing an OFX file

  1. Download your reviewed OFX file.
  2. In your accounting software, open the manual statement or file import — Xero, Sage, and QuickBooks Online all accept an OFX file there.
  3. Select the file. The statement currency and closing balance travel inside it, so there are no columns to map.
  4. Review the import preview. If you ever re-import the same reviewed data, the stable record IDs let ID-checking software skip what it already has.

OFX is an open standard stewarded by the FDX OFX Work Group; Xero’s import flow is documented in Xero’s OFX import guide.

Stated limits

When this export refuses to generate.

A valid OFX file must state facts this product will not invent — so the export refuses when the statement doesn't provide them.

No determinable currency
OFX states one currency for the whole file. If the statement doesn’t establish it, or rows show a different currency, the export refuses rather than guessing.
No closing balance
A valid OFX file carries a ledger balance. If neither the statement’s closing balance nor a source-backed final running balance exists, the export refuses rather than computing one.
Duplicate row IDs
Record IDs must be unique — importing software dedupes on them, which would silently drop rows. The export refuses if IDs would collide.
Missing dates or amounts
Every record needs a date and a signed amount. If a reviewed row lacks either, this export stays unavailable until the row is resolved in review.

Review your transactions before importing, and check the import preview in your accounting software.

Other formats

Need a different shape?

QuickBooks CSV
Working in QuickBooks Online specifically? The three-column CSV maps onto its upload flow. Bank statement to QuickBooks CSV
QIF
The older cousin — simpler, no currency or balance inside. Bank statement to QIF
Everything else
The bank statement converter lists every output, including CSV and Excel with the full review trail.
Questions

About the OFX output

What can I import this OFX file into?

Xero, Sage, and QuickBooks Online all accept a manual OFX statement import — look for the manual statement or file-import option in your software.

Does OFX mean this is a bank feed?

No — it’s a file exported from your reviewed statement, not a live feed. Where OFX expects bank-issued identifiers, this file uses a neutral placeholder, so your software imports it as a statement file.

What is FITID and why does it matter?

A stable ID on each transaction record. Re-exporting the same reviewed data produces the same IDs, so software that checks IDs won’t create duplicates if a file is imported twice.

Why would this export be refused?

The file must state one currency and a closing balance — both are required for a valid OFX file. If either can’t be determined from the statement, or rows show more than one currency, the export refuses to generate rather than inventing values.

Why not QBO or QFX instead?

Both need bank-issued identifiers that a statement PDF doesn’t contain, so we don’t generate them. Plain OFX covers the same manual-import need without inventing identifiers.

Free during beta

Convert a bank statement to OFX — and check it first.