Skip to content
LicenseMeter

Unused Microsoft 365 Copilot licenses

Copilot is one of the most expensive per-seat add-ons in Microsoft 365, and it was often bought in batches for pilots and rollouts. A Copilot seat whose user stopped prompting months ago costs the full add-on price every month, on top of the base license that is actually being used.

Why Copilot seats go idle

Copilot adoption is uneven by nature: some users make it part of every document, others try it for a week and quietly stop. Pilots get provisioned optimistically, rollout waves license whole departments, and the seats of the non-adopters keep billing at full price while their Word and Teams usage looks perfectly healthy.

Ordinary activity monitoring misses this completely. The user signs in daily and uses every workload, so no inactivity rule fires; only the Copilot-specific usage signal reveals that the add-on itself is untouched.

Detect it manually

Microsoft Graph exposes a per-user Copilot usage report (beta) with a last-activity date per Copilot app. Export it and cross-check against your Copilot license assignments:

Connect-MgGraph -Scopes 'Reports.Read.All'
$uri = 'https://graph.microsoft.com/beta/reports/getMicrosoft365CopilotUsageUserDetail(period=''D90'')?$format=text/csv'
Invoke-MgGraphRequest -Method GET -Uri $uri -OutputFilePath copilot-usage.csv
  • The endpoint lives on the beta Graph version and reports a Last Activity Date per user and per Copilot app (Teams, Word, Excel, PowerPoint, Outlook, OneNote, Loop, Copilot Chat).
  • Since 2021 Microsoft conceals user names in usage reports by default, so the CSV may come back pseudonymized; the setting lives in the Microsoft 365 admin center under Org settings, Reports. You still have to join the report against license assignments yourself.

How LicenseMeter detects it

The sync reads the Copilot usage report through the read-only Reports.Read.All permission and joins it against license assignments. The rule fires for any user holding the Copilot SKU whose last Copilot activity is more than 60 days old, or who never used Copilot at all.

If the tenant conceals report names, the per-user join is impossible, so the engine degrades to an aggregate finding instead: how many of the tenant's Copilot seats show no usage, priced as that count times the Copilot seat price. The settings page explains how to enable identifiable report names to get back to per-user findings.

The findings list in the demo workspace: filter by rule, select the affected seats, acknowledge in bulk.

What it costs

Each idle Copilot seat is priced at the Copilot add-on's monthly price from the per-tenant price book, prefilled with a list-price estimate and editable to your contract rate. Because the add-on price is high and constant per seat, even a handful of idle seats produces a figure worth acting on.

In the 155-person sample tenant, unused Copilot seats waste € 393,40 a month.

Sample figures come from the deterministic demo workspace, not from customer data. The waste calculator turns your own seat count into an estimate.

Related waste patterns

See which of your seats match this pattern.

Connect read-only and the free scan lists every affected account in your tenant, priced per seat and per month, with a PowerShell remediation script your IT reviews and runs.

Run my free scan

After the free scan, 14 days of full monitoring, free. No credit card, read-only access.