Ghostfolio
Open-source wealth and portfolio tracker
Ghostfolio is an open-source wealth management application for tracking stocks, ETFs, and cryptocurrencies. It provides portfolio analysis, performance charts, and asset allocation insights.
Key features
- Multi-asset portfolio tracking
- Performance and allocation charts
- Dividend and fee analysis
- REST API access
Pros & cons
Strengths
- Clean, focused dashboard
- Supports many asset classes
Trade-offs
- Requires manual or imported data
- No automatic broker sync
Ghostfolio replaces
Last reviewed Aug 26, 2026 · 776 words
Ghostfolio will never log into your broker. Every buy, sell, dividend and fee is in there because you typed it or imported it from a CSV, and if that sentence made you wince, close the tab now. If instead you hold accounts at 3 brokers, a crypto exchange and a pension provider and the spreadsheet tying them together has stopped being trustworthy, Ghostfolio is the cleanest self-hosted answer to "what is my actual return, net of fees, across everything". The manual entry is the price of the privacy: no aggregator has your credentials, and the server only ever fetches public prices.
Manual entry is the design
The data model is a list of activities: buy, sell, dividend, fee, interest and liability, each with a date, quantity, unit price and currency, attached to an account. From that list Ghostfolio computes holdings, cost basis, time-weighted performance, allocation by asset class, sector and country, and the dividend and fee totals that most broker statements bury. Prices for stocks, ETFs and crypto come from public market data sources (Yahoo Finance and CoinGecko are the defaults), so the outbound traffic is "what is VWRL trading at", never "here is what I own".
The CSV importer is how a real portfolio gets in. Export activity history from each broker, map the columns once, and import; the app previews rows and flags unknown symbols before committing. After the initial load, keeping it current is a 2-minute job on the days you trade. Anyone who trades daily will hate this; anyone who buys an index fund monthly will not notice.
Three containers and two secrets
Ghostfolio is a TypeScript app that needs PostgreSQL and Redis. The compose file below runs on 512 MB, though 1 GB leaves room for Postgres to breathe:
services:
ghostfolio:
image: ghostfolio/ghostfolio:latest
ports:
- "3333:3333"
environment:
DATABASE_URL: postgresql://ghostfolio:change-me@postgres:5432/ghostfolio?connect_timeout=300&sslmode=prefer
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: change-me-too
ACCESS_TOKEN_SALT: replace-with-64-random-characters
JWT_SECRET_KEY: replace-with-another-64-random-characters
depends_on:
- postgres
- redis
restart: unless-stopped
postgres:
image: postgres:alpine
environment:
POSTGRES_DB: ghostfolio
POSTGRES_USER: ghostfolio
POSTGRES_PASSWORD: change-me
volumes:
- ./postgres:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:alpine
command: redis-server --requirepass change-me-too
restart: unless-stopped
Login works differently from most apps. There are no passwords: creating a user generates a long security token, and that token is the credential. Save it in your password manager the moment it appears, because the first account created becomes the admin and there is no reset flow that skips the database. ACCESS_TOKEN_SALT and JWT_SECRET_KEY are what make those tokens valid; changing either one after the fact invalidates every login. Generate them once, back them up with the database, and never rotate them casually.
What it measures well and what it does not
Performance over any period, benchmarked against an index of your choice; allocation drift against a target; the fee total per year that quietly explains why one account underperforms; dividends by month; cash across currencies with conversion at current rates. Multi-user support means a household can share one instance with separate views, and the REST API lets a script post new activities if you want to automate a broker export.
What it does not do is budgeting, bank feeds, bills or net worth including the house. Ghostfolio is investments only, and pairing it with Firefly III for day-to-day money or Actual Budget for envelope budgeting is the normal setup in the finance category. Trying to make Ghostfolio track your current account will end in a liability entry you regret.
Keep it private, back up the one thing that matters
Nothing about this app needs to be on the public internet. Reach it over Tailscale or your VPN, and the token-only login stops being a worry. Everything of value is in Postgres; a nightly pg_dump shipped off the box is the entire backup plan, and the Postgres for everything post covers doing that properly. Redis is a cache and can be lost without consequence.
What I'd do
Run the compose above on whatever box already hosts Postgres, restrict it to the VPN, and spend one evening importing broker CSVs back to the first purchase. Set a benchmark, enable the allocation target, and check it once a month. If the monthly entry chore lasts three months you will keep it forever; if you skip it twice, delete the stack and accept that you wanted a broker aggregator, which is a different product with a different privacy trade.
Compare Ghostfolio
4 head-to-head comparisons.
Similar budgeting & finance apps
Maybe
Budgeting & FinanceOpen-source personal finance and wealth app
Replaces Mint, Personal Capital
HyperSwitch
Budgeting & FinancePayment switch to make payments fast, reliable and affordable
Actual Budget
Budgeting & FinanceLocal-first envelope budgeting app
Replaces YNAB, Mint
Firefly III
Budgeting & FinanceSelf-hosted personal finance manager
Replaces Mint, YNAB
Lago
Budgeting & FinanceOpen-source billing and metering API
Replaces Stripe Billing, Chargebee
Akaunting
Budgeting & FinanceFree open-source accounting software online
Replaces QuickBooks, Xero