Lightweight GitHub Copilot usage dashboard for teams. It reads raw metrics exposed via new Github REST API endpoints for Copilot usage metrics, aggregates them per user, and serves a browser-based leaderboard-style dashboard with filters and trend hints.
Detailed documentation on every metrics
⚠️ Disclaimer: this is a fully vibe-coded project that did not go through comprehensive code review or testing. Results may be inaccurate, and bugs are possible.
- Github Copilot built-in dashboards are still in Public Preview, they are yet rudimentary and require special access rights difficult to obtain in large enterprises.
- Existing external dashboards (by Github, by Microsoft) were not promptly updated for new REST API compartibility and likely stop working on April 2, 2026 when Github sunsets its legacy Github Metrics API.
Dashbord aims at AI/Agile Coaches, Teams leaders, Engineering managers, Project- and Delivery managers, Procurement associates and helps themto quickly answer questions like:
- Who is actively using Copilot and who is not?
- Which models/IDEs/languages are most used?
- How usage differs across teams and time?
This repository is provided with mocked data stored under mock\*.jsonfor demonstration and development.
- Runtime: Node.js (CommonJS)
- Backend: built-in
http,fs,httpsmodules (no framework) - Frontend: vanilla HTML/CSS/JavaScript
- Data source: GitHub REST API
- Storage: local JSON/NDJSON files (
data/*.json)
Project was intentionally built simple and file-based, so you can run it locally without infrastructure or implement your own data persistancy layer.
server.js— starts the web server and serves API + static UIupdate-data.js— fetches new Copilot metrics, stores the, underdata/raw/*.jsonand appends them todata/data.jsondebug.js— downloads hisotrical data todata/debug/*.jsonand compares it with localdata/data.jsondata/config.json— stores Github Organization name and Last synchronized daydata/users.json— UserId mapping to Display name, Team, Revoked status (optional)data/data.json— all your data used to build a dashboardpublic/— dashboard UI assetsdocs/– documentation and screnshots
- Node.js 18+
npm installCopy .env.example to .env:
cp .env.example .envnpm run devOpen http://localhost:3000 - you should see mocked data loaded.
- All Github Copilot users you want to monitor belong to the same Enterprise and same Organization within this Enterprise
- You creted a GitHub personal access token (classic) with
read:org,manage_billing:copilotorread:enterprisescopes. - Copilot usage metrics policy must be enabled for the organization.
- Add
GITHUB_TOKENto.env(use.env.exampleas a template). - Copy
mock\config.jsontodata\config.json - Edit
data\config.json:org: GitHub organization namelast_report_day: set inital day for incremental updates; note that Github Copilot Metrics API provides data only for last 28 days, so setting ot to earlier date won't bring you any data.
- (optionally) Edit
data\users.jsonto map Github usernames to human readable names, indicate revoked licenses and group users into teams.
npm run updateThis runs update-data.js, which:
- fetches daily reports from
last_report_day + 1to yesterday, - saves raw files to
data/raw/, - appends lines to
data/data.json, - updates
data/config.jsonwith the latest successful day.
npm startOpens http://localhost:3000 - you should see real data loaded.
npm start— run the dashboard server (node server.js)npm run dev— same as start (no watcher currently)npm run update— fetch and append new Copilot metrics
debug.js is an all-in-one debug and analysis utility. Run it without arguments to see all available commands.
User-level verification — re-downloads raw data from the API and compares it against data.json:
node debug.js YYYY-MM-DD— re-download one day and comparenode debug.js latest— re-download last 28 days and compare
Org-level metrics — fetches and analyses org-wide aggregated data (active-user counts, breakdowns by IDE/feature/model):
node debug.js org fetch— download latest 28-day org metricsnode debug.js org discover— compare key vocabulary (IDEs, models, features) vsdata.jsonnode debug.js org compare YYYY-MM-DD— check day totals discrepancy: user aggregate vs org
All downloads are saved to data/debug/.
- No database (file-based storage only)
- No auth/access control (deploy locally or in secure environment)
- Update process is not automatic:
- You must run
npm run updatemanually, or - schedule it externally (cron, CI job, task scheduler)
- You must run
- Limited validation and error handling
- No tests
- Metrics interpretation is generic and may not match your KPIs
Contributions are welcomed to address the issues and bring more features.
Licensed under the MIT License.
