Connect your Danish bank account to SmartSpender via the Open Banking API. Free for personal use, takes about 10 minutes.
Enable Banking is a licensed Open Banking provider under PSD2 regulation. It lets you access your own bank transaction data via API, with your explicit consent through MitID. SmartSpender uses this to sync transactions automatically instead of manual CSV exports.
Python 3
Check with python3 --version
SmartSpender cloned
The repo with tools/eb-api.py
Danish bank account
With MitID for authentication
Claude Desktop
With Cowork enabled (Pro, Max, Team, or Enterprise)
Enable Banking's Restricted production mode is free for personal use. You don't need to pay or register a company.
SmartSpender (or whatever you prefer)https://smartspender.mentilead.com/callback.html
After creating the application, copy the Application ID — you'll need it in step 5.
Enable Banking generates an RSA private key for your application. Download the .pem file and save it securely:
mkdir -p ~/.config/smartspender
mv ~/Downloads/private.pem ~/.config/smartspender/private.pem
chmod 600 ~/.config/smartspender/private.pem
Important: This private key can't be downloaded again. If you lose it, you'll need to create a new application.
pip install requests PyJWT cryptography
If pip doesn't work, try pip3 or python3 -m pip install requests PyJWT cryptography
Create ~/.config/smartspender/eb-config.json with your Application ID from step 2:
{
"app_id": "your-application-id-here",
"key_path": "~/.config/smartspender/private.pem"
}
From the SmartSpender project directory, run:
python3 tools/eb-api.py status
You should see "status": "no_session" — that's correct. It means the config is valid but you haven't linked a bank yet.
Common errors:
FileNotFoundError — Check that the key_path in eb-config.json matches where you saved the .pem file
ModuleNotFoundError — Run the pip install step again
Start the authorization flow for your bank. This opens a browser where you'll log in with MitID:
python3 tools/eb-api.py auth --bank Nykredit
After MitID consent, the browser redirects to SmartSpender's callback page, which passes the authorization code back to the local script. The session is created automatically.
Supported Danish banks:
Check that the session is active and list your linked accounts:
python3 tools/eb-api.py status
python3 tools/eb-api.py accounts
The status command shows your session expiry (consent lasts 90 days under PSD2). The accounts command lists all accounts you gave consent for, with their UIDs.
You're all set. In Claude Cowork, run these commands:
/smartspender:add-account enable-banking
Registers your accounts in SmartSpender's data files. Cowork will give you terminal commands to run — paste the output back.
/smartspender:sync enable-banking
Fetches transactions. Same pattern: Cowork tells you what to run in your terminal.
/smartspender:analyze
Categorizes transactions and detects subscriptions. This runs entirely in Cowork.
How it works: API calls run locally on your machine (they need your private key). Cowork handles the analysis, categorization, and reporting — which only needs the CSV data files.
PSD2 rate limits
You can fetch account data up to 4 times per day per account. The tool tracks this and warns you before hitting the limit.
90-day consent
Bank consent expires after 90 days (PSD2 requirement). You'll need to re-authenticate with MitID when it expires. The status command shows days remaining.
Transaction history
The API provides approximately 90 days of transaction history. Older transactions aren't available through Open Banking.
Your credentials stay local
The private key and session data are stored in ~/.config/smartspender/ on your machine. API calls go directly from your machine to Enable Banking. Nothing passes through SmartSpender infrastructure.