CAMT files are XML reports that banks use to transmit financial transactions and balances. Think of your bank statement, but in a standardized digital format. The idea is that software can more easily read these files and process them automatically.
Different Versions
There are different “flavors” of CAMT files, each serving a different purpose:
-
camt.052: Mainly covers intraday transactions (interim balances throughout the day).
-
camt.053: This is your daily or periodic bank statement.
-
camt.054: Provides notifications of individual credits and debits (credit and debit notifications).
They are quite similar in structure, but the content and timing differ. In general, CAMT.053 (the “End-of-Day Statement”) is the most suitable for audit purposes because this type provides a complete overview of all transactions and the ending balance for a specific period (usually daily).
While CAMT.052 (intraday) and CAMT.054 (notifications) can also be useful for identifying or tracking transactions throughout the day, these messages are generally less suitable as a formal source for audits. After all, they do not provide a ‘closed’ period overview but rather (interim) status reports or notifications.
Which Banks Use CAMT?
Many European banks now support CAMT standards. In the Netherlands, banks like ING, Rabobank, and ABN AMRO offer it as a replacement for the old MT940 standard. You also see major banks in other European countries increasingly distributing CAMT reports. The idea is to have a uniform standard so that companies and accountants do not have to deal with different file formats each time.
Disadvantages of Batch Details
However, not everything is perfect. Sometimes transactions are grouped in a batch. For example, if you make several online purchases on the same day from one party, those payments may appear bundled in your CAMT file. You would then see one total amount instead of multiple individual transactions. This can be inconvenient if you want to know exactly which payments are included in that “combined” amount.
Often, when making such batch payments in the bank, a SEPA file must be imported. It is advisable not to delete this file; you can often still link it later with a CAMT file to view the details.
CAMT to CSV or Excel
When you open a CAMT file, it may not immediately make much sense. That’s why many people look for a suitable way to convert it. Below is a simple Python script. It’s not extremely sophisticated, but it demonstrates the principle. You will still need some XML knowledge, especially because CAMT files often have namespaces (such as urn:iso:std:iso:20022:tech:xsd:camt.053.001.02
). You need to check which namespace is in your CAMT file and adjust accordingly.
import xml.etree.ElementTree as ET
import pandas as pd
import os
# --- Configuration ---
# Enter the name of your CAMT.053 XML file here
xml_file = 'dummy_camt.053.xml'
# Desired name for your Excel file
output_excel_file = 'camt_basic_output.xlsx'
# --- End Configuration ---
# Namespace for CAMT files
ns = {'camt': 'urn:iso:std:iso:20022:tech:xsd:camt.053.001.02'}
# Check if the XML file exists
if not os.path.exists(xml_file):
print(f"Error: The file '{xml_file}' was not found. Please check the filename and path.")
else:
# Parse the XML file
tree = ET.parse(xml_file)
root = tree.getroot()
# List to store transaction data
transactions = []
# Iterate through all 'Entry' (transaction) elements
for entry in root.findall('.//camt:Ntry', ns):
# Basic data
amount_element = entry.find('camt:Amt', ns)
amount = float(amount_element.text) if amount_element is not None else 'N/A'
credit_debit_element = entry.find('camt:CdtDbtInd', ns)
credit_debit = credit_debit_element.text if credit_debit_element is not None else 'N/A'
booking_date_element = entry.find('.//camt:BookgDt/camt:Dt', ns)
booking_date = booking_date_element.text if booking_date_element is not None else 'N/A'
val_date_element = entry.find('.//camt:ValDt/camt:Dt', ns)
value_date = val_date_element.text if val_date_element is not None else 'N/A'
addtl_info_element = entry.find('camt:AddtlNtryInf', ns)
additional_info = addtl_info_element.text if addtl_info_element is not None else 'N/A'
transactions.append({
'Amount': amount,
'Type': 'Credit' if credit_debit == 'CRDT' else 'Debit',
'Booking Date': booking_date,
'Value Date': value_date,
'Description': additional_info
})
# Create a DataFrame and save to Excel
if transactions:
df = pd.DataFrame(transactions)
df.to_excel(output_excel_file, index=False)
print(f"Success! {len(transactions)} transactions have been exported to '{output_excel_file}'.")
else:
print("No transactions found in the file.")
Ready for the next step? Discover the full toolkit!
This starter script gives you a solid foundation. Want something more comprehensive? Then the CAMT Analytics Toolkit is the perfect upgrade.
Why upgrade?
- More Complete Data Extraction: Go beyond the basics and extract important details like the counterparty's name and account number (IBAN).
- Maximum Reliability: The toolkit is designed to handle various types of CAMT files. Missing data? No problem. The script won't crash unexpectedly and ensures smooth processing.
- Explanation & Documentation: The toolkit also includes extensive documentation; for example, how to determine reliability and how the script works exactly. Also, instructions for beginners on how to run the scripts.
- Additional Analyses: The toolkit is more than just a conversion script. It also includes ready-to-use scripts for:
- Duplicate Transaction Analysis: Instantly find and flag potential duplicate payments.
- Country Analysis: See at a glance from which countries you receive money or where it goes.
- Easy to Use: No fussing with code. The scripts are ready to use right away.