How to Cut AI Spend: Find Unused Copilot and ChatGPT Seats
PromptGlass Research ·
The fastest way to cut AI spend is to reclaim idle seats: licenses for Microsoft 365 Copilot, ChatGPT Enterprise, Claude, GitHub Copilot or Gemini assigned to people who haven’t used them in 30 to 90 days. After that, look for duplicate subscriptions, where the same person or team pays for overlapping tools, and for API workloads running on larger models than they need. All three can be measured from data you already have access to, as long as you join it to your directory.
Why AI spend drifts
AI spending grows differently from most software spending:
- Seat-based licenses were bought ahead of demand. Rollouts often assign seats to whole departments to encourage adoption. Some people never start, and others try it once.
- Several tools for the same job. A company standardizes on one assistant, while teams also expense a chatbot subscription, a coding assistant and a meeting note-taker.
- Usage-based APIs scale silently. An internal app or agent moves from pilot to production, and token volume grows tenfold without anyone reviewing which model it uses.
- Nobody owns the whole picture. Seats live in the Microsoft 365 admin center, GitHub billing and the ChatGPT admin console. API costs sit in cloud bills. Expense reports sit in finance.
Step 1: build a single seat inventory
Pull license assignments from each platform’s admin API:
| Tool | Where seat data lives |
|---|---|
| Microsoft 365 Copilot | Microsoft Graph: users and subscribed SKUs |
| ChatGPT Enterprise / Edu | OpenAI Compliance API: users and seat status |
| Claude Team / Enterprise | Anthropic Admin API: members |
| GitHub Copilot Business / Enterprise | GitHub REST API: Copilot billing seats |
| Gemini for Workspace | Google License Manager API |
Join each seat holder to your identity directory by email or user principal name, so every seat has a department, cost center and manager. Enter your contract price per seat, not list price, so the savings estimates reflect what you actually pay.
Step 2: define “idle” carefully
Each platform exposes some form of last-activity data: Copilot interactions in the audit log, last_activity_at for GitHub Copilot, conversation timestamps for ChatGPT Enterprise. Pick a window that suits each tool:
- 30 days for daily-use tools like coding assistants
- 60 days for general assistants
- 90 days where use is seasonal (finance close, audit season)
Exclude people on leave and new joiners who were assigned a seat in the last two weeks. Separate the never used list (seat assigned, zero activity) from the lapsed list (used once, then stopped). They need different conversations.
Step 3: reclaim with a light touch
Pulling seats without warning creates friction. A better sequence:
- Notify. “You haven’t used Copilot in 60 days. We’ll reassign your seat on the 15th unless you’d like to keep it, and here’s a five-minute guide to getting started.”
- Offer help. Never-used seats often belong to people who didn’t know how to start. Point them to templates for their role.
- Reclaim. Open a ticket (ServiceNow or Jira) to remove the license, and reassign it to someone on the waiting list.
- Repeat monthly. Idle seats come back as people change roles.
Step 4: find duplicate subscriptions
Look for overlaps at the person and team level:
- People with a company ChatGPT Enterprise seat who also expense a personal ChatGPT subscription
- Developers with both GitHub Copilot and a separately purchased AI coding assistant
- Teams paying for two transcription or meeting-notes tools
Browser and endpoint telemetry show which tools people actually use. Expense-report exports show what’s being paid for outside central procurement. Where people genuinely prefer the second tool, that’s useful product feedback. Consider standardizing on it rather than forcing a switch.
Step 5: right-size API models
For usage-based APIs, the biggest savings usually come from matching the model to the task. Many workloads, such as classification, extraction, routing and short rewrites, run equally well on smaller, cheaper models.
To do this safely:
- Route API traffic through a gateway, so every request is tagged with team, application and use case.
- Group requests by task, not just by app. One app may do several kinds of work.
- Compare outcome signals across models for the same task: error rates, retries, user re-prompts, explicit feedback.
- Change routing gradually, for example 10% of traffic first, then watch the signals before moving the rest.
- Set budgets with graceful downgrade. When a team exceeds its budget, route its non-critical traffic to a smaller model instead of failing it.
Also look for cacheable repetition (identical prompts sent over and over), oversized contexts (whole documents sent when a section would do) and runaway agents (sudden token spikes from a single key).
Step 6: make it continuous
One cleanup saves money once. A monthly cycle keeps saving:
- An idle-seat report to IT asset management on the first business day of the month
- A showback report allocating AI costs to cost centers, so budget owners see their own numbers
- Spike alerts on API spend per key or team
- A quarterly tool rationalization review using adoption and overlap data
What not to do
- Don’t cut seats based on usage alone. Low usage by one person can still be high-value. Check the use-case data before you decide.
- Don’t publish individual usage league tables. They push people toward performative usage and damage trust. Report by team.
- Don’t optimize cost and forget adoption. If reclaiming seats lowers adoption among people who would benefit, you’ve saved money and lost value. Track both.
The outcome
Done well, AI cost optimization is less about spending less and more about spending on what’s used. The seats you reclaim become seats for the people on the waiting list. The money saved on model right-sizing pays for new use cases. And a single view of seats, APIs and actual usage gives finance, IT and AI leaders a shared set of numbers for their next decision.