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.

Get started with open-banking.io →