What is CAMT.053 anyway?
Your bank sent you a statement and the file ends in .xml. You open it expecting numbers and instead get a tangle of <Ntry>, <CdtDbtInd>, and <RmtInf> tags nested six levels deep. That’s CAMT.053, the ISO 20022 standard for bank-to-customer account statements. Banks across Europe and a growing chunk of the world hand it out instead of the old MT940 telex format.
It’s great for software. It’s terrible to read. And good luck importing it into a spreadsheet as-is.
Paste the XML here and you get a flat CSV back, one row per transaction. Seventeen columns covering what reconciliation actually needs: booking and value dates, a signed amount with its currency, credit or debit, the booking status, the counterparty name and IBAN, the end-to-end ID, mandate ID and account servicer reference each in its own column, the joined remittance text, plus every statement’s opening and closing balance. Pick comma or semicolon and, if Excel mangles your umlauts, tick the BOM box. Drop it into Excel, Google Sheets, or your accounting import and move on.
How the conversion works
The parser reads the document with the browser’s built-in DOMParser, then walks every <Ntry> element. Each entry is one booking on your statement. Here’s what gets pulled from each one:
- Booking date comes from
BookgDt. If the bank used a full timestamp (DtTm) instead of a plainDt, the time portion is trimmed off so the column stays a tidy date. - Amount and currency read from
<Amt>and itsCcyattribute. So<Amt Ccy="EUR">1250.00</Amt>splits into1250.00andEUR. - Type maps
CRDTto Credit andDBITto Debit. The raw codes are ugly, so they’re spelled out. - Signed amount flips debits negative. Money out shows as
-89.90, money in stays positive. Handy for a quick SUM in a sheet. - Counterparty is direction-aware. On a debit, the relevant party is the creditor you paid; on a credit, it’s the debtor who paid you. The parser grabs whichever
Nmfits and falls back to the other if one’s missing. - Remittance info joins the unstructured note lines (
RmtInf/Ustrd). Some banks split a payment note across two or three of these, so they’re stitched together with a space. The structured references (end-to-end ID, mandate ID, account servicer reference) each land in their own column instead of being flattened into one.
One detail worth mentioning: CAMT has a dozen versions (camt.053.001.02 through .08 and beyond), each with its own XML namespace. Rather than hard-code one, the parser matches on tag names and ignores the namespace prefix entirely. A German bank’s file and a Swiss one parse the same way.
Things to watch out for
CAMT lets a single <Ntry> wrap several individual transactions in a batch (think a payroll run booked as one line). By default this converter expands each detail block into its own row, so a batch of twenty salary payments comes out as twenty rows rather than a single lump, and the child rows inherit the entry-level date and reference they leave out. Want the bank’s original one-line-per-booking view instead? Flip Batch entries to One row and each entry collapses back to a single row carrying the batch total.
Nothing leaves your browser. The XML is parsed locally, which matters a lot here, since a bank statement is about as sensitive as a file gets. No upload, no server, no log.
FAQ
Which CAMT versions does it support?
Any camt.053 statement that uses standard Ntry elements, regardless of the exact minor version. Because it ignores XML namespaces and matches tag names, it works across .02, .04, .08, and the rest without you picking anything.
Will it handle CAMT.052 or CAMT.054 too?
Often, yes. Those formats share the same <Ntry> structure, so intraday reports (052) and debit/credit notifications (054) usually parse fine. It’s tuned for 053, but the underlying tags overlap.
Why is my debit shown as a negative number?
That’s the Signed Amount column doing its job. The raw <Amt> value is always positive in CAMT, so debits are flagged separately with DBIT. The signed column folds that direction into the number so you can total a whole month with one formula.
The counterparty cell is empty. What gives?
Some banks omit the party name on certain bookings, like fees or interest. When there’s no Nm to read, the cell stays blank instead of guessing. The rest of the row still comes through fine.
Can I open the result straight in Excel?
Yep. The CSV follows RFC 4180, quoting any field that contains the active delimiter or a quote and ending rows with CRLF, which is what Excel expects. If your Excel is set to a European locale, switch the delimiter to semicolon and tick the BOM box so accented names come through clean. Hit Download for a statement.csv, or copy and paste into a sheet.