copilot-tax
Live leaderboard of GitHub Copilot model multipliers and AI-Credit costs vs. raw OpenRouter API rates — with a countdown to the June 1, 2026 Copilot billing transition.
Live: https://holyai.me/copilot-tax/
What it does
GitHub is flipping Copilot from request-based billing to AI Credits on June 1, 2026. Every model picks up a multiplier (Claude Sonnet 4.6 = 1×, Claude Opus 4.7 jumps from 7.5× to 27× on annual plans, GPT-5.5 promo = 7.5×, …). One credit = $0.01.
copilot-tax answers, live:
- What does each model actually cost on Copilot today vs. tomorrow?
- How does that compare to the raw OpenRouter rate (the same model, billed by token)?
- Which plan — Pro / Pro+ / Max — fits your usage without forcing you to pay overage?
- What multipliers changed since the last snapshot, and by how much?
Data sources (every fetch frequency is logged)
| Source | Frequency | What we extract |
| ------------------------------------------------------------------------------------------------------------ | -------------- | -------------------------------------------------------------- |
| https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing | every 6 hours | monthly multipliers per model |
| https://docs.github.com/en/copilot/reference/copilot-billing/model-multipliers-for-annual-plans | every 6 hours | annual multipliers per model |
| https://docs.github.com/en/copilot/concepts/billing/individual-plans | daily 03:00 UTC | base + flex credits and monthly price for Pro / Pro+ / Max |
| https://openrouter.ai/api/v1/models | every 30 min | raw input/output price per million tokens for the mapped models |
The editorial mapping from "Copilot model" to "OpenRouter model" lives in data/model-map.json. It is not a price source — it just says "the model GitHub calls claude-opus-4.7 is the same model OpenRouter calls anthropic/claude-opus-4.7".
No mocks, no seeds
There is no fallback data anywhere in this codebase. If a fetch fails, the previous snapshot is served and the failure is recorded in the fetches table (visible on the Methodology tab). If the DB has never seen data, /api/models returns { "status": "awaiting_first_fetch", "models": [] } and the UI says so. No Math.random() jitter, no hardcoded multipliers, no "realistic preset" arrays.
API
All endpoints are public. No auth, no API key.
| Method | Path | Purpose |
| ------ | ------------------------------------- | ---------------------------------------------------------- |
| GET | /copilot-tax/health | uptime + last-fetch summary |
| GET | /copilot-tax/api/models | leaderboard rows with computed Copilot tax ratio |
| GET | /copilot-tax/api/models/:githubName | per-model history (multipliers, OR rates, alerts) |
| GET | /copilot-tax/api/plans | latest Pro / Pro+ / Max snapshot with derived metrics |
| GET | /copilot-tax/api/alerts?limit=50 | recent multiplier-change / plan-change / new-model events |
| GET | /copilot-tax/api/diff?since=YYYY-MM-DD | alerts since a given date |
| GET | /copilot-tax/api/methodology | editorial constants, sources, last fetches, model map |
| GET | /copilot-tax/api/countdown | seconds remaining until 2026-06-01T00:00:00Z |
| POST | /copilot-tax/api/calc | given requests/day + share map + plan_type, project burn |
Install
git clone <repo>
cd copilot-tax
cp .env.example .env
npm install
npm start
Server listens on http://127.0.0.1:4847/copilot-tax/.
The better-sqlite3 native binding may need to be built from source on some platforms; on macOS / Linux arm64 the prebuilt binary is downloaded automatically.
Deployment
DEPLOY_MANIFEST.json is consumed by the RNDLAB orchestrator. The watcher rsyncs to /var/www/projects/copilot-tax, registers copilot-tax.service under systemd, routes holyai.me/copilot-tax/ through nginx upstream 127.0.0.1:4847, and grabs a Playwright thumbnail for the showcase. No basic auth.
License
MIT.