Raiffeisen ELBA Banking Automation
Fetch current account balances, securities depot positions, and transactions for all account types in JSON format. Uses Playwright to automate Raiffeisen ELBA online banking.
⚠️ Security & 2FA Flow
This skill requires explicit 2FA approval on the user's mobile device (pushTAN).
- Start the Login Process: Start the login using the OpenClaw
processtool with theexeccommand or run it as a background job via theexectool. - Tell the user to approve: You MUST stop executing further commands and inform the user of the pushTAN code (e.g.,
ELBA PUSHTAN CODE: XXXX). Do not loop polling the process without telling the user what to do. Usesessions_yieldto wait for the user to confirm approval. - Wait for approval: Only resume the automation flow after the user confirms approval. If the login process exits with a timeout (usually 60-300 seconds), ask the user if they are ready before restarting the login.
- Ephemeral Bearer Token: After successful 2FA, the token is cached locally (
0600). - Always Logout: Run
logoutafter completing operations to clear the session.
Setup & Configuration
See SETUP.md for prerequisites and configuration.
- Profiles: Credentials live in
<WORKSPACE_ROOT>/raiffeisen-elba/config.json. If it has aprofilesobject, each key is a profile name; check which profiles exist when it is ambiguous which login the user means. - Profile Argument: If multiple profiles exist, pass
--profile <name>to all ELBA commands. The argument must match the key inconfig.json.
Commands
Entry point: python3 {baseDir}/scripts/elba.py
# Authenticate (requires pushTAN approval)
python3 {baseDir}/scripts/elba.py [--profile <name>] login
# List all accounts
python3 {baseDir}/scripts/elba.py [--profile <name>] accounts [--json]
# Download transactions (--json prints to stdout; --out <file> writes a file instead)
# Important: If the account ID/IBAN fails, check the exact ID string output by the `accounts` command. Some accounts have an internal ID rather than a pure IBAN.
python3 {baseDir}/scripts/elba.py [--profile <name>] transactions --account <id|iban> --from YYYY-MM-DD --until YYYY-MM-DD [--json]
# Fetch depot portfolio positions
python3 {baseDir}/scripts/elba.py [--profile <name>] portfolio --depot-id <id> [--json]
# Clear session and cached token
python3 {baseDir}/scripts/elba.py [--profile <name>] logout
Recommended Workflow
- Check
config.jsonfor the profile name if more than one login is configured. - Run the
loginprocess using theexecandprocesstools to read the generated pushTAN code. - Inform the user to approve the pushTAN on their device and wait for their confirmation.
- Once logged in, run
accounts --jsonto get the list of accounts and exact account IDs. - Run
transactions --account <exact-id-from-step-4> --from YYYY-MM-DD --until YYYY-MM-DD --jsonand redirect the output to a JSON file (e.g.> /tmp/elba_tx.json). Progress messages go to stderr, so the file contains only JSON. - Run
logoutto clear the session.
