Leaderboards answer the most common question in any GitHub org: who’s doing what? They break down contribution activity per contributor, per repository, and per team — scored against rules you control.
How leaderboards work
Leaderboards are computed from signals — normalized events pulled from the GitHub API. Each commit, PR, review, issue, and comment becomes a signal with a point value. The scoring engine runs those signals through your configured ruleset and produces a ranked list.
The pipeline looks like this:
- Resolve repos for the scope (entire org, a single repo, or a team’s repos)
- Fetch data from GitHub via GraphQL with ETag caching — avoids re-downloading unchanged data
- Normalize raw API responses into
Signal[]objects with content-hash dedup - Upsert signals to the partitioned
signalstable - Score each signal against the rule set — base points, multipliers, quotas, penalties
- Write to
leaderboard_materializations+computed_scoresfor fast reads - Cache the response in Redis + in-memory LRU for subsequent requests
For the architecture deep dive, see Scoring Overview.
Leaderboard modes
Contributor leaderboard (default)
The default view ranks individual contributors. Each user’s signals are processed chronologically with full context — daily quotas, diminishing returns, and multipliers all apply. This gives the most accurate picture of an individual’s contribution.
Repository leaderboard
Signals are grouped by repository. Each repo gets its own scoring context with quotas skipped (those are per-user concepts). Zero-point conditions and penalties still apply. This tells you which repos have the most activity.
Team leaderboard
User scores are computed first (same as contributor mode), then summed per team. A user in multiple teams contributes their full score to each one. Users are deduplicated within a single team.
Configuration
You can customize exactly how scoring works via the Scoring Configuration page at /[organization]/leaderboards/scoring:
- Base points — how many points each signal type is worth (commits, PRs, reviews, etc.)
- Multipliers — bonus factors for first activity, linked issues, merged PR commits
- Daily quotas — cap on how many signals of a type earn points per day
- Diminishing returns — reduces point value after a weekly threshold to prevent farming
- Zero-point conditions — self-reviews, bot activity, self-merges, etc.
- Penalties — negative points for spam or PRs closed without merging
These are all adjustable per-installation and you can have multiple named presets.
Reading the leaderboard
Entries show:
- Rank — position in the sorted list
- User — login name
- Score — total points after all rules applied
- Breakdown — points per signal type (commits, PRs, reviews, issues, penalties)
- Activity — last activity timestamp
When the in-memory LRU or Redis cache is fresh, the leaderboard loads instantly. Stale caches trigger a background refresh so you always see data quickly.
Related
- Scoring Overview — architecture, pipeline, entity types
- Scoring Engine — signal types, algorithm, multipliers, quotas
- Configuration & Presets — customizing rules and managing presets
- Scoring Reference — DB schema, types, module map
- Organization Analytics — dashboards and visualizations