Sign inSign up

thewilqq/btc-tracker

By thewilqq

•Updated 12 days ago

Self-hosted Bitcoin portfolio tracker with multi-user support

Image
0

10K+

thewilqq/btc-tracker repository overview

⁠BTC Tracker

Docker Pulls Docker Image Size GitHub Stars License Discord Buy Me A Coffee Lightning

Self-hosted Bitcoin portfolio tracker - that's it.

If you find BTC Tracker useful, please consider giving it a star⁠ ⭐

Track your Bitcoin investments privately on your own PC. Import transactions from exchanges or add them manually. Multi-user support with admin controls. Your data never leaves your server, period.

⁠Install on Umbrel

Available on Umbrel App Store

Special thanks to @dennysubke⁠ for helping bring BTC Tracker to Umbrel!

Install BTC Tracker with one click on your Umbrel home server

⁠Features

⁠Portfolio Tracking
  • Live price updates - Automatic price fetching with real-time P&L calculations
  • Transaction history - Buy, sell, and transfer transactions with full history
  • Hot/cold distribution - Track your storage distribution across wallets
  • Multi-currency support - USD, EUR, GBP, PLN, or add your own custom currencies
⁠Analytics & Insights
  • Performance tracking - See your gains across different timeframes (24h, 7d, 30d, 1y, all-time)
  • DCA analysis - Understand your dollar-cost averaging performance
  • Interactive charts - Price charts with your transaction markers
  • Monthly summaries - Track your accumulation month by month
⁠Planning Tools
  • Savings goals - Set BTC targets and track progress
  • DCA calculator - Plan future purchases with backtesting
  • Recurring transactions - Auto-log your DCA purchases
⁠Customizable Dashboard
  • Drag & drop widgets - Arrange your dashboard your way
  • Show/hide widgets - Only see what matters to you
  • Multiple widget types - Chart, portfolio, transactions, goals, DCA analysis, and more
⁠Privacy & Control
  • 100% self-hosted - Your data never leaves your server
  • Multi-user support - First user becomes admin, create accounts for family
  • Easy import - Auto-detect CSV format from Kraken, Binance, Coinbase, Strike, River, 21bitcoin, Cash App, Revolut X
  • Simple backup - Single SQLite file, easy to backup and restore

⁠Screenshots

Dashboard Customisable dashboard: portfolio value, price chart with your buys, quick actions, wallets, DCA score and milestones

Transactions - import, filters and history

Transactions Every buy, sale and wallet move in one table, with CSV import from 9 exchange formats

Analytics - returns and performance

Analytics Total return, your average price vs today, each month's buys at today's price and your stack over time

DCA analysis - how well you're buying

Analysis DCA score with timing and consistency, what-if scenarios and purchase distribution

Goals - savings targets

Goals Set a target like 1 BTC by 2030 and track your progress

Auto DCA - recurring purchases

Auto DCA Recurring buys that record themselves at the current price

Admin - multi-user management

Admin Panel Manage the users on your server (admin only)

Currencies - multi-currency support

Currencies Calculate in one currency, show another, and add your own

⁠Quick Start

With Docker (recommended):

git clone https://github.com/wilqq-the/BTC-Tracker.git
cd BTC-Tracker
cp docker.env.example .env
# Edit .env and add NEXTAUTH_SECRET
docker-compose up -d

Local development:

npm install
cp .env.example .env
# Add NEXTAUTH_SECRET to .env
npm run dev  # Migrations run automatically

Windows Desktop App (Beta):

Download the installer from the latest release⁠ — no Docker or browser required. Everything runs locally on your machine.

Open app and register the first user (becomes admin automatically).

⁠How multi-user works

  • First user = automatic admin
  • Admin panel in Settings tab (admin users only)
  • Create users with email/password
  • Each user sees only their own transactions and portfolio
  • No data mixing between users

⁠Admin features

  • Create/delete user accounts
  • Activate/deactivate users
  • View system stats (user count, total transactions)
  • Cannot see other users' financial data (privacy protection)

⁠Importing transactions

  1. Export CSV from your exchange (Kraken, Binance, Coinbase, Strike, River, 21bitcoin, Cash App, Revolut X)
  2. Go to Transactions tab > Import
  3. Drop the CSV file - format detected automatically
  4. Review and import

Supports most major exchanges. If yours isn't supported, open an issue with example file.

⁠Tech stack

  • Frontend: Next.js, React, TypeScript, shadcn/ui
  • Backend: Next.js API routes, Prisma ORM
  • Database: SQLite (single file, easy backups)
  • Deployment: Docker

⁠Development

npm run dev      # Start dev server
npm run build    # Build for production
npm test         # Run tests
npm exec prisma studio # Database GUI

⁠Why I built this?

Existing portfolio trackers either:

  • Send your data to third parties
  • Don't support multiple users
  • Have terrible import systems
  • Cost money for basic features
  • Require xpub or zpub wallet address

This gives you complete control over your Bitcoin tracking data.

⁠Requirements

  • Docker (recommended) or Node.js 18+
  • ~100MB disk space for the app
  • SQLite database (included, single file)

⁠Backup & Restore

Your data lives in a single SQLite file. The easiest way to manage backups is from the app:

Settings → Backup (admin only):

  • Download backup — grab a full-database snapshot to your computer
  • Server snapshots — create/keep snapshots on the server and download, restore, or delete them
  • Restore from a file — upload a backup to replace all data (a safety backup of the current database is taken automatically first)
  • Automatic backups — schedule periodic snapshots with retention (keep last N / keep N days)

A backup is the whole database (every user's data), so restoring is admin-only and replaces everything.

Note: Exchange API credentials are encrypted with a key derived from NEXTAUTH_SECRET. A backup restored on the same install decrypts them fine; restoring onto an install with a different NEXTAUTH_SECRET leaves those credentials unreadable (all other data is unaffected). After a restore you may need to sign in again.

You can still back up manually by copying the SQLite file:

# Docker
docker cp btc-tracker:/app/data/bitcoin-tracker.db ./backup.db

# Local
cp prisma/dev.db ./backup.db

To restore manually, copy the file back and restart the app.

⁠Community

⁠Contributing

Found a bug? Want a feature? Open an issue⁠.

Want to add support for another exchange? Check the Parser Development Guide⁠.

Want to automate transactions via n8n or scripts? Check the API Documentation⁠.

⁠License

MIT - do what you want with it.


Your Bitcoin data belongs to you, not someone else's.

Tag summary

Content type

Image

Digest

sha256:f7780ebf7…

Size

178.4 MB

Last updated

12 days ago

docker pull thewilqq/btc-tracker