Formats August 2026 17 min read

CAMT.053 explained

Almost every problem in reading a bank statement comes from the same source: the structure is an appearance. Columns are positions on a page, and a machine has to infer what a human sees instantly. CAMT.053 removes that inference entirely — it is the same statement delivered as structured data, where every value is labelled and the file declares its own shape. Here is what is actually inside one, and where it still leaves you work to do.

FlowParse
flowparse.io

The problem it exists to solve

A printed statement is designed for a person. It puts dates on the left, amounts on the right, and relies on a reader to understand that things sitting on the same horizontal band belong together. That convention is so natural that it is easy to forget it is a convention rather than a structure.

For software, that inference is the entire difficulty. Which column is the amount, does a second column mean credits are separate from debits, is that number in the last column a running balance or a fee, does this line belong with the one above it or start a new transaction. Every one of those questions has to be answered from layout.

CAMT.053 answers them in advance. It is the ISO 20022 message a bank uses to deliver an end-of-day statement as structured XML, where the amount is in an amount element, the direction is in a direction element, and the account the whole thing describes is stated explicitly. Nothing is inferred, because nothing needs to be.

That is a genuine improvement rather than a fashion. It is also not universally available, which is the second half of this article — and the reason the older ways of getting statements are not going anywhere.

The family: 052, 053 and 054

CAMT stands for cash management, and it is the ISO 20022 message family covering account reporting. Three messages in it matter for day-to-day finance work, and confusing them is the most common early mistake.

camt.052 is an intraday account report. It tells you what the bank currently believes about the account, which makes it useful for treasury and cash positioning and unsuitable as a book of record — it is provisional by design, and items can change.

camt.053is the end-of-day statement. It is the definitive record for the period it covers, and it is the message you reconcile against and post from. When people say "we get CAMT from the bank", this is almost always the one they mean.

camt.054 is a debit or credit notification. It reports individual items rather than an account position, which is useful for reacting quickly to a specific receipt — often with more detail per item — but it is not a statement and should not be treated as one.

MessageWhat it isTimingUse it for
camt.052Account reportIntraday, provisionalCash position, early visibility
camt.053Account statementEnd of day, definitiveReconciliation and posting
camt.054Debit/credit notificationPer item, as it happensReacting to specific receipts
MT940Legacy statementEnd of dayThe same job, in the older format
MT942Legacy interim reportIntradayThe older equivalent of camt.052
FlowParse
flowparse.io

What is actually inside one

A camt.053 is hierarchical rather than tabular, and the hierarchy is the point. At the top is a group header carrying the message identifier and creation timestamp. Beneath it sits one or more statement blocks, and this is the first thing that surprises people: a single file can contain statements for several accounts.

Each statement block identifies its account explicitly — identifier, currency, often the owner and the servicing institution — and states the period it covers. Then it carries a set of balances, and then a sequence of entries.

Each entry is one movement on the account. It has an amount with its currency, a credit or debit indicator, a status, a booking date and a value date, usually a bank transaction code, and references. Beneath the entry there can be transaction details — and an entry may contain more than one, which is the second thing that surprises people, because a batched settlement can arrive as one entry containing many underlying transactions.

That last point has real consequences. Code that assumes one entry equals one transaction will silently collapse a batch into a single line, which is fine for reconciling the bank balance and useless for matching individual invoices.

FlowParse
flowparse.io

Handle multi-account files deliberately

Because a file can carry several statement blocks, flattening the whole document into one list of transactions produces a total that belongs to no account at all. Process each statement block separately, with its own balances — this is the same trap that multi-account PDF statements set, and it catches people in both formats.

Balances, and the identity that comes free

Balances in a camt.053 are typed rather than positional. Rather than a number at the top of a page that you assume is the opening figure, there are explicit balance elements each carrying a code that says what kind of balance it is — opening booked, closing booked, and often available balances alongside them.

That matters because it makes the completeness check unambiguous. Opening booked plus every entry, respecting direction, should equal closing booked. In a PDF you first have to work out which printed numbers are the opening and closing balances, which is itself a guess; here they are labelled.

Run the check anyway. Structured delivery makes the values reliable; it does not guarantee that the file you were handed is the complete one, that it was not truncated in transit, or that your own parser consumed every entry. The identity costs nothing to evaluate and it tests your processing as much as it tests the bank's file.

Available balances are a different thing and should not be substituted for booked balances in reconciliation. They reflect what can be spent, including holds and uncleared items, and they will not tie to a sum of booked entries.

FlowParse
flowparse.io

Why amounts carry no minus sign

This is the single most common bug when someone writes their own CAMT parser, and it is worth stating plainly: amounts in a camt.053 are positive quantities. Direction lives in a separate credit/debit indicator.

The design is deliberate and better than the alternative. A minus sign is a presentation convention that varies — parentheses in some traditions, a trailing minus in others, a separate column in others again. Separating quantity from direction removes the ambiguity completely, and it means the direction cannot be lost by a formatting decision.

The failure mode when it is ignored is spectacular and quiet. Every entry reads as positive, so income and expenditure both increase the balance, and the resulting total is wrong by roughly twice the value of all payments. It also does not look obviously broken — the numbers are all real numbers from the file.

It is the same class of error as a lost minus sign when reading a PDF, and it produces the same arithmetic signature: a difference equal to exactly twice an amount, which is one of the fingerprints described in why reconciliations fail.

FlowParse
flowparse.io

Bank transaction codes: classification you do not have to guess

Each entry usually carries a structured bank transaction code, organised hierarchically as a domain, a family within it, and a subfamily within that. A payments domain might contain a family for received credit transfers, and beneath that a subfamily distinguishing the specific instrument.

This is more valuable than it first appears. Categorising transactions from a free-text description is guesswork dressed as automation — the description is written for a human, varies between banks, and changes without notice. A structured code says what kind of movement something is as a matter of record.

It does not tell you the accounting treatment. A code identifying a card payment does not know whether the purchase was stock, equipment or lunch, and no bank-side classification ever will. What it removes is the mechanical half of the problem, leaving the judgement half — which is the correct division of labour.

Bank population of these codes varies in practice, and proprietary codes appear alongside the standard ones. Check what your bank actually populates before building rules on it, and treat a missing code as normal rather than exceptional.

FlowParse
flowparse.io

References: the part that actually saves time

If you take one practical thing from CAMT, take this. The reference elements are what turn reconciliation from fuzzy matching into a lookup, and fuzzy matching is where most reconciliation time is spent.

An end-to-end identifier is set by whoever initiated a payment and is carried through the chain unchanged. If your own system generated it when raising the payment, the entry that comes back can be tied to the exact originating transaction with certainty — no matching on amount and date, no near-misses, no two invoices for the same value on the same day.

The account servicer's own reference is separate and identifies the entry within the bank's records. It is the reference to quote when querying something with the bank, and it is useful as a stable key for deduplication when the same statement is processed twice.

A creditor reference — a structured reference the payer quotes on an incoming payment — is what lets a receipt be matched to the invoice it settles automatically. It only works if it was quoted, which is a process question rather than a technical one, but where it is used the effect on receivables work is large.

Remittance information: structured or free text

Remittance information is the "what is this payment for" content, and it comes in two flavours. Unstructured remittance is free text — a description a person wrote, with all the variability that implies. Structured remittance carries the same intent in dedicated elements: references, document identifiers, sometimes amounts being settled.

Structured is enormously more useful and considerably less common, because it depends on the payer's systems populating it properly. In practice you will build against both: use the structured content when it is there, and fall back to reading the free text when it is not.

Which means the description-parsing problem does not disappear with CAMT. It shrinks. You still end up matching on text for a proportion of entries, but you are doing it with a reliable amount, a reliable direction, a reliable date and often a classification code alongside — which is a much better position than reading a page.

FlowParse
flowparse.io

Booked and pending

Entries carry a status, and the distinction between booked and pending matters more than the single word suggests. A booked entry has been recorded on the account. A pending one has not yet been, and it can still change or disappear.

In a camt.053 you are generally dealing with booked items, which is what makes it the right message for posting and reconciliation. In a camt.052 pending items are entirely expected — that is much of the value of an intraday report.

The practical rule is to post from booked entries only, and to treat pending ones as information about what is coming rather than as transactions. Mixing them into the ledger produces entries that later change underneath you, which is a genuinely unpleasant class of problem to unwind.

Booking date and value date

Two dates, and they are not interchangeable. The booking date is when the entry was recorded on the account. The value date is when it counts for interest purposes. They frequently differ, most visibly across weekends and public holidays.

For reconciliation and posting, booking date is normally the right choice, because it is the date the bank considers the movement to have happened on the account. Value date matters for interest calculations and for treasury work.

What matters more than the choice is the consistency of it. Mixing the two — some entries posted on one, some on the other — produces small differences at period boundaries that are extremely tedious to diagnose, because each individual entry looks perfectly correct.

A period-end tell

If a reconciliation is out by exactly the value of a few entries dated at the very start or end of the period, and each of those entries is individually correct, a date-basis mismatch is the first thing to check.

Versions, and why they bite

There is no single camt.053. The message has been revised over time, and the version is identified by the XML namespace declared in the document. Different versions differ in which elements exist and which are optional.

On top of that, banks publish implementation guidelines describing which optional elements they actually populate. Two files that are both entirely valid camt.053 can carry meaningfully different content, and code that works perfectly against one bank can find half its expected fields empty against another.

So read the namespace before parsing, and read the bank's implementation guideline before designing anything that depends on an optional element. Treat any optional element as absent until you have seen it populated in real files from that specific bank.

This is the part that catches integration projects. The standard is genuinely good, and it is a standard for a message rather than a guarantee about content — which is exactly the distinction that makes multi-bank integrations more work than single-bank ones.

Compared to MT940

MT940 is the older SWIFT statement format and it is still widely used, so this is a live comparison rather than a historical one. It is flat text, with tagged fields, and it does the same job.

Its limitations come from its age. The character set and line lengths are constrained, which forces information into abbreviations. Much of the useful detail ends up in a narrative field, and each bank fills that field its own way — which reintroduces exactly the parsing-by-convention problem that structured formats exist to remove.

CAMT.053 has labelled places to put the things MT940 has to squeeze into narrative: structured references, classification codes, richer party details. That is the substantive difference, rather than XML being inherently superior to flat text.

MT940CAMT.053
ShapeFlat text with tagged fieldsHierarchical XML
DetailMuch of it in a narrative fieldLabelled elements per attribute
Bank variationHigh — narrative filled per bankPresent, but in which optional elements are used
Structured referencesNo dedicated placeDedicated elements
ClassificationLimitedStructured bank transaction codes
Character setConstrainedUnicode
SupportVery wide, long establishedWide and growing

Compared to CSV, OFX and PDF

Formats are not better or worse in the abstract; they differ in what has to be inferred and what is guaranteed. That is the useful axis to compare them on.

FormatStructureHas to be inferredTypical use
CAMT.053Declared, hierarchicalAlmost nothingCorporate reporting and integration
MT940Tagged, flatNarrative contentLong-established bank reporting
OFX / QFX / QBODeclared, taggedLittle; app support variesImport into accounting software
CSVPositional columnsColumn meaning, dates, number formatAd-hoc export and import
PDFVisual onlyEverything — rows, columns, groupingReading, and archival record

Notice that CSV sits much closer to PDF on this axis than its reputation suggests. A CSV guarantees that fields are separated; it guarantees nothing about what the fields mean, what order they are in, or how dates and decimals are written. That is why column mapping is its own discipline — covered in CSV column mapping that survives a redesign.

For choosing between the OFX-family files when importing into accounting software specifically, that comparison is in CSV vs QBO and the PDF to QBO guide.

Why you may not be able to get it

Having established that it is the better artefact, the honest part: most people reading this cannot simply switch to it.

CAMT.053 is generally offered as part of corporate and cash-management banking rather than retail online banking, and availability varies by bank and by country. It often involves a specific agreement and a delivery channel to be set up, rather than a download button. If you cannot find it in your banking portal, it is worth asking the bank directly — availability on request is common.

Then there is everything outside your own accounts. Historic periods from before an arrangement existed, closed accounts, accounts at institutions that do not offer it, client material you receive as a professional, cards and payment platforms. None of that becomes available because a standard exists.

Which is the honest summary: where you can get CAMT, use it. It will not cover your whole estate, and the other routes remain necessary for the parts it does not reach.

FlowParse
flowparse.io

When the answer is still a PDF

For everything a structured feed cannot reach, the statement document remains the record — and it is a complete and authoritative one, just aimed at a reader rather than a machine.

The work then is exactly the inference CAMT removes: identifying columns, grouping wrapped lines into single transactions, resolving how negatives were expressed, and reading dates in whatever convention the bank used. That is a genuinely harder problem, which is why it deserves a proper check rather than optimism.

The check is the same identity that CAMT hands you for free: opening balance plus every transaction should equal the printed closing balance. If it holds to the cent, nothing was dropped and no amount was misread in a way that moves the total. We run it on every statement we convert, and report the gap and the rows implicated when it does not hold.

It is worth seeing that as continuity rather than compromise. The reason CAMT is better is that it removes inference; the reason the identity matters is that it tests whatever inference remains. Both are the same instinct applied at different points.

FlowParse
flowparse.io

Validating a file you have received

Four checks, in order, before trusting a camt.053 in a process.

One: the namespace. Confirm which message version you actually received, rather than which one you expected. This costs a moment and prevents an entire category of silent field-mapping errors.

Two: the account and period. Confirm the statement block covers the account and the dates you think it does. Files carrying several accounts are normal, and so are overlapping or unexpected periods.

Three: the identity. Opening booked plus every entry, respecting direction, against closing booked. This tests your parsing as much as the file.

Four: continuity. The closing balance of one statement should equal the opening balance of the next across the series — the same test described in the missing month problem, and just as necessary here. Structured delivery does not prevent a file from never arriving.

Common gotchas

Ignoring the credit/debit indicator. The one that produces a total wrong by twice the value of every payment, while every individual figure is genuine.

Assuming one entry equals one transaction. Batched entries carry several underlying transactions, and collapsing them loses exactly the detail invoice matching needs.

Flattening a multi-account file. Each statement block has its own account and its own balances; a combined total describes nothing.

Using available balance for reconciliation. It includes holds and uncleared items, so it will never tie to a sum of booked entries.

Depending on an optional element. If the bank does not populate it, it is not there, and the standard permitting it is no help at all.

Mixing booking and value dates. Small period-end differences where every entry looks individually correct.

Key takeaways

CAMT.053 is an end-of-day bank statement delivered as structured XML, where amounts, directions, dates, classifications and references are labelled rather than inferred from a layout. Its siblings serve different purposes: camt.052 is provisional and intraday, camt.054 reports individual items.

The real gains are structured references, which turn reconciliation from fuzzy matching into a lookup, and bank transaction codes, which remove the mechanical half of categorisation. The classic pitfalls are ignoring the credit/debit indicator, collapsing batched entries, and depending on optional elements a given bank does not populate.

And it will not cover your whole estate. History, closed accounts, client material and institutions that do not offer it all remain document-shaped. Where you can get CAMT, take it; where you cannot, run the same completeness identity on whatever you can get.

Frequently asked questions

For the accounts CAMT will never reach

Historic periods, closed accounts, foreign banks, client material. Convert the statement and get the same completeness identity CAMT gives you for free — checked on every document, with the gap and the implicated rows when it does not hold.

FlowParse
flowparse.io

Related reading