FREE MINI-COURSE · 5 MODULES

From Bank Statement to Cash Position

The Hybrid Treasurer's Toolkit — the practical guide, step by step

Power Query + Excel. Zero budget. Turn raw MT940, CAMT.053, CSV, and PDF bank files into a single, automated daily cash position.

Raw Data
Parse
Clean
Cash Position
After this course, you will be able to
  • → Parse MT940, CAMT.053, and CSV bank files into one clean 6-column table in Power Query
  • → Standardize IBANs, naming, dates, and remove duplicates so the data actually merges
  • → Append every bank into a single daily cash position, grouped by account and currency
  • → Automate the whole pipeline with Power Automate so it's ready every morning without you

The Hybrid Treasurer's Toolkit · treasuryease.com

What Banks Send You

Before you build anything, understand what you're working with.

MT940
Format

SWIFT standard

Looks like

Tagged text (:60F:, :61:, :62F:)

The catch

One long text block, not tabular

CAMT.053
Format

ISO 20022 XML

Looks like

<BkToCstmrStmt> nested XML

The catch

Deeply nested, verbose structure

CSV / Excel
Format

Bank portal export

Looks like

Columns vary per bank

The catch

No standard — every bank different

PDF
Format

The worst case

Looks like

Scanned or formatted tables

The catch

Not machine-readable without OCR

Step 1

Parse It — Extract What Matters

Goal: turn raw bank files into a clean table with 6 columns.

Your target table
DateAccount (IBAN)CurrencyDebit/CreditAmountBalance
2025-02-14DE89 3704 0044 0532EURCredit+45,230.00182,450.00
How to do it in Power Query
CSV / Excel
Easy

Get Data → From File → select your export. Power Query auto-detects columns. Rename to match target table. Set data types (Date, Currency, Number).

MT940
Medium

Get Data → From File → as Text. Use column delimiters on SWIFT tags (:60F:, :61:, :62F:). Split into rows by transaction marker. Extract fields with Text.BetweenDelimiters().

CAMT.053 (XML)
Easy

Get Data → From XML. Excel displays the XML as a normal table.

Step 2

Clean It — Standardize Everything

Your parsed data is usable. Normalize it for better usage.

IBAN as Primary Key

One unique identifier per account. No ambiguity.

Before
"Main Account", "Acct-001", "Deutsche Bank EUR"
After
DE89370400440532013000
One Naming Convention

Entity | Location | Currency | Purpose. Always.

Before
"DB Frankfurt", "deutsche_bank", "DB-EUR-Main"
After
Deutsche Bank | Frankfurt | EUR | Operating
Consistent Date Format

Power Query sorts correctly. No regional traps.

Before
"14/02/2025", "Feb 14, 2025", "2025.02.14"
After
2025-02-14 (ISO 8601)
Kill Duplicates

Group By or Distinct on composite key.

Before
Same transaction from statement + portal export
After
Remove Duplicates in PQ on Date + IBAN + Amount
Step 3

Build It — One View, All Cash

Combine all parsed & cleaned bank data into a single cash position.

In Power Query
1
Append Queries — Stack all bank sources into one master table

Home → Append Queries → select all parsed bank tables

2
Group By Account + Currency — Get latest balance per account

Group By IBAN + Currency → Max(Date) → corresponding Balance

3
Add calculated columns — Total by currency, grand total in base CCY

Add Column → Custom → multiply by FX rate for base currency conversion

4
Load to Excel — Pivot table ready or direct dashboard

Close & Load → to Table or to PivotTable

Result: your daily cash position
AccountBankCurrencyBalanceBase (EUR)
DE89 3704 0044 0532Deutsche BankEUR182,450182,450
GB29 NWBK 6016 1331NatWestGBP94,200110,214
US64 CITI 0000 1234CitiUSD256,800237,540
TOTALEUR 530,204
Step 4

Automate It

You've built the process. Now make it run without you.

Bank sends statement file
SFTP, email, or portal
→
File lands in shared folder
OneDrive, SharePoint, network
→
Power Query refreshes
Data → Refresh All / VBA trigger
→
Cash position updated
Ready by 8 AM every morning
Level Up: Power Automate

Trigger: "When a file is created in folder" → Action: Run Excel script (Refresh All) → Action: Send email with cash position summary to treasury team.

Total setup time: ~1 hour. Cost: included in Microsoft 365.

The Full Pipeline

Get bank filesMT940, CAMT.053, CSV, Excel
Parse & cleanPower Query: import, standardize, deduplicate
Build cash positionAppend all banks, group by account + currency
Automate dailyPower Automate trigger + Refresh All + email
€0
if you have Microsoft 365
1–2 days
setup time
30–60 min
daily time saved

Enjoy!

✓ Course complete

What you know now

MT940 and CAMT.053 files felt unusable outside a TMS

→ You know exactly which Power Query import method parses each format into one clean 6-column table

Merging bank data meant messy, inconsistent account names and dates

→ You have 4 concrete before/after rules: IBAN as key, one naming convention, ISO dates, dedupe on Date+IBAN+Amount

A daily cash position across banks meant manual copy-paste every morning

→ You can Append, Group By, and load to Excel — then let Power Automate refresh and email it before you're at your desk

Built by a treasurer, for treasurers. · treasuryease.com