Free ISO 20022 Parser
Paste or open a pain, pacs or camt XML file to see its payments, parties, statuses and balances in plain lines.
What is an ISO 20022 Parser?
ISO 20022 is the XML standard banks now use for payments: pain messages between customers and banks, pacs between banks, and camt for statements and investigations. The files are long and deeply nested. This parser pulls out what matters in a few readable lines.
It identifies the message from its namespace or root element, reads the business application header used by CBPR+, and summarises credit transfers, direct debits, returns, status reports and statements. NbOfTxs and CtrlSum are checked against the transactions, IBAN check digits are verified, and a paths view lists every element.
Key Features
Thirteen Message Types
pain.001, 002 and 008, pacs.002 to 009, and camt.052, 053, 054, 056 and 029 recognised.
Payments Summarised
Parties, accounts, agents, amounts, end-to-end IDs, UETRs and remittance text.
Totals Checked
NbOfTxs and CtrlSum compared with the transactions, using exact decimal sums.
Statuses Explained
pain.002 and pacs.002 statuses and reason codes such as AC04 in words.
Stays on Your Computer
The XML is parsed in your browser and never uploaded.
Perfect for everyone
- Payments developers
- Treasury and finance teams
- Bank operations and anyone migrating from MT messages
How to Use the ISO 20022 Parser
Paste the XML or open the file.
Get the File
Export it from your ERP or bank portal, or copy it from a payment hub log.
Paste or Open
Whole documents, with or without an envelope and business header.
Read the Summary
Payments, statuses or balances in order, with checks flagged in place.
Map With Paths
Paths lists every element and attribute, which helps when mapping fields to a system.
ISO 20022 Messages, Parsed
Each row is an ISO 20022 document as banks and ERPs exchange them, and each answer is this parser’s output in the mode on the chip. Parties and BICs are fictional; the IBANs are standard examples.
“<?xml version="1.0" encoding="UTF-8"?> <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09"> <CstmrCdtTrfInitn> <GrpHdr><MsgId>BATCH-20261028-01</MsgId><CreDtTm>2026-10-28T09:15:00</CreDtTm><NbOfTxs>2</NbOfTxs><CtrlSum>1790.25</CtrlSum><InitgPty><Nm>ACME GmbH</Nm></InitgPty></GrpHdr> <PmtInf> <PmtInfId>PMT-01</PmtInfId><PmtMtd>TRF</PmtMtd><ReqdExctnDt><Dt>2026-10-29</Dt></ReqdExctnDt> <Dbtr><Nm>ACME GmbH</Nm></Dbtr><DbtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>BANKDEFFXXX</BICFI></FinInstnId></DbtrAgt> <CdtTrfTxInf> <PmtId><EndToEndId>INV-2026-0042</EndToEndId></PmtId><Amt><InstdAmt Ccy="EUR">1250.00</InstdAmt></Amt> <CdtrAgt><FinInstnId><BICFI>BANKGB2LXXX</BICFI></FinInstnId></CdtrAgt><Cdtr><Nm>ACME UK Ltd</Nm></Cdtr><CdtrAcct><Id><IBAN>GB29NWBK60161331926819</IBAN></Id></CdtrAcct> <RmtInf><Ustrd>Invoice 2026-0042</Ustrd></RmtInf> </CdtTrfTxInf> <CdtTrfTxInf> <PmtId><EndToEndId>INV-2026-0057</EndToEndId></PmtId><Amt><InstdAmt Ccy="EUR">540.25</InstdAmt></Amt> <Cdtr><Nm>Muster Logistik AG</Nm></Cdtr><CdtrAcct><Id><IBAN>CH9300762011623852957</IBAN></Id></CdtrAcct> <RmtInf><Ustrd>Invoice 2026-0057</Ustrd></RmtInf> </CdtTrfTxInf> </PmtInf> </CstmrCdtTrfInitn> </Document>”
“<Envelope> <AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02"> <Fr><FIId><FinInstnId><BICFI>BANKDEFFXXX</BICFI></FinInstnId></FIId></Fr><To><FIId><FinInstnId><BICFI>BANKGB2LXXX</BICFI></FinInstnId></FIId></To> <BizMsgIdr>B2B-881245</BizMsgIdr><MsgDefIdr>pacs.008.001.08</MsgDefIdr><CreDt>2026-10-29T08:01:12Z</CreDt> </AppHdr> <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08"> <FIToFICstmrCdtTrf> <GrpHdr><MsgId>B2B-881245</MsgId><CreDtTm>2026-10-29T08:01:12Z</CreDtTm><NbOfTxs>1</NbOfTxs><SttlmInf><SttlmMtd>INDA</SttlmMtd></SttlmInf></GrpHdr> <CdtTrfTxInf> <PmtId><InstrId>B2B-881245</InstrId><EndToEndId>INV-2026-0042</EndToEndId><UETR>8e81b6f3-2c3a-4f7e-9a1d-3c5b7e2f9a10</UETR></PmtId> <IntrBkSttlmAmt Ccy="EUR">1250.00</IntrBkSttlmAmt><IntrBkSttlmDt>2026-10-29</IntrBkSttlmDt><ChrgBr>SHAR</ChrgBr> <Dbtr><Nm>ACME GmbH</Nm></Dbtr><DbtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>BANKDEFFXXX</BICFI></FinInstnId></DbtrAgt> <CdtrAgt><FinInstnId><BICFI>BANKGB2LXXX</BICFI></FinInstnId></CdtrAgt><Cdtr><Nm>ACME UK Ltd</Nm></Cdtr><CdtrAcct><Id><IBAN>GB29NWBK60161331926819</IBAN></Id></CdtrAcct> <RmtInf><Ustrd>Invoice 2026-0042</Ustrd></RmtInf> </CdtTrfTxInf> </FIToFICstmrCdtTrf> </Document> </Envelope>”
“<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.08"> <BkToCstmrStmt> <GrpHdr><MsgId>STMT-20261029</MsgId><CreDtTm>2026-10-29T20:00:00</CreDtTm></GrpHdr> <Stmt> <Id>301</Id><Acct><Id><IBAN>DE89370400440532013000</IBAN></Id></Acct> <Bal><Tp><CdOrPrtry><Cd>OPBD</Cd></CdOrPrtry></Tp><Amt Ccy="EUR">10000.00</Amt><CdtDbtInd>CRDT</CdtDbtInd><Dt><Dt>2026-10-29</Dt></Dt></Bal> <Bal><Tp><CdOrPrtry><Cd>CLBD</Cd></CdOrPrtry></Tp><Amt Ccy="EUR">8209.75</Amt><CdtDbtInd>CRDT</CdtDbtInd><Dt><Dt>2026-10-29</Dt></Dt></Bal> <Ntry> <Amt Ccy="EUR">1790.25</Amt><CdtDbtInd>DBIT</CdtDbtInd><Sts><Cd>BOOK</Cd></Sts><BookgDt><Dt>2026-10-29</Dt></BookgDt><AcctSvcrRef>BK-77812</AcctSvcrRef> <NtryDtls><TxDtls><Refs><EndToEndId>BATCH-20261028-01</EndToEndId></Refs><RmtInf><Ustrd>Supplier batch</Ustrd></RmtInf></TxDtls></NtryDtls> </Ntry> </Stmt> </BkToCstmrStmt> </Document>”
“<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10"> <CstmrPmtStsRpt> <GrpHdr><MsgId>STS-5512</MsgId><CreDtTm>2026-10-28T09:16:40</CreDtTm></GrpHdr> <OrgnlGrpInfAndSts><OrgnlMsgId>BATCH-20261028-01</OrgnlMsgId><OrgnlMsgNmId>pain.001.001.09</OrgnlMsgNmId><GrpSts>PART</GrpSts></OrgnlGrpInfAndSts> <OrgnlPmtInfAndSts><OrgnlPmtInfId>PMT-01</OrgnlPmtInfId> <TxInfAndSts><OrgnlEndToEndId>INV-2026-0057</OrgnlEndToEndId><TxSts>RJCT</TxSts><StsRsnInf><Rsn><Cd>AC04</Cd></Rsn></StsRsnInf></TxInfAndSts> </OrgnlPmtInfAndSts> </CstmrPmtStsRpt> </Document>”
“<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.10"> <CstmrPmtStsRpt> <GrpHdr><MsgId>STS-5512</MsgId><CreDtTm>2026-10-28T09:16:40</CreDtTm></GrpHdr> <OrgnlGrpInfAndSts><OrgnlMsgId>BATCH-20261028-01</OrgnlMsgId><OrgnlMsgNmId>pain.001.001.09</OrgnlMsgNmId><GrpSts>PART</GrpSts></OrgnlGrpInfAndSts> <OrgnlPmtInfAndSts><OrgnlPmtInfId>PMT-01</OrgnlPmtInfId> <TxInfAndSts><OrgnlEndToEndId>INV-2026-0057</OrgnlEndToEndId><TxSts>RJCT</TxSts><StsRsnInf><Rsn><Cd>AC04</Cd></Rsn></StsRsnInf></TxInfAndSts> </OrgnlPmtInfAndSts> </CstmrPmtStsRpt> </Document>”
“<?xml version="1.0" encoding="UTF-8"?> <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09"> <CstmrCdtTrfInitn> <GrpHdr><MsgId>BATCH-20261028-01</MsgId><CreDtTm>2026-10-28T09:15:00</CreDtTm><NbOfTxs>2</NbOfTxs><CtrlSum>1790.00</CtrlSum><InitgPty><Nm>ACME GmbH</Nm></InitgPty></GrpHdr> <PmtInf> <PmtInfId>PMT-01</PmtInfId><PmtMtd>TRF</PmtMtd><ReqdExctnDt><Dt>2026-10-29</Dt></ReqdExctnDt> <Dbtr><Nm>ACME GmbH</Nm></Dbtr><DbtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>BANKDEFFXXX</BICFI></FinInstnId></DbtrAgt> <CdtTrfTxInf> <PmtId><EndToEndId>INV-2026-0042</EndToEndId></PmtId><Amt><InstdAmt Ccy="EUR">1250.00</InstdAmt></Amt> <CdtrAgt><FinInstnId><BICFI>BANKGB2LXXX</BICFI></FinInstnId></CdtrAgt><Cdtr><Nm>ACME UK Ltd</Nm></Cdtr><CdtrAcct><Id><IBAN>GB29NWBK60161331926819</IBAN></Id></CdtrAcct> <RmtInf><Ustrd>Invoice 2026-0042</Ustrd></RmtInf> </CdtTrfTxInf> <CdtTrfTxInf> <PmtId><EndToEndId>INV-2026-0057</EndToEndId></PmtId><Amt><InstdAmt Ccy="EUR">540.25</InstdAmt></Amt> <Cdtr><Nm>Muster Logistik AG</Nm></Cdtr><CdtrAcct><Id><IBAN>CH9300762011623852957</IBAN></Id></CdtrAcct> <RmtInf><Ustrd>Invoice 2026-0057</Ustrd></RmtInf> </CdtTrfTxInf> </PmtInf> </CstmrCdtTrfInitn> </Document>”
“<Document><FIToFICstmrCdtTrf><GrpHdr><MsgId>X-1</MsgId><NbOfTxs>1</NbOfTxs></GrpHdr><CdtTrfTxInf><PmtId><EndToEndId>E2E-1</EndToEndId></PmtId><IntrBkSttlmAmt Ccy="USD">99.50</IntrBkSttlmAmt><Cdtr><Nm>Jane Doe</Nm></Cdtr></CdtTrfTxInf></FIToFICstmrCdtTrf></Document>”
“<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.056.001.08"><FIToFIPmtCxlReq><Assgnmt><Id>CXL-1</Id></Assgnmt></FIToFIPmtCxlReq></Document>”
“<?xml version="1.0" encoding="UTF-8"?> <Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09"> <CstmrCdtTrfInitn> <GrpHdr><MsgId>BATCH-20261028-01</MsgId><CreDtTm>2026-10-28T09:15:00</CreDtTm><NbOfTxs>2</NbOfTxs><CtrlSum>1790.25</CtrlSum><InitgPty><Nm>ACME GmbH</Nm></InitgPty></GrpHdr> <PmtInf> <PmtInfId>PMT-01</PmtInfId><PmtMtd>TRF</PmtMtd><ReqdExctnDt><Dt>2026-10-29</Dt></ReqdExctnDt> <Dbtr><Nm>ACME GmbH</Nm></Dbtr><DbtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>BANKDEFFXXX</BICFI></FinInstnId></DbtrAgt> <CdtTrfTxInf> <PmtId><EndToEndId>INV-2026-0042</EndToEndId></PmtId><Amt><InstdAmt Ccy="EUR">1250.00</InstdAmt></Amt> <CdtrAgt><FinInstnId><BICFI>BANKGB2LXXX</BICFI></FinInstnId></CdtrAgt><Cdtr><Nm>ACME UK Ltd</Nm></Cdtr><CdtrAcct><Id><IBAN>GB29NWBK60161331926819</IBAN></Id></CdtrAcct> <RmtInf><Ustrd>Invoice 2026-0042</Ustrd></RmtInf> </CdtTrfTxInf> <CdtTrfTxInf> <PmtId><EndToEndId>INV-2026-0057</EndToEndId></PmtId><Amt><InstdAmt Ccy="EUR">540.25</InstdAmt></Amt> <Cdtr><Nm>Muster Logistik AG</Nm></Cdtr><CdtrAcct><Id><IBAN>CH9300762011623852957</IBAN></Id></CdtrAcct> <RmtInf><Ustrd>Invoice 2026-0057</Ustrd></RmtInf> </CdtTrfTxInf> </PmtInf> </Document>”
“<Invoice><Id>INV-1</Id></Invoice>”
The Messages You Will Meet
ISO 20022 has hundreds of messages, but payments revolve around these ten.
pain.001
A customer’s instruction to its bank to make one or more credit transfers.
“Who sends pain.001?”
pain.002
The bank’s status report on a pain.001 or pain.008, accepting or rejecting payments.
“What does RJCT mean?”
pain.008
A creditor’s instruction to collect direct debits under signed mandates.
“What must each debit have?”
pacs.008
A customer credit transfer between banks, the successor of MT103.
“Which MT does it replace?”
pacs.009
A transfer between financial institutions, the successor of MT202.
“Which MT does it replace?”
pacs.002
A status report between banks on a pacs message.
“Does it carry reason codes?”
pacs.004
A payment return, sending funds back with a reason.
“What does AC04 mean?”
camt.053
The end-of-day bank statement, the successor of MT940.
“Which MT does it replace?”
camt.054
A notification of individual debits and credits during the day.
“Is it a full statement?”
camt.056
A request to cancel a payment already sent.
“What answers it?”
How a Message Is Structured
Every ISO 20022 payment message is built from the same blocks. Knowing where each piece sits makes a long file easy to navigate, in this parser’s paths view or in any XML editor.
Document and Namespace
The Document element’s namespace names the message and version, such as pain.001.001.09.
Business Application Header
head.001 in an envelope carries the sender, receiver and message ID, as CBPR+ requires.
Group Header
GrpHdr holds the message ID, creation time, and often NbOfTxs and CtrlSum.
Payment Information
In pain.001, PmtInf groups transfers from one debtor account on one date.
Transaction Information
Each CdtTrfTxInf is one payment with its amount, creditor and references.
References
EndToEndId travels from payer to payee; the UETR identifies the payment across every bank.
Checks Worth Running
Banks reject files for mistakes that are easy to catch before upload. These are the checks this parser runs, plus a few to do by eye.
NbOfTxs
The declared number of transactions must match the transactions in the file.
CtrlSum
The control sum must equal the exact sum of amounts. The parser adds them as decimals, not floats.
IBAN Check Digits
Every IBAN passes a mod-97 check, which catches most typos.
Currency Attribute
Every amount needs a Ccy attribute, and some schemes allow only one currency.
Execution Dates
A requested date in the past or on a bank holiday may be rejected or moved.
Character Set
SEPA files allow a restricted Latin character set, so accents may be refused.
When to Parse ISO 20022
Whenever payment XML needs reading quickly.
Before Uploading a Batch
Check counts, totals and IBANs in a pain.001 before your bank rejects it.
Reading a Rejection
See which payments a pain.002 rejected and why.
Reconciliation
Read camt.053 balances and entries against your ledger.
MT Migration
Compare ISO 20022 messages with the MT messages they replace.
Integration Work
Map elements to your system’s fields using the paths view.
ISO 20022 Pitfalls
Things that trip people up with payment XML.
Version Mismatches
pain.001.001.03 and .09 differ. Banks accept specific versions, so check which.
Namespaces
Elements are matched by namespace. A missing or wrong xmlns can make a valid file fail.
Market Practice
SEPA, CBPR+ and national schemes restrict the base standard differently.
Decimal Precision
Amounts allow up to five decimals in XML, but currencies limit what banks accept.
Structured Addresses
Newer rules require structured postal addresses instead of free text lines.
Large Files
Batches of thousands of payments are fine here, but keep pastes under 10 million characters.