Sync your bank to Ghostfolio: automatic EU/UK balances
Ghostfolio is a beautiful, self-hostable dashboard for tracking your net worth and investments. But there's one gap: bank and cash accounts are manual. You type in a balance, and you update it by hand whenever you remember. If you have savings and checking accounts alongside your portfolio, your net worth is always a little stale.
This guide fixes that. With open-banking.io and a small open-source bridge, you can pull your real EU/UK bank balances into Ghostfolio automatically — from 2,600+ banks, with no PSD2/eIDAS certificate, and zero-knowledge encryption so your transaction data is decrypted locally with a key only you hold.
It runs entirely alongside Ghostfolio through its public API — no changes to Ghostfolio core. The Ghostfolio maintainer suggested exactly this approach in discussion #7308, and this is the tool that implements it.
What you'll need
- A running Ghostfolio instance (self-hosted or ghostfol.io).
- An open-banking.io account with at least one bank connected. Pricing starts around €3/month and drops as the user base grows.
- Node.js 20+ (or Docker).
How it works
open-banking.io ──(balances, decrypted locally)──► sync bridge ──(POST /api/v1/account-balance)──► Ghostfolio
open-banking.io is end-to-end encrypted: the service stores only ciphertext it cannot read. The bridge decrypts your balances on your own machine with the private key from your credentials bundle, then writes them to Ghostfolio through its documented public API — exactly as a user with a Security Token would. Your key and your plaintext never leave your machine.
Step 1 — Connect your bank and export your credentials
In the open-banking.io app, connect your bank(s), then export your credentials.json (it contains your API key and your encryption key). Keep this file private — it's the key to your data.
Step 2 — Get your Ghostfolio Security Token
In Ghostfolio, open Settings and copy your Security Token. This is what the bridge uses to authenticate to Ghostfolio's API.
Step 3 — Install the bridge
git clone https://github.com/open-banking-io/ghostfolio-openbanking-sync
cd ghostfolio-openbanking-sync
npm install
npm run build
Prefer Docker? Skip to Automate with Docker below.
Step 4 — Configure
Create a config.json:
{
"ghostfolio": {
"host": "https://your-ghostfolio-host",
"securityToken": "your-security-token"
},
"openBanking": { "credentials": "./credentials.json" },
"accounts": []
}
Step 5 — Discover your accounts
Run --list to see your open-banking.io accounts and your Ghostfolio accounts side by side:
node dist/cli.js --config config.json --list
You'll get something like:
open-banking.io accounts:
id=ob-abc123 Drift (…4927) 828.13 EUR [ITBD]
Ghostfolio accounts:
id=gf-def456 Checking 0 EUR
Add one mapping per account to your config's "accounts" array:
{ "openBankingId": "ob-abc123", "ghostfolioAccountId": "gf-def456" }
Don't have Ghostfolio accounts yet? Let the tool create one per bank account automatically:
node dist/cli.js --config config.json --create
It prints the mapping lines to paste back into your config.
Step 6 — Sync
Preview first (nothing is written):
node dist/cli.js --config config.json --dry-run
Then run it for real:
node dist/cli.js --config config.json
- Drift (…4927): set 828.13 EUR [ITBD @ 2026-07-18] → gf-def456
Done: 1 balance snapshot(s) written to Ghostfolio.
Your Ghostfolio cash account now reflects your real bank balance. Add --refresh to ask open-banking.io to pull fresh data from the bank first.
The bridge prefers booked balances (CLBD/ITBD) over available ones, so Ghostfolio reflects settled money. You can override this per account with "balanceType": "ITAV".
Automate with Docker or cron
Keep balances fresh automatically. With host cron:
0 6 * * * cd /opt/gf-sync && node dist/cli.js --config config.json --refresh >> sync.log 2>&1
Or with Docker Compose (syncs every 24h):
mkdir -p data && cp config.example.json data/config.json # then edit it
docker compose -f docker-compose.example.yml up -d
A prebuilt image is published to ghcr.io/open-banking-io/ghostfolio-openbanking-sync.
Privacy, in one paragraph
Your bank data is sealed in a per-field envelope (ECDH-P256 → HKDF-SHA256 → AES-256-GCM) that only your private key can open. open-banking.io holds ciphertext; the bridge decrypts on your machine; Ghostfolio receives only the numbers you choose to sync (balances). The tool is MIT-licensed and open source — read every line at github.com/open-banking-io/ghostfolio-openbanking-sync.
Why open-banking.io
- 2,600+ EU/UK banks — including the long tail that Plaid/aggregators skip.
- No certificates. No PSD2 licence, no eIDAS QWAC. You connect with a credentials file, full stop.
- Zero-knowledge. The service can't read your transactions; only you can.
- From ~€3/month, priced for individuals and self-hosters, not enterprises.