Bug Bounty Tracker

Bug Bounty Tracker

A local-first dashboard for tracking bug bounty submissions, program scope, payout history, and yield analytics. Built with Python + SQLite, with a clean terminal UI and optional web dashboard.

Overview

Keeping track of submissions across Immunefi, HackerOne, Bugcrowd, and Intigriti manually is a mess. This tracker centralises everything — programs, submissions, status updates, and payout data — with analytics to understand where your time is best spent.

Stack

Setup

Kali Linux

git clone https://github.com/rootwithkhandal/bounty-tracker
cd bounty-tracker

python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# Initialise database
python tracker.py init

# Launch terminal UI
python tracker.py

# Launch web dashboard (optional)
uvicorn web:app --port 8080
# Open http://localhost:8080

macOS

git clone https://github.com/rootwithkhandal/bounty-tracker
cd bounty-tracker

python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt

python tracker.py init
python tracker.py

# Web dashboard
uvicorn web:app --port 8080
open http://localhost:8080

Windows

git clone https://github.com/rootwithkhandal/bounty-tracker
cd bounty-tracker

python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt

python tracker.py init
python tracker.py

# Web dashboard
uvicorn web:app --port 8080
# Open http://localhost:8080 in browser

Usage

# Add a new program
python tracker.py add-program --name "Acme Corp" --platform hackerone --scope "*.acme.com"

# Log a submission
python tracker.py submit \
  --program "Acme Corp" \
  --title "SSRF via redirect" \
  --severity high \
  --status pending

# Update submission status
python tracker.py update --id 42 --status resolved --payout 1500

# View analytics
python tracker.py stats

# Export to CSV
python tracker.py export --output submissions.csv

Analytics

The dashboard tracks:

Database Schema

CREATE TABLE programs (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  platform TEXT,
  scope TEXT,
  active BOOLEAN DEFAULT 1
);

CREATE TABLE submissions (
  id INTEGER PRIMARY KEY,
  program_id INTEGER REFERENCES programs(id),
  title TEXT NOT NULL,
  severity TEXT CHECK(severity IN ('critical','high','medium','low','info')),
  status TEXT DEFAULT 'pending',
  payout REAL DEFAULT 0,
  submitted_at DATE DEFAULT CURRENT_DATE,
  resolved_at DATE
);