Bank statements and payment files that never leave your machine
Statements and payment files hold account numbers, balances, counterparties and salaries. Treasury, accounting and ERP teams are usually not allowed to upload them to online converters. SafeCAMT is one static page: parsing, reconciliation, conversion and validation run in JavaScript inside your browser tab. Nothing is uploaded or stored on a server, and the page keeps working offline once it has loaded.
Check it yourself: open DevTools → Network and load a statement. No requests appear. The page's Content-Security-Policy (default-src 'none') allows exactly one outside destination — api.polar.sh — which is only contacted when you activate a Pro license key.
What SafeCAMT reads
| Format | What it is | What SafeCAMT does |
|---|---|---|
camt.053 | ISO 20022 BankToCustomerStatement — the end-of-day account statement, successor of MT940/MT950. | Transactions table, balances, reconciliation, CSV/Excel. |
camt.052 | BankToCustomerAccountReport — intraday report, successor of MT941/MT942. | Same as camt.053; pending entries are listed but excluded from reconciliation. |
camt.054 | BankToCustomerDebitCreditNotification — single or batch booking notifications, often used to break down collective entries. | Transactions table with every TxDtls of a batch. |
MT940 / MT942 | SWIFT customer statement / interim transaction report in tagged text format. | Parses :61: statement lines and :86: details (German ?20–?63 subfields with EREF+/SVWZ+, and slash-coded /NAME/, /IBAN/, /REMI/, /CNTP/), reconciles, converts to camt.053. |
pain.001 | CustomerCreditTransferInitiation — the payment file you upload to your bank. | Checks before upload; payments table and CSV/Excel. |
All published message versions are read namespace-agnostically — for example camt.053.001.02 (2009 schemas still common in SEPA), .001.04, .001.08 (current CBPR+ and most European bank guides) and later. Version differences such as BIC vs BICFI, Dbtr/Nm vs Dbtr/Pty/Nm and <Sts>BOOK</Sts> vs <Sts><Cd>BOOK</Cd></Sts> are handled automatically.
MT940 to camt.053 field mapping
When banks switch you from MT940 to camt.053, your ERP or treasury import has to be remapped. These are the usual correspondences (individual bank guides vary in detail):
| MT940 | Meaning | camt.053 |
|---|---|---|
:20: | Transaction reference number | GrpHdr/MsgId, Stmt/Id |
:25: | Account identification | Stmt/Acct/Id/IBAN (or Othr/Id) |
:28C: | Statement / sequence number | Stmt/ElctrncSeqNb, LglSeqNb, StmtPgntn |
:60F: / :60M: | Opening balance (first / intermediate page) | Bal with OPBD (or PRCD) / ITBD |
:61: | Statement line: value date, entry date, D/C mark, amount, transaction type, references | Ntry: ValDt, BookgDt, CdtDbtInd, RvslInd, Amt, BkTxCd, AcctSvcrRef |
:86: | Information to account owner (free or structured text) | NtryDtls/TxDtls: Refs/EndToEndId, RltdPties, RltdAgts, RmtInf, plus AddtlNtryInf |
:62F: / :62M: | Closing balance | Bal with CLBD / ITBD |
:64: | Closing available balance | Bal with CLAV |
:65: | Forward available balance | Bal with FWAV |
The biggest practical difference: MT940 squeezes counterparty, IBAN and remittance into the :86: free text (often max 6×65 characters, with bank-specific sub-codes), while camt.053 gives each of them its own element — and one booked entry can carry many TxDtls for a batch.
How balance reconciliation works
For each statement SafeCAMT takes the opening booked balance (OPBD, or PRCD if your bank sends the previous closing instead; :60F: in MT940), adds booked credits and subtracts booked debits, and compares the result with the closing booked balance (CLBD; :62F:). Amounts are added with exact decimal arithmetic, not floating point, so a one-cent difference is a real difference. Pending (PDNG) and information entries are excluded. A mismatch usually means a missing page (check :28C: / ElctrncSeqNb), a truncated file, or an import that dropped reversal entries (RvslInd, RC/RD marks).
| Balance code | Meaning |
|---|---|
OPBD | Opening booked |
PRCD | Previously closed booked (used by some banks instead of OPBD) |
ITBD | Interim booked (intraday / intermediate page) |
CLBD | Closing booked |
CLAV | Closing available |
FWAV | Forward available |
Bank transaction codes
camt messages classify each entry with an ISO bank transaction code in three levels, Domain / Family / Sub-family — for example PMNT/RCDT/ESCT (received SEPA credit transfer), PMNT/ICDT/ESCT (issued SEPA credit transfer), PMNT/RDDT/ESDD (SEPA core direct debit collected from you) or ACMT/MDOP/CHRG (charges). Many banks add a proprietary code too, such as the German GVC (166, 105…) that MT940 carried in :86:.
pain.001 checks before you upload
Banks reject payment files for a handful of recurring reasons. SafeCAMT checks them all and shows the exact path (for example PmtInf[1]/CdtTrfTxInf[3]/CdtrAcct/Id/IBAN):
- Counts and control sums —
NbOfTxsandCtrlSuminGrpHdrand in everyPmtInfmust match the transactions (bank status codes AM18 / AM10). - IBAN and BIC — country length and mod-97 check digits for every IBAN (AC01), BIC format (RC01), and ISO 11649
RFcreditor references. - Amounts and currencies — positive amounts, ISO 4217 currency codes, and no more decimals than the currency allows (EUR 2, JPY 0, KWD 3).
- SEPA rules when
SvcLvl/CdisSEPA— EUR only,ChrgBr=SLEV, names ≤ 70 characters, oneUstrd≤ 140 characters, IBANs required, the basic Latin character set. - Identifiers and dates — required
MsgId,PmtInfIdandEndToEndId(≤ 35 characters), duplicate end-to-end IDs (AM05), execution dates in the past or on weekends, version-specificReqdExctnDt/Dt. - Structured addresses — postal addresses given only as
AdrLinewithoutTwnNmandCtryare flagged.
These are structural and business-rule checks, not a full XSD validation; your bank's own validator (or Swift MyStandards) remains the final authority.
Common pain.002 rejection codes
| Code | Name | Typical cause |
|---|---|---|
| AC01 | IncorrectAccountNumber | Invalid IBAN or account format |
| AC04 | ClosedAccountNumber | Creditor account closed |
| AM04 | InsufficientFunds | Not enough cover on the debtor account |
| AM05 | Duplication | Same file or end-to-end ID sent twice |
| AM10 | InvalidControlSum | CtrlSum does not match the transactions |
| AM18 | InvalidNumberOfTransactions | NbOfTxs does not match |
| BE04 | MissingCreditorAddress | Address required for the corridor is missing |
| CH03 / CH04 | Execution date too far in future / past | ReqdExctnDt outside the bank's window |
| FF01 | InvalidFileFormat | XML not valid against the schema the bank expects |
| RC01 | BankIdentifierIncorrect | Invalid BIC |
ISO 20022 migration: where statements and payments stand
For cross-border payment instructions, the Swift MT/ISO 20022 coexistence period ended in November 2025. Statements and reports run on a later track: under Swift's CBPR+ roadmap, institutions must be able to receive the ISO 20022 cash-management messages (camt.052 / camt.053 / camt.054 as the replacements of MT942, MT940/MT950 and MT900/MT910) from November 2027, and retirement of the MT9xx statement messages is planned for November 2028. Many banks already offer camt.053 alongside MT940 today and are moving corporate clients over.
Separately, Swift and the SEPA schemes are retiring fully unstructured postal addresses in payment messages. Swift's cut-off was set for 14 November 2026, but on 27 August 2026 Swift deferred all payment-related changes of Standards Release 2026, including this one, and said it would announce the new timing by December 2026. Some domestic schemes and banks keep their own dates, so SafeCAMT flags unstructured addresses as warnings: confirm the deadline that applies to your bank.
FAQ
Does SafeCAMT upload my bank statements?
No. Files are read and processed entirely in your browser. The page's Content-Security-Policy blocks every network destination except api.polar.sh, which is contacted only when you activate a Pro license key, and only the key is sent. You can confirm in DevTools → Network that opening a statement makes zero requests.
Which camt and pain versions are supported?
camt.052, camt.053 and camt.054 in any published version (for example .001.02, .001.04 and .001.08), pain.001 credit-transfer initiations (for example .001.03 and .001.09), and SWIFT MT940 and MT942 with or without SWIFT block headers. The format and version are detected automatically.
How do I convert camt.053 to Excel?
Open the XML file, check the Transactions tab, and click Export CSV — choose the semicolon option if your Excel uses a decimal comma. SafeCAMT Pro adds a native .xlsx export with separate Transactions, Balances and Checks sheets, and batch processing of many statements at once.
Can SafeCAMT convert MT940 to camt.053?
Yes. Open an MT940 or MT942 file and the "MT940 → camt.053" tab shows the generated camt.053.001.08 XML with balances, entries, parties, IBANs, BICs, remittance and end-to-end IDs mapped from :61: and :86:. Pro users can download the full file. The result is meant for testing and migration work, not as a bank-issued statement.
Why does my statement not reconcile?
SafeCAMT checks that the opening booked balance plus booked credits minus booked debits equals the closing booked balance, using exact decimal arithmetic. A difference usually means a missing statement page, a truncated file, reversal entries that were dropped, or a bank that reports pending entries as booked.
Is the pain.001 check a full XSD validation?
No. SafeCAMT checks structure, required elements, counts and control sums, IBAN and BIC check digits, currency decimals, SEPA scheme rules, duplicate end-to-end IDs, dates and structured addresses — the issues behind most bank rejections. Your bank's own validator remains the final authority.
What does SafeCAMT Pro include, and is it a subscription?
Pro is a one-time $19 payment, not a subscription. It removes the 100-row limit, adds batch processing of many files, native Excel export, and downloading MT940 → camt.053 conversions. Payment is processed by Polar as Merchant of Record.
Can you build a custom bank-format converter for our ERP?
Yes. Email support@biteapps.cc with the formats, banks and target system — Bite Apps builds converters, import mappings and payment-file tooling for finance teams.