July 13, 2026 · 6 min read · Waste and recovery
How to find unused GitHub Copilot licenses
You can check your Copilot seats today, with the access you already have, and buy nothing. A seat is a paid license for one person. Here is the method by hand: the list, the use signal, the join, the cut-offs, and the four traps that make the count wrong.
The short version: GitHub knows which seats it bills you for, and roughly when each one was last used. It does not hand you those two facts joined, priced and sorted. That join is the work, and it takes an afternoon.
Do it before you buy any tool to do it for you. If the pass by hand finds nothing, you have learned something useful for free. If it finds a five-figure number, you have earned the budget to check every other vendor the same way.
Step 1: find the billed seat list
Copilot seats for a company are run from the organization or enterprise settings, under the Copilot section. The view is usually called seat management or access. GitHub moves its admin menus often. Check the path in your own account rather than trusting any blog post, including this one.
What you want is the list of *people* GitHub bills you for, not the seat count on the invoice.
Two things to pin down while you are there:
- Who is on the list. Include anyone who has left, changed teams, or moved to a job that does not involve code.
- How each seat got handed out. One at a time, or through a team or group. This difference matters a lot, and the traps below explain why.
Step 2: understand what "activity" means here
GitHub shows a last-used date for each seat. Treat it with care.
It is a date, not an amount. It tells you a seat was used recently, not whether that use was fifty accepted suggestions or one editor logging in at launch. The level of detail is rough and generous, so a seat can look alive on very little proof.
It also spreads across editors. One developer may use Copilot in two editors, at the command line, or in a browser. Those records may not show where the value comes from.
So the last-used date is a strong *negative* signal and a weak positive one. A seat with no use for two months is almost certainly dead. A seat used yesterday may still be worth nothing. Use the signal to find dead seats, not to bless live ones.
The last-used date is a strong negative signal and a weak positive one. It finds dead seats. It cannot prove a live one is worth paying for.
Step 3: choose your export — console or API
You have two ways to get the data out.
The console export is faster and right for a first pass. The seat management view can export the list, usually as a CSV file. You get the names and the last-used column in one file, with no new credentials to set up.
The API is right if you plan to run this every month. GitHub offers billing and seat endpoints for Copilot. They return the seat list in code, with fields for how each seat was handed out and when it was last used. Endpoint names and reply formats change between API versions, so check the current API reference for your plan rather than copying code from a forum post. Whatever you build, build it read-only. A seat audit has no business holding write access.
Either way you need an admin role that can see billing. If you work in purchasing and lack it, that is the first ticket to file.
Step 4: do the join
Three inputs, one table:
seat list × last used × price per seat
The price side matters more than people expect. As of July 2026, GitHub's published plans put Copilot Business at $19 per user per month and Copilot Enterprise at $39. But Enterprise needs GitHub Enterprise Cloud at $21 per user. That makes the real Enterprise seat $60, not $39. Price an unused Enterprise seat at $39 and you understate the money you can get back by more than half.
Personal plans may land on expense reports rather than on your company invoice. Pro is $10, Pro+ is $39, Max is $100. Those are bought on personal cards, outside of purchasing, so they are a different hunt: see shadow AI spend on the company card.
An idle seat is a paid seat nobody has used lately. Sort the joined table by days since last use, longest first. Multiply the idle rows by the right price. That number is what you could get back.
Step 5: set cut-offs, and don't auto-revoke
Two cut-offs, both easy to defend:
- 30 days with no use: a candidate. Long enough that normal swings in how people work have washed out.
- 60 days with no use: a strong candidate. At two months the burden of proof flips, and the seat should justify itself.
Now the important part. Never auto-revoke on the 30-day signal. The reasons are boring and real: parental leave, a sabbatical, medical leave, a contractor between projects, an engineer spending a quarter on design work, a team that supports a retail peak. Each of those leaves a clean 30-day gap. None of them means the tool is worthless to that person.
Run it as a conversation, not a script. Send the list to engineering managers, ask them to confirm or contest each name, and revoke what comes back unclaimed. That step costs a week, and it buys you the right to run this again next quarter without anyone hiding from it.
The four Copilot-specific traps
1. Seats handed out through a team. If seats flow from a team or group rather than one at a time, revoking one person may not stick. The next sync grants it again. Worse, adding one person to a broad team can hand out a batch of seats nobody asked for. Check the assignment source column before you plan any removals, and fix the group rule rather than the symptom.
2. Enterprise versus Business. Beyond the $60-versus-$39 math above, the two plans differ in which admin views you get. Confirm which plan each part of the company is really on. Large companies often run both across different subsidiaries, and assume one price applies everywhere.
3. A cancelled seat keeps billing this cycle. Removing a seat usually stops the *next* cycle, not the current one. A seat cancelled on day 3 of the month still bills that month. So the savings land later than the day you report them. Say so in the write-up, or your first "we got back $40,000" claim will be challenged — and finance will be right.
4. People who left are still on the list. If offboarding has no Copilot step, your seat count drifts up while headcount does not. Cross-check the list against the active users in your identity system. This is usually the fastest win in the whole job.
The honest limitation
This gives you Copilot. Copilot is rarely where the money is.
The bigger finding is almost always the overlap across vendors, and a Copilot-only audit misleads you there. A developer with no Copilot use for 60 days may be very busy in Cursor, Claude Code or Windsurf. That is not a waste finding. It is a move: the team switched tools and nobody cancelled the old seat. The dollar amount may be the same, but the conversation is not. Call it waste and you will be wrong in front of an engineering leader who knows better.
No single vendor's console can tell you this. GitHub cannot see your Cursor list, and it has no reason to build the view that would show you a seat to cancel. Do you need both Copilot and Cursor? covers the join across vendors. What each AI vendor's admin console actually exposes records where each vendor's reporting stops.
For a sense of scale: Opsera's 2026 benchmark across 250,000+ developers reports 21% of AI coding licenses underutilized. Flexera's 2026 research found 59% of organizations reporting increased wasted AI software spend year over year, with only 31% claiming accurate visibility. Both are published by the vendors themselves, and neither shows its full method. Treat them as rough scale, not as your number.
The honest caveats
The use signal is the soft part of this work. Its level of detail is rough, its meaning is GitHub's to set and can change, and it does not tell heavy use from light use. Anything you build on it inherits that looseness.
Identity is the other weak link. Contractors on outside domains, service accounts, bot accounts, and people whose Git name differs from their sign-in name all show up as false idles.
And a seat you take back is not a dollar you saved until the invoice shows it. A cancellation that waits a cycle, an annual commitment, and the right to cut committed seat counts at renewal all sit in the way. The gap between "revoked" and "billed less" can be a full term. Negotiating AI renewals from evidence is where a list of idle seats turns into money.
Keep reading
Find your recoverable AI spend
If the Copilot pass by hand found idle seats, the same join across Cursor, Claude Code and your API accounts usually finds more. Spendassay runs it read-only. It reads metadata only — counts, dates and names, never the contents. It reports at team level, and only for groups of eight people or more. See a sample report first.
`Start free` → /login?src=blog_find-unused-copilot-licenses
Find your recoverable AI spend
Spendassay turns this from an afternoon of spreadsheets into a live, proof-level audit with the recovery attached.