Free tool · No signup

Bank Statement Data Lab

Click any highlighted value to see what it means. Below, the same synthetic data is rendered as the table treasury actually reads from — so you can see exactly which message field lands in which column.

Version matters. This is a camt.053.001.02 BankToCustomerStatement — one of several published camt.053 versions. Field names and structure below are illustrative; always confirm the exact version and any bank-specific extensions before parsing a real file.

camt.053.001.02 · one account, one entry
<Document>
  <BkToCstmrStmt><Stmt>
    <Acct><Id><IBAN>NL91ABNA0417164300</IBAN></Id>
      <Ccy>EUR</Ccy></Acct>
    <Bal><Tp><CdOrPrtry><Cd>OPBD</Cd></CdOrPrtry></Tp>
      <Amt Ccy="EUR">184220.50</Amt></Bal>
    <Bal><Tp><CdOrPrtry><Cd>CLBD</Cd></CdOrPrtry></Tp>
      <Amt Ccy="EUR">196670.50</Amt></Bal>
    <Bal><Tp><CdOrPrtry><Cd>CLAV</Cd></CdOrPrtry></Tp>
      <Amt Ccy="EUR">191670.50</Amt></Bal>
    <Ntry>
      <Amt Ccy="EUR">12450.00</Amt>
      <CdtDbtInd>CRDT</CdtDbtInd>
      <Sts>BOOK</Sts>
      <BookgDt><Dt>2026-03-16</Dt></BookgDt>
      <ValDt><Dt>2026-03-16</Dt></ValDt>
      <BkTxCd><Domn><Cd>PMNT</Cd>
        <Fmly><Cd>RCDT</Cd></Fmly></Domn></BkTxCd>
      <NtryDtls><TxDtls>
        <Refs><EndToEndId>INV-2026-4471</EndToEndId></Refs>
        <RmtInf><Ustrd>INV 4471 PO 88213 THX</Ustrd></RmtInf>
      </TxDtls></NtryDtls>
    </Ntry>
  </Stmt></BkToCstmrStmt>
</Document>

Synthetic example — no real account or reference.

Account IBANStmt / Acct / Id / IBAN

The account this statement covers — one camt.053 message covers exactly one account.

Why it matters: If you hold accounts at the same bank in several currencies, each gets its own statement message, even if the bank shows them together in its portal.

Account currencyStmt / Acct / Ccy

The currency the balances and entries below are expressed in.

Why it matters: For a multi-currency account structure, don't assume — always read this field rather than the account nickname.

Opening balanceStmt / Bal[CD=OPBD]

Balance at the start of this statement's period — OPBD = opening booked.

Why it matters: This should equal the previous statement's closing balance. If it doesn't, you're either missing a statement or a correction was posted out of sequence — check before trusting the cash position built from this file.

Closing balanceStmt / Bal[CD=CLBD]

Balance at the end of this statement's period — CLBD = closing booked.

Why it matters: This is the number most cash position tools pick up as "today's balance" — but it's booked, not necessarily available (see closing available balance).

Closing available balanceStmt / Bal[CD=CLAV]

What you can actually use right now — closing booked balance adjusted for holds, float, or uncleared items.

Why it matters: This is usually lower than the closing booked balance, and it's the number that actually matters for a same-day funding decision. Conflating the two is a common cause of "why did the payment bounce, the balance showed enough."

Entry amountNtry / Amt

The amount of this one statement line — always positive; direction comes from the credit/debit indicator, not the sign.

Why it matters: A parser that reads this as negative for debits by convention, without checking the indicator field, will silently get every debit backwards.

Credit / debit indicatorNtry / CdtDbtInd

Whether this entry increases (CRDT) or decreases (DBIT) the account balance.

Why it matters: This is the field that actually determines direction — always read it alongside the amount, never infer direction from context or memo text.

Entry statusNtry / Sts

BOOK = booked/final. The alternative, PDNG (pending), means the entry can still be reversed or amended.

Why it matters: Reconciliation logic that treats PDNG entries as final can produce a cash position that changes underneath you the next day — worth filtering on this field explicitly.

Booking dateNtry / BookgDt

The date the bank posted this entry to the account.

Why it matters: Not always the same as the value date below — the gap between them is exactly what "same-day" cash positioning has to account for.

Value dateNtry / ValDt

The date interest calculations treat the funds as having moved — can lag or lead the booking date.

Why it matters: For FX or cross-border entries especially, a value date after the booking date means the funds aren't earning (or costing) interest yet, even though they're already on the statement.

End-to-end referenceNtry / NtryDtls / TxDtls / Refs / EndToEndId

The same reference your original pain.001 payment carried, if the bank preserved it — the field automated reconciliation is built to match on.

Why it matters: If this comes back blank or truncated on a real statement, it's usually the bank (or an intermediary bank in a cross-border chain) that dropped it, not a bug in your own matching logic — worth confirming with the bank before assuming your rules are wrong.

Remittance informationNtry / NtryDtls / TxDtls / RmtInf / Ustrd

Free text passed through with the payment — often the actual invoice reference, sometimes reformatted or truncated by an intermediary bank.

Why it matters: When EndToEndId is missing, this field is the fallback for matching — but because it's free text, matching against it needs fuzzier rules than an exact reference comparison.

Bank transaction codeNtry / BkTxCd / Domn / Cd

A standardized ISO 20022 code classifying what kind of movement this is — here, a received credit transfer.

Why it matters: This is what lets automation distinguish "a customer paid an invoice" from "a bank fee" or "an FX settlement" without parsing free text — worth using this field directly instead of guessing from the description.

What treasury actually reads

The same message, collapsed into the row a cash position table actually uses — every column below traces back to a field on the left.

AccountBooking dateValue dateDirectionAmountReferenceStatus
…43002026-03-162026-03-16Credit12,450.00 EURINV-2026-4471Booked
← Back to path