100% Private

Bank Statement Formats Explained: OFX, MT940, QIF, QFX & SEPA

Banks export transaction data in dozens of different file formats. Whether you need to import statements into accounting software, reconcile transactions, or migrate between banking systems, understanding these formats saves hours of manual work. This guide covers every major bank statement format, when to use each one, and how to convert between them.

Why Bank Statement Formats Matter

Every bank, accounting package, and ERP system speaks a different file format dialect. When your bank exports MT940 but your bookkeeper's software only accepts OFX, you are stuck with manual data entry or an error-prone copy-paste workflow.

Common scenarios where format knowledge is essential:

  • Switching banks: Your new bank exports CAMT.053 but your old records are in QIF
  • Accounting software migration: Moving from QuickBooks (QFX) to Xero (OFX/CSV)
  • Corporate treasury: Consolidating statements from multiple banks in different countries
  • Tax preparation: Converting bank data to spreadsheets for your accountant
  • Audit compliance: Providing standardized transaction records to auditors

Format Overview: Quick Comparison

FormatTypeOriginPrimary UseRegion
OFXXML/SGMLIntuit/Microsoft/CheckFreePersonal bankingGlobal
MT940Tagged textSWIFTCorporate bankingGlobal
QFXXML (OFX variant)Intuit/QuickenQuicken softwareUS/Canada
QIFPlain textIntuit/QuickenLegacy QuickenUS/Canada
CAMT.053XML (ISO 20022)ISO/EPCSEPA statementsEurope
ISO 20022XMLISOGlobal standardGlobal
NACHAFixed-width textNacha (US)ACH paymentsUS
BAI2Delimited textBAI (US)Cash managementUS
CSVComma-separatedUniversalSpreadsheet fallbackGlobal

OFX (Open Financial Exchange)

OFX is the most widely supported bank statement format for personal and small business banking. Originally developed by Microsoft, Intuit, and CheckFree in 1997, it has become the de facto standard for downloading bank transactions into personal finance software.

OFX File Structure

OFX files use an XML-like structure with headers and tagged transaction blocks:

OFXHEADER:100
DATA:OFXSGML
VERSION:102
CHARSET:1252

<OFX> <SIGNONMSGSRSV1> <SONRS> <STATUS><CODE>0</CODE></STATUS> <DTSERVER>20260201120000 <LANGUAGE>ENG </SONRS> </SIGNONMSGSRSV1> <BANKMSGSRSV1> <STMTTRNRS> <STMTRS> <CURDEF>USD <BANKACCTFROM> <BANKID>123456789 <ACCTID>9876543210 <ACCTTYPE>CHECKING </BANKACCTFROM> <BANKTRANLIST> <STMTTRN> <TRNTYPE>DEBIT <DTPOSTED>20260115 <TRNAMT>-42.50 <FITID>2026011501 <NAME>GROCERY STORE </STMTTRN> </BANKTRANLIST> </STMTRS> </STMTTRNRS> </BANKMSGSRSV1> </OFX>

When to Use OFX

  • Importing into personal finance software (GnuCash, Money, Moneydance)
  • Bank downloads for small business bookkeeping
  • As an intermediate format when converting between other formats

Tip: Need to view OFX data in a spreadsheet? Use the OFX to CSV Converter to extract transactions into Excel-friendly format.

MT940 (SWIFT Standard)

MT940 is the SWIFT messaging standard for customer statement messages. Used by banks worldwide for corporate banking, it is the most common format for business-to-bank communication. The format uses cryptic field tags that require knowledge of SWIFT conventions to read.

MT940 Field Structure

MT940 uses numbered field tags. Each tag starts with a colon, followed by the tag number:

:20:STMT202602
:25:DEUTDEFF/DE89370400440532013000
:28C:00001/001
:60F:C260131EUR12500,00
:61:2602010201D42,50N029NONREF
:86:Payment to Supplier ABC GmbH
Invoice 2026-001
:61:2602050205C1500,00N062NONREF
:86:Customer payment received
Order #12345
:62F:C260205EUR13957,50

Key MT940 Field Tags

TagNameDescription
:20:Transaction ReferenceUnique statement identifier
:25:Account IdentificationBIC and account number
:28C:Statement NumberSequence number / page
:60F:Opening BalanceC/D flag, date, currency, amount
:61:Statement LineIndividual transaction
:86:InformationTransaction details (free text)
:62F:Closing BalanceFinal balance after transactions

When to Use MT940

  • Corporate banking and ERP integration (SAP, Oracle, Microsoft Dynamics)
  • Multi-bank cash management across countries
  • Automated bank reconciliation systems
  • Treasury management workflows

Working with MT940? Parse MT940 files into spreadsheet format with the MT940 to CSV Converter, or convert to OFX for personal finance software using the OFX to MT940 Converter.

QFX and QIF (Quicken Formats)

QFX (Quicken Financial Exchange)

QFX is Intuit's proprietary variant of OFX, specifically designed for Quicken software. It is essentially an OFX file with an additional INTUIT.BID header that identifies the financial institution. Most US and Canadian banks offer QFX downloads.

The key difference from standard OFX:

<!-- QFX adds this Intuit-specific tag -->
<INTU.BID>12345
<INTU.USERID>username

QIF (Quicken Interchange Format)

QIF is the original Quicken format from the 1990s. It uses a simpler line-based structure. Although officially deprecated by Intuit in 2005, many tools and banks still support it due to its simplicity:

!Type:Bank
D01/15/2026
T-42.50
PGrocery Store
LFood:Groceries
^
D02/01/2026
T1500.00
PClient Payment
LIncome:Services
^

Each field starts with a single letter code: D = date, T = amount, P = payee, L = category. The caret (^) marks the end of each transaction.

QFX vs QIF vs OFX

FeatureQFXQIFOFX
StructureXML (OFX + Intuit headers)Plain textXML/SGML
Quicken supportNativeImport onlySupported
Bank ID includedYesNoYes
Multi-accountYesNoYes
StatusActiveDeprecatedActive

Need to work with Quicken files?

SEPA Formats: CAMT.053 & ISO 20022

CAMT.053 (Bank-to-Customer Statement)

CAMT.053 is the ISO 20022 XML message type for bank account statements, used across the Single Euro Payments Area (SEPA). It replaces MT940 for European banking and provides richer structured data.

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08">
<BkToCstmrStmt>
<Stmt>
<Id>STMT-2026-02-001</Id>
<Acct>
<Id><IBAN>DE89370400440532013000</IBAN></Id>
<Ccy>EUR</Ccy>
</Acct>
<Bal>
<Tp><CdOrPrtry><Cd>OPBD</Cd></CdOrPrtry></Tp>
<Amt Ccy="EUR">12500.00</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Dt><Dt>2026-01-31</Dt></Dt>
</Bal>
<Ntry>
<Amt Ccy="EUR">42.50</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<BookgDt><Dt>2026-02-01</Dt></BookgDt>
<NtryDtls><TxDtls>
<RmtInf><Ustrd>Invoice 2026-001</Ustrd></RmtInf>
</TxDtls></NtryDtls>
</Ntry>
</Stmt>
</BkToCstmrStmt>
</Document>

CAMT.053 vs MT940

FeatureCAMT.053MT940
FormatXMLTagged text
Character setUTF-8 (full Unicode)SWIFT charset (limited)
Structured remittanceYesNo (free text only)
Party identificationName, IBAN, BIC, addressLimited
Reason codesISO standardized codesProprietary per bank
File sizeLarger (verbose XML)Compact
Machine readabilityExcellent (standard XML parsers)Requires specialized parser

ISO 20022: The Global Standard

ISO 20022 is the umbrella standard that includes CAMT.053 and many other message types. SWIFT is migrating all cross-border payments to ISO 20022, making it the future of financial messaging worldwide. Key message types include:

  • CAMT.053: Account statement (replaces MT940)
  • CAMT.052: Intraday account report
  • PAIN.001: Payment initiation (credit transfers)
  • PAIN.008: Direct debit initiation
  • PACS.008: Interbank credit transfer

European banking? Parse SEPA statements with the CAMT.053 to CSV Converter or handle broader ISO 20022 messages with the ISO 20022 to CSV Converter.

US Formats: NACHA & BAI2

NACHA (ACH File Format)

NACHA defines the file format for Automated Clearing House (ACH) transactions in the United States. ACH handles direct deposits, bill payments, and business-to-business transfers. NACHA files use a strict fixed-width format with 94-character records:

101 091000019 1234567890260201...  File Header
5200ABC Company        1234567890PPDPayroll   ...  Batch Header
62209100001912345678         0000004250Emp001       ...  Entry Detail
8200000001000910000010000000000000000042501234567890  Batch Control
9000001000001000000010009100001000000000000000004250  File Control

Each record type is identified by the first digit: 1 = File Header, 5 = Batch Header, 6 = Entry Detail, 8 = Batch Control, 9 = File Control.

BAI2 (Cash Management)

BAI2 (Bank Administration Institute version 2) is the US standard for corporate cash management reporting. Unlike NACHA, BAI2 is for reporting, not initiating transactions. It uses comma-delimited records with type codes:

01,BANKNAME,COMPANYID,260201,1200,001,80,1,2/
02,123456789,BANKNAME,1,260201,1200,USD/
03,9876543210,USD,010,125000,,015,134575,/
16,195,4250,0,260201,,REF001,Supplier Payment/
49,134575,2/
98,134575,1,2/
99,134575,1,2/

US banking formats? Use the NACHA to CSV Converter to parse ACH files or the BAI2 to CSV Converter for cash management reports.

Which Format Should You Use?

The right format depends on your specific use case:

ScenarioRecommended FormatWhy
Personal budgeting appOFX or QFXWidest software support for retail banking
Corporate ERP (SAP, Oracle)MT940 or CAMT.053Native ERP integration, structured data
Sending to accountant/auditorCSV or ExcelUniversal, readable without special software
European SEPA bankingCAMT.053EU regulatory standard, richer data than MT940
US payroll/ACH processingNACHARequired for ACH network transactions
Archival and long-term storageISO 20022 XML or CSVOpen standards with long-term readability
Multi-bank consolidationCSV (as common denominator)Every format converts cleanly to CSV

Converting Between Formats

The most common conversion paths and what to watch for:

To CSV (Universal Export)

CSV is the universal fallback. Every bank format converts to CSV with minimal data loss. The main consideration is column mapping, since each source format structures data differently.

From CSV (Creating Bank Files)

When you need to generate bank-format files from spreadsheet data:

Cross-Format Conversions

Data loss warning: Cross-format conversions may lose format-specific metadata. MT940 transaction type codes (N029, N062) have no OFX equivalent. CAMT.053 structured remittance information flattens to free text in MT940. Always verify converted output against the original.

Encoding and Character Issues

Character encoding is a common source of problems with bank statements, especially when dealing with international transactions:

Common Encoding Problems

  • MT940: Uses the SWIFT character set (subset of ISO 8859), which does not support all Unicode characters. Currency symbols like € may be written as EUR instead.
  • OFX: Often uses Windows-1252 (as declared in the CHARSET header), but some banks incorrectly declare encoding.
  • CAMT.053: Uses UTF-8 by default (XML standard), so encoding issues are rare.
  • CSV exports: Encoding depends entirely on the source system. European banks frequently use ISO-8859-1 or Windows-1252.

How to Fix Encoding Issues

  1. Check the file header for encoding declarations (CHARSET in OFX, <?xml encoding="..."?> in XML formats)
  2. If characters are garbled, try opening with a different encoding (UTF-8, Windows-1252, ISO-8859-1)
  3. Convert to UTF-8 before processing to standardize on a single encoding

For a deeper dive into text encoding, see our Text Encoding Guide.

Security and Privacy

Bank statements contain highly sensitive financial data. When converting or processing these files:

  • Use client-side tools: All ToolsDock converters process data entirely in your browser. No financial data is uploaded to any server.
  • Verify the tool: Check that the conversion tool explicitly states client-side processing. Avoid tools that require file uploads to remote servers.
  • Secure your files: Delete converted files after importing into your accounting software. Do not store bank statements in cloud storage without encryption.
  • Validate output: Always compare a few transactions in the converted file against the original to ensure accuracy before importing into financial systems.

Tools and Resources

Bank Statement Converters

Related: E-Invoice Validators

If you work with electronic invoicing alongside bank statements, these validation tools ensure compliance:

Further Reading

Privacy Notice: This site works entirely in your browser. We don't collect or store your data. Optional analytics help us improve the site. You can deny without affecting functionality.