Copilot billing
How Copilot billing works, and why the totals move.
Short answer
GitHub Copilot billing has two components on one line item: a per-user seat subscription charged on your billing cycle, and metered consumption charged above each plan's included allowance. Seat changes take effect on the cycle rather than immediately, and metered amounts arrive from the billing API a few days behind the usage that produced them.
The anatomy of a Copilot line item
What appears as one charge is two mechanisms. The subscription part is a straightforward per-assigned-user price determined by your plan tier — predictable, and the same every month unless assignment changes. The metered part is consumption above your plan's included allowance, billed as overage.
The two behave so differently that treating the line item as a single number makes the month impossible to explain. A total that rose could mean four new hires or one team adopting agents, and those need entirely different responses.
Seats, cycles and mid-month changes
Copilot seats are managed by assignment, and assignment changes are settled against your billing cycle rather than the moment you make them. A seat you unassign generally remains usable until the end of the current cycle and stops renewing after that.
The practical consequence: reclaiming a seat saves next month, not this one. That is not a reason to delay — it is a reason to run seat reviews weekly rather than quarterly, because each review only ever affects the cycles that follow it.
Budgets, cost centers and spending limits
GitHub's billing platform provides budgets with alert thresholds and cost centers for grouping spend. These are genuinely useful and worth configuring, with two caveats.
First, a budget alert tells you that something happened, not what. It is a backstop behind attribution, not a replacement for it. Second, cost centers group at the account structure you already have — if your GitHub org structure does not resemble your finance structure, cost centers will faithfully reproduce the mismatch.
Why your dashboard and your invoice disagree
GitHub gives you two different kinds of number and they are not interchangeable. Usage signals — a seat's last-activity timestamp, minutes consumed, a daily per-user credit hint — arrive fast and describe behaviour. Billed amounts arrive from the billing API, lag the signals by a few days by design, and are what finance will actually be invoiced. Merge the two and you get a dashboard that is confidently wrong. Keep them apart, anchor the signal to the billed total, and show the gap.
This is the single most common source of confusion about Copilot billing, and it is not a defect in either source. Usage endpoints tell you what people did; the billing API tells you what you owe. FinOpsAid shows both and states which is which — every figure is labelled billed or modeled, with an as-of date.
Getting the data out
For anything beyond the built-in views you will want the underlying records: usage exports and the billing endpoints, pulled on a schedule and kept. Two reasons. GitHub's own retention window is shorter than an annual budget cycle, so history you did not keep is history you cannot analyse. And reconciliation only means something if you have both series stored over the same period.
FinOpsAid connects through a GitHub App with read-only scopes. It changes no seats, edits no permissions, pushes no code, and never stores your source. Because only Read is granted, writing back to GitHub is not a policy we promise — it is technically impossible.
FAQ
Frequently asked questions
How does GitHub bill for Copilot?
In two parts on one line item: a per-assigned-user subscription determined by your plan tier, charged on your billing cycle, plus metered consumption above the plan's included allowance, billed as overage. The subscription is predictable; the metered portion varies with which Copilot surfaces and models your developers use.
If I remove a Copilot seat, when does billing stop?
On the next cycle, not immediately. Seat assignment changes settle against your billing cycle, and an unassigned seat generally remains usable until the current cycle ends. That means a reclaim saves next month rather than this one — which is the argument for reviewing seats weekly instead of quarterly.
What are GitHub cost centers?
Cost centers group spend within GitHub's billing platform so charges can be reported against a business unit rather than one undifferentiated account total. They are useful, but they group along your existing account structure — if your GitHub organization layout does not match your finance structure, cost centers will reproduce that mismatch faithfully.
Can I set a spending limit on Copilot?
GitHub's budgets let you set limits and alert thresholds on metered usage. Treat them as a backstop rather than a management tool: an alert tells you that spend crossed a line, not which team or which surface pushed it over. Pair budgets with per-team attribution so an alert has somewhere to point.
Try it
See these numbers for your own org
Connect your organization read-only and FinOpsAid meters it nightly — seats, credits, minutes, Codespaces and storage, attributed to teams and reconciled against your billing API. Every modeled figure is labelled an estimate, with the date it was computed.