Your EU bank transactions, inside Actual Budget. Automatically.
Bridge Bank connects to your EU bank via open banking and imports your transactions into a self-hosted Actual Budget instance once a day. It runs on your own machine — your financial data never touches any third-party server.
- Flexible sync frequency — sync every 6, 12, or 24 hours, at a time you choose
- 2,500+ European banks — Revolut, N26, Monzo, Wise, Millennium BCP, Santander, ING, BNP Paribas, and more across 29 countries
- Multiple bank accounts — connect up to 2 bank accounts by default, each syncing to a different Actual Budget account. Need more? Purchase additional slots from the status page.
- Read-only, always — Bridge Bank can never move money or modify your account
- Pending transaction tracking — pending transactions are imported as uncleared and automatically confirmed when they settle
- Duplicate detection — Bridge Bank tracks every transaction ID so nothing gets imported twice
- Email notifications — an alert if something goes wrong, and a warning before your bank session expires
- Your data, your machine — bank data goes directly from Enable Banking to your machine, never our servers
- Lightweight — runs as a single Docker container
- Runs anywhere — supports x86, Raspberry Pi, and other ARM devices out of the box
- Docker and Docker Compose (runs on x86, Raspberry Pi, and other ARM devices)
- A free Enable Banking account
- A self-hosted Actual Budget instance
- A Bridge Bank licence key — buy one at bridgebank.app
New to self-hosting? Follow the step-by-step guide at bridgebank.app/getting-started — it walks you through everything from Enable Banking setup to running your first sync.
Purchase at bridgebank.app. Your key is delivered to your email instantly.
Enable Banking is the regulated open banking provider that connects Bridge Bank to your bank.
- Sign up at enablebanking.com
- Go to API applications and click Register new application
- Fill in the form:
- Application name: Bridge Bank
- Allowed redirect URLs:
https://bridgebank.app/callback - Application description: Connect Actual Budget with my bank
- Email for data protection matters: your email address
- Privacy URL:
https://bridgebank.app/privacy - Terms URL:
https://bridgebank.app/terms
- Click Register — a
.pemfile will be saved to your Downloads folder. The filename matches your Application ID (e.g.aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.pem). Keep it safe — you'll need it in the setup wizard. - Click Activate by linking accounts on your application page
- Select your country and bank from the dropdowns and click Link
- Follow the steps to log in to your bank and approve read-only access — this activates your Enable Banking app
On your server, create the folder and download the compose file:
mkdir -p ~/bridge-bank/data && cd ~/bridge-bank
curl -O https://raw.githubusercontent.com/DAdjadj/bridge-bank/main/docker-compose.ymlStart the container:
docker compose up -dOpen http://your-server-address:3002 in your browser. The setup wizard will guide you through the rest.
The browser-based wizard walks you through five steps:
- License — enter your key to activate Bridge Bank on this machine
- Actual Budget — enter your Actual Budget URL, password, and Sync ID
- Notifications — set your email and SMTP credentials
- Sync — choose your sync frequency (every 6, 12, or 24 hours) and start date
- Bank — upload your Enable Banking
.pemfile (App ID is filled automatically from the filename), then connect your bank via OAuth. You choose which Actual Budget account each bank syncs to. - Status — view sync history, manage bank connections, check for updates
You can connect up to 2 bank accounts by default. Each bank syncs to a different Actual Budget account (e.g. Revolut → "Revolut", N26 → "N26"). To add a second bank, go to the Bank tab and search for another bank.
Once complete, Bridge Bank runs silently in the background and syncs your transactions every day at the time you chose.
On the first sync, Bridge Bank will import all transactions from the start date you set in the wizard. If you set a past date and already have those transactions in Actual Budget from another source, you may see duplicates — just delete the extras manually. This will only happen once. From the second sync onwards, Bridge Bank tracks every transaction ID and will never import the same transaction twice.
To avoid duplicates entirely, set the start date to today when going through the wizard.
Your bank
↓ (read-only OAuth, Enable Banking)
Bridge Bank (running on your machine)
↓ (Actual Budget API)
Your Actual Budget instance
↓ (SMTP)
Your inbox ← alert emails
On each sync run, Bridge Bank:
- Validates your licence key
- Fetches transactions since the last sync from Enable Banking
- Filters out any transaction IDs already imported
- Writes new transactions to Actual Budget
- Updates any previously pending transactions that have since settled
- Logs the result and sends an alert email if something went wrong
Enable Banking requires you to re-authorise access roughly every 6 months. If you configured email notifications, you will receive a warning before expiry.
To re-authorise, go to the Bank tab in the Bridge Bank web UI and click Re-authorise bank.
Click Check for updates on the Status page. Bridge Bank will pull the latest version and restart automatically.
Or run manually:
docker compose pull && docker compose up -dEach licence key supports up to 2 machine activations. To move Bridge Bank to a new machine, go to the Status page in the web UI and click Deactivate license before reinstalling.
MIT + Commons Clause. Free to self-host for personal use. You may not sell, sublicense, or offer Bridge Bank as a competing service.
Built by David Alves.