Book a demo

How to find unused Microsoft 365 Copilot licenses

Microsoft 365

26 Mins Read

|

Nadeem Ahamed
Nadeem Ahamed Azure FinOps Specialist

Microsoft 365 Copilot bills you per seat, per year, whether anyone opens it or not. At the enterprise list price of $30 per user per month on an annual commitment, every license is $360 out the door. Copilot Business, for organizations with 300 or fewer users, lists at $21. And it’s easy to end up paying for seats nobody touches. In Gartner’s 2025 Microsoft 365 and Copilot survey, only five percent of organizations that had finished a pilot said they were moving to a larger deployment. Pilots stall, the licenses stay assigned, and the renewal arrives anyway. You can find those seats with data Microsoft already gives you: the Copilot usage report, the billing page and the Graph API. This guide covers all three, the false positives that wreck most cleanups, and why reclaiming a license and cutting the bill aren’t the same thing.

Key takeaways

  • Unused Copilot licenses come in two kinds. Seats you bought and never assigned, and seats assigned to people who don’t use them.
  • Start in the Microsoft 365 admin center: Billing > Licenses shows the purchased vs assigned gap, and Reports > Usage > Microsoft 365 Copilot shows last activity per user.
  • Turn off concealed user names first, or you’ll be staring at hashed IDs.
  • Check when the license was assigned before calling anyone inactive. Someone licensed last week looks idle in a 30-day view.
  • Removing a license frees a seat. Your invoice only drops when you reduce the seat count at renewal.

What counts as an unused Microsoft 365 Copilot license?

An unused Microsoft 365 Copilot license is a paid seat with no Copilot activity behind it: either nobody holds it, or the person who does hasn’t used Copilot in any app for 30 to 90 days.

That’s the clean definition. Real tenants are messier.

A seat that gets one Teams meeting recap a month isn’t unused, but you’d struggle to call it $360 well spent. So most teams end up with two buckets. Unused means zero activity in your threshold window, and those seats get reclaimed. Underused means some activity, low breadth, and those users get training or a nudge before anyone touches their license.

Pick the threshold before you pull a single report. Thirty days catches people on leave. Ninety days is safer but lets waste run for a full quarter. Sixty is where a lot of admins land (and you can tighten it later once the process is trusted).

Here’s how the different seat states show up and what to do with each:

Seat state What it looks like Where to check What to do
Purchased, never assigned Purchased count is higher than assigned count Billing > Licenses Assign from the waitlist, or cut at renewal
Assigned, never used No last activity date at all Copilot usage report, user activity table Confirm the assignment date, then reclaim
Assigned, gone quiet Last activity older than your threshold Copilot usage report Notify the user and manager, reclaim after a grace period
Held by a disabled account Sign-in blocked in Entra ID, license still attached Entra ID users list, or Turbo360’s License optimizations document Reclaim straight away, no outreach needed
Barely used Activity in one app only, like Teams recaps Per-app last activity columns Train first, reclaim if nothing changes

The disabled-account row is the easy money. Those seats have zero chance of coming back to life, and nobody needs to be emailed before you pull them.

How do you find unused Copilot licenses in the Microsoft 365 admin center?

To find unused Copilot licenses in the Microsoft 365 admin center, compare purchased and assigned seats under Billing > Licenses, then open Reports > Usage > Microsoft 365 Copilot and sort the user activity table by last activity date.

Two screens, two different problems. The billing page catches seats nobody holds. The usage report catches seats somebody holds and ignores. Most cleanups only look at the second one.

Before either, fix the names.

Step 1: Unhide user names in reports

Open the Copilot usage report on a fresh tenant and you’ll get a column of random strings where names should be. That’s deliberate. Since September 1, 2021, Microsoft hides user information by default in all reports to help companies comply with local privacy laws.

To switch it off, go to Settings > Org Settings > Services, select Reports, clear “Display concealed user, group, and site names in all reports”, and save. Some tenants show the newer wording, “In all reports, display de-identified names for users, groups, and sites”. Same setting.

A few things to know before you flip it. You need to be a Global Administrator. The change isn’t instant either, and can take 24 to 72 hours to show up in the reports dashboard. It’s tenant-wide too, since the setting also covers usage reports in Microsoft Graph, Power BI and the Teams admin center. And changing it is a logged event in the audit log. So if your privacy or works council team cares about this (in the EU, they will), get sign-off first.

Step 2: Compare purchased vs assigned seats

Go to Billing > Licenses and open the Microsoft 365 Copilot subscription (or Copilot Business, if you’re under 300 users). You’ll see how many licenses you bought and how many are assigned.

The gap is pure waste. Nobody can use a seat that isn’t assigned, and you’re paying for it all the same.

This usually comes from buying a round number up front (500, 1,000) and then rolling out slower than planned. Fixing it is simple. You either hand those seats to people on the waitlist or you plan to drop them at renewal, which we’ll get to further down.

Step 3: Open the Microsoft 365 Copilot usage report

In the admin center, go to Reports > Usage and select the Microsoft 365 Copilot page. The top of the report gives you adoption trends over the last 7, 30, 90 or 180 days.

Skip the charts. Scroll down to the user activity table, because that’s where the per-person data lives.

The column that matters is the last activity date. Microsoft has documented it as the latest date the user had Copilot activity across all Microsoft 365 apps, regardless of the 7, 30, 90 or 180-day period you select. That second part catches people out: changing the period filter changes the charts, not that column. A blank there means the user has no recorded Copilot activity at all.

You also get per-app last activity columns for Teams, Word, Excel, Outlook and the rest. Those are what you use to spot the “barely used” seats, someone whose only activity is a Teams recap from six weeks ago.

One more trap. There’s a separate Microsoft 365 Copilot Chat usage report sitting right next to this one, and it’s not the same thing. Microsoft says Copilot Chat usage for licensed users is covered in the Microsoft 365 Copilot usage report, not the Chat report. Make sure you’re in the right one before you start judging people.

Step 4: Export and sort

Export the user table to CSV from the report page. Then sort by last activity date, oldest first, with blanks on top.

You now have three piles:

  • Blank last activity. Never used, or not used since the report started tracking them.
  • Last activity older than your threshold (30, 60 or 90 days).
  • Recent activity, but only in one app.

Don’t reclaim anything yet. Some of the people in pile one were licensed last Tuesday, and the usage report has no idea when a license was assigned. That’s the false-positive problem, and it gets its own section.

If you’d rather not repeat this every month, the next section covers pulling the same data with Graph and PowerShell.

How do you find unused Copilot licenses with Graph or PowerShell?

To find unused Copilot licenses with PowerShell, use the Microsoft Graph SDK to compare purchased and consumed units for the Copilot SKU, then call the Copilot usage user detail report and filter for users whose last activity date is blank or older than your threshold.

The admin center is fine once. By the third month of exporting CSVs by hand, you’ll want a script.

Graph gives you the same two views the portal does. Seat counts come from subscribedSkus. Per-user activity comes from the Copilot usage reports API, which Microsoft added to the Graph beta usage reports API in August 2024 (MC877369). The data matches what’s in the admin center reports, so this is automation, not extra insight.

Here’s the core of it:

Connect-MgGraph -Scopes "Reports.Read.All","Organization.Read.All"

# Seats bought vs seats assigned
Get-MgSubscribedSku | Where-Object SkuPartNumber -like "*Copilot*" |
Select-Object SkuPartNumber,
@{n='Purchased';e={$_.PrepaidUnits.Enabled}}, ConsumedUnits

# Per-user last Copilot activity
$uri = "https://graph.microsoft.com/beta/reports/getMicrosoft365CopilotUsageUserDetail(period='D90')?`$format=application/json"
$rows = (Invoke-MgGraphRequest -Uri $uri -OutputType PSObject).value

$cutoff = (Get-Date).AddDays(-60)
$rows | Where-Object { -not $_.lastActivityDate -or [datetime]$_.lastActivityDate -lt $cutoff } |
Select-Object userPrincipalName, lastActivityDate

A few things that’ll trip you up:

Permissions. The usage report call needs Reports.Read.All. With delegated access, the signed-in admin also needs a reports-capable admin role. And according to Tony Redmond’s testing, the account reading the Copilot usage data must itself hold a Copilot license. Run it from an app registration with application permissions if that’s a problem.

It’s still beta. The per-user detail call lives under /beta, and Microsoft’s own docs warn that beta APIs are subject to change. Fine for a monthly report. Pin a test and check it after Graph updates if a reclaim workflow depends on it.

Concealed names apply here too. If you skipped Step 1 in the admin center section, your script returns hashed UPNs. Same switch, same 24 to 72-hour wait.

Don’t hardcode the SKU. Microsoft 365 Copilot and Copilot Business are different SKUs, and some tenants carry other Copilot-branded SKUs, like Copilot Studio. Run Get-MgSubscribedSku once, note the exact SkuPartNumber for your seats, and filter on that instead of a wildcard.

The period parameter barely matters for this. The last activity date is the most recent date on record, so D7 and D180 return the same date for a given user. Pick D90 or D180 and move on.

Paging. Big tenants get results in pages. Follow @odata.nextLink until it runs out, or you’ll quietly analyze the first chunk and miss the rest.

If you want a full script with reclaim built in, Tony Redmond published one on Practical365 that finds underused licenses and removes them. Read it before you run it. Automated removal is exactly where the false positives in the next section turn into angry tickets.

Where each data source fits

Data source What it shows Blind spots Best for
Copilot usage report (admin center) Last activity per user, overall and per app Names hidden by default; no license assignment date One-off audits
Billing > Licenses Seats purchased vs assigned Nothing about usage Finding unassigned seats
Graph subscribedSkus Purchased and consumed units per SKU Nothing about usage Scheduled seat count checks
Graph Copilot usage API (beta) Same per-user data as the admin report Beta; same gaps as the report Monthly automated reports
Entra ID users Whether the account is enabled, sign-in activity Nothing about Copilot use Catching disabled accounts that still hold licenses
Audit logs When a license was assigned or removed Only as far back as your audit retention Checking assignment dates before reclaiming

None of these on its own answers “is this seat wasted?” You need the usage data, the account status and the assignment date together. Which is the whole point of the next section.

How do you avoid false positives before reclaiming Copilot licenses?

Before reclaiming a Copilot license, confirm the person has held it longer than your inactivity threshold, isn’t on leave, and is being judged on the right report. Then give them notice. Most wrong reclaims come from skipping one of those checks.

This is where cleanups go sideways. Your CSV says 140 people haven’t touched Copilot in 60 days. Maybe 100 of them are real. The other 40 are about to file tickets, and one of them is probably a VP.

The person was licensed last week

The usage report shows last activity. It doesn’t show when the license landed. A blank activity column means “no activity on record,” and that covers someone who’s ignored Copilot since January and someone who got their seat on Tuesday.

You can find the assignment date. It just takes a detour.

The quickest route is the user object itself. Every user in Entra ID carries a list of assigned service plans, and each plan has an assigned date. Tony Redmond’s approach is to check one service plan belonging to the SKU and report its assigned date, which stands in as the license date. Pull that for every Copilot holder, then drop anyone assigned more recently than your threshold.

The other route is the audit log. License assignments show up as “Change user license” events, and you can pull them with Search-UnifiedAuditLog. The catch is retention. The Entra audit log only gives you 30 days by default, and license change records older than 180 days aren’t available through the Purview portal on standard retention. Fine for recent assignments. Useless for “when did Priya get Copilot in 2025?”

Simple rule: nobody gets reclaimed until they’ve held the seat for longer than your inactivity window. Licensed 20 days ago with a 60-day threshold? Not your problem yet.

The person is on leave

Parental leave, sabbatical, long-term sick leave, a three-month secondment. None of that lives in Microsoft 365, and all of it looks identical to “doesn’t use Copilot” in a usage report.

You won’t catch these from data. You catch them with the notification step: tell the user and their manager before anything gets pulled, and give them a week or two to say “she’s back in March.” That’s also why automated reclaim with no human notice is a bad idea, however tidy the script is.

You’re reading the wrong report

There are several Copilot reports in the admin center now, and they sound alike.

Copilot Chat is available at no extra cost to Microsoft 365 customers, so the Copilot Chat usage report includes plenty of people who never held a paid license. If you’re judging paid seats, work from the Microsoft 365 Copilot usage report. There’s also a report for Microsoft Copilot with enterprise data protection, and Microsoft was blunt about it at launch: that report is not for Microsoft 365 Copilot usage.

The flip side is worth a look too. A licensed user whose only activity is chat in the browser is getting roughly what the free tier gives everyone else. They’re not a reclaim candidate on activity grounds. They’re a right-sizing conversation.

The data is a few days behind

Usage data isn’t live. Expect a lag of a couple of days between someone using Copilot and that date showing up in the report. It doesn’t matter for a 60-day threshold. It matters a lot if you’re arguing with someone who swears they used it yesterday.

A quick check before you reclaim anything

Run every name on your list through four questions:

  1. Have they held the license longer than your threshold?
  2. Is the account still enabled in Entra ID? (If it’s disabled, skip the rest. Reclaim it.)
  3. Have they and their manager been told, with a date?
  4. Is the decision based on the Microsoft 365 Copilot usage report, not the Chat report?

Four yeses and the seat goes back in the pool. Anything less, wait a cycle.

How do you remove and reassign Copilot licenses safely?

To remove a Copilot license safely, first check whether it was assigned directly or inherited from a group. Remove direct licenses from the user, and inherited ones by taking the user out of the licensing group. Then notify, wait out a grace period, and hand the freed seat to someone on the waitlist.

The removal click is the easy part. Knowing where to click is what catches people.

Direct vs group-based assignment

If your tenant licenses Copilot through Entra ID groups (and most mid-size and larger tenants do), you can’t just open the user and untick the box. Microsoft’s rule is plain: licenses a user inherits from a group can’t be removed directly. You have to remove the user from the group they inherit it from.

This isn’t a portal quirk you can script around either. Graph enforces the same rule, so if your reclaim script works on direct assignments and silently fails on everything else, this is probably why.

Three variations to watch for:

Users with both. Someone can hold Copilot directly and through a group. Pull the direct one and nothing changes, because removing a direct license doesn’t touch an inherited one. The seat stays consumed. Check both before you count it as reclaimed.

Dynamic groups. If Copilot is assigned through a dynamic membership group (say, everyone with Department = Finance), you can’t just kick someone out. Members only leave the group, and lose the license, when an attribute changes. Either change the rule or move Copilot onto an assigned group with an approval step. Dynamic rules are a big reason seats get handed out to people who never asked for them in the first place.

Nested access. A user can sit in two licensing groups. Pull them from one and the other quietly keeps the seat assigned. Annoying, and easy to miss in a bulk run.

The quickest way to know what you’re dealing with: in the Entra admin center, open the Copilot license and check the Licensed groups view, or run a quick PowerShell check that flags each user’s Copilot assignment as direct or inherited. Do this before you build the reclaim list, not after.

Notify, wait, then reclaim

Pulling a license with no warning is how a cost cleanup becomes a political problem. A cadence that holds up:

  1. Send the user and their manager a short note. Name the license, the reason (no Copilot activity in 60 days), and the reclaim date.
  2. Give them a grace period. Two weeks is common.
  3. Anyone who replies with a real reason (on leave, starting a project next month) gets an exception and a review date. Not a permanent pass.
  4. Everyone else gets reclaimed on the date you named. Same day, every cycle, no reminders.

Step four is the one teams wobble on. If reclaim dates keep slipping, people learn the notice means nothing.

Send freed seats to the waitlist

There’s almost always a list of people asking for Copilot who don’t have it. Feeding reclaimed seats to that waitlist means recovery serves demand as well as cost.

That’s also the strongest argument you have when a manager pushes back. You’re not taking Copilot away from their team, you’re giving it to someone who’ll open it.

And if there’s no waitlist? Then the freed seats are surplus, and surplus doesn’t go away when you remove it from a user. It sits in Billing > Licenses as an unassigned seat you’re still paying for. Which raises the question most guides skip: when does any of this actually lower the bill?

Does reclaiming a Copilot license reduce your bill?

No, not on its own. Reclaiming a Copilot license frees a seat you’ve already paid for. Your invoice only drops when you lower the seat count, and on an annual term you can only do that within seven days of buying or renewing.

This is the part most cleanup guides skip, and it’s the part your finance team cares about.

Removing Copilot from 80 people feels like saving 80 × $360. It isn’t. The 80 seats move from “assigned” to “available” in Billing > Licenses, and you keep paying for every one of them until the subscription renews.

Why the seat count is locked mid-term

Microsoft’s own docs spell out the rule: you can only remove licenses from a subscription within seven days of buying or renewing it. Miss that window and the reduction shows up on the first invoice after the renewal date.

Seats you add mid-term get their own short window. If you buy licenses partway through a billing period, you have seven days from that purchase to reduce them. After that they’re locked in with the rest.

Monthly billing doesn’t change this. Plenty of annual Copilot subscriptions are paid monthly, and people assume monthly payments mean monthly flexibility. They don’t. Once the seven-day window passes, the quantity is locked for the rest of the annual commitment, even though billing happens monthly.

(If you buy through an Enterprise Agreement or a Microsoft account rep, your terms may differ. Check the agreement, not this article.)

So what does reclaiming actually buy you?

Two things, and both are real money.

The first is avoided purchases. Every reclaimed seat that goes to someone on the waitlist is a seat you didn’t have to buy. That saving lands immediately. Just stick to the rule that nobody buys new Copilot seats while reclaimable ones are sitting idle.

The second is a smaller renewal. Reclaimed seats that nobody needs become surplus, and surplus is what you cut when the renewal window opens. That saving lands at renewal, not before.

One catch on that second one. You can’t reduce the license count while every license is assigned to a user. The reclaim has to come first. Turn up to your renewal window with every seat still assigned to an inactive user and there’s nothing to cut.

A worked example

Take a hypothetical tenant with 500 Microsoft 365 Copilot seats at $30 per user per month on an annual term. That’s $180,000 a year. The audit turns up this:

Finding Seats What happens Annual value
Purchased, never assigned 40 Surplus, cut at renewal Counted below
Held by disabled accounts 25 Reclaimed now Counted below
Inactive 60+ days, after false-positive checks 60 Notified, reclaimed after grace period Counted below
Barely used (one app only) 30 Kept, sent to training $0 for now
Total freed seats 125
Waitlist requests filled from freed seats 35 Avoided new purchases $12,600
Surplus seats cut at renewal 90 Lower renewal quantity $32,400
Total $45,000 a year

That’s a quarter of the Copilot spend, with nobody who actually uses Copilot losing it.

Now look at timing. Say the renewal is seven months out. Those 90 surplus seats cost $2,700 a month that you can’t recover, so roughly $18,900 goes on seats nobody uses before you can cut them. Run the same audit two months before renewal instead of two months after, and the gap between “we found it” and “we stopped paying for it” mostly disappears.

Put the renewal date on the calendar

Practical version:

  • Find the renewal date for every Copilot subscription in Billing > Your products. Tenants that bought in waves often have several.
  • Run the full audit (reclaim included) 60 to 90 days before each one. That leaves room for the grace period.
  • Before the renewal, set the new quantity, or note that it has to be lowered inside the seven-day window right after renewal. Then actually do it. Auto-renew rolls the full quantity forward if nobody touches it.
  • Freeze new Copilot purchases while reclaimable seats exist.

Most teams get the first three right and then lose the fourth to a manager who wants five new seats “by Friday.” That’s exactly when the waitlist rule earns its keep.

How often should you review Copilot license usage?

Review Copilot license usage monthly, run a full reclaim cycle at least quarterly, and do a final audit 60 to 90 days before each renewal. Monthly catches drift early. The pre-renewal audit is the one that actually lowers the bill.

A one-time cleanup buys you a few good months. Then new hires get licensed, a pilot group goes quiet, a department reorganizes, and by the next renewal you’re back where you started. A Copilot license has no expiry trigger inside your tenant, so it stays assigned until somebody takes it off.

So treat it like any other recurring cost line. Small, boring, on a schedule.

A cadence that holds up

Monthly: pull the usage export (or let the script run), flag new disabled accounts, and reclaim those immediately. Check new assignments against the waitlist. Twenty minutes, maybe less.

Quarterly: the full cycle. Apply the inactivity threshold, run the false-positive checks, send notices, reclaim after the grace period. Review the “barely used” group too. If training didn’t move them in a quarter, they go on the next notice list.

Pre-renewal, 60 to 90 days out: one last full cycle, then lock the surplus number and get the renewal quantity agreed with whoever owns the contract. Don’t leave it to the week of renewal.

Write the policy down

Half the arguments in a reclaim cycle go away if the rules existed before the cycle started. Keep it to a page:

  • Who qualifies for Copilot, and who approves new requests.
  • The inactivity threshold (60 days is a fair starting point) and what counts as activity.
  • How long the grace period is after notice.
  • What gets someone an exception, and for how long. Exceptions should come with a review date.
  • That reclaimed seats go to the waitlist first, and no new seats get bought while reclaimable ones exist.

Get it signed off by IT, finance and someone senior enough that “my director said I could keep it” stops working.

Attribute seats to owners

The usage report tells you who. It doesn’t tell you which team or cost center they sit in, and that’s what makes waste actionable. “We have 60 idle seats” gets a shrug. “Sales has 22 idle seats costing $7,920 a year” gets a meeting.

Join the usage export to Entra ID attributes (department, manager, cost center if you keep it there) and report idle seats by business unit. If your org does chargeback for software, Copilot is a good place to start. A department that pays for its own idle seats tends to find them quickly.

KPIs worth tracking

KPI How to calculate it What it tells you
Seat assignment rate Assigned seats ÷ purchased seats How much you bought ahead of rollout
Active rate Users active in last 30 days ÷ assigned seats How much of what’s assigned gets used
Cost per active user Monthly Copilot spend ÷ active users The real price of each person who uses it
Idle seats by business unit Inactive seats past threshold, grouped by department Where to focus the next cycle
Waitlist age Days the oldest request has been waiting Whether reclaimed seats are flowing to demand
Surplus at renewal Unassigned seats at the renewal audit What you can cut this cycle

Cost per active user is the one to put in front of finance. At $30 a seat, a 60% active rate means each person who uses Copilot actually costs you $50 a month. That number moves people.

If you want more than activity dates, the Copilot Dashboard in Viva Insights goes deeper, with tenant-level visibility into Copilot eligibility, licensing and activation plus usage by app and feature. Useful for adoption work. For finding waste, the usage report and a policy people actually follow will get you most of the way.

What tools help you track Copilot license waste?

Microsoft’s own admin center reports and Graph API are enough to find unused Copilot licenses in a small tenant. Larger tenants usually add scripts, a SaaS management platform, or a license optimization tool like Turbo360’s Tenant Manager to cut out the manual exports and catch license-level waste across every SKU.

There’s no single right answer here. It depends on tenant size, how often you want to do this, and whether Copilot is your only licensing headache. (It usually isn’t.)

Native Microsoft tools

You already have the Copilot usage report, Billing > Licenses and the Graph usage API, all covered above. There’s one more worth knowing about on the assignment side. Microsoft added a Copilot license optimizer to the admin center that suggests which users are best placed to get value from Copilot and helps assign licenses to them. It’s for deciding who gets a seat, not finding idle ones, but it pairs nicely with a waitlist.

The native tools cost nothing. They also don’t join anything up for you. Usage sits in one place, assignment dates in another, account status in a third, and the stitching is on you.

Scripts

PowerShell plus Graph fills most of those gaps if someone on the team is comfortable maintaining it. Tony Redmond’s Practical365 scripts are the best public starting point. The risk isn’t writing the script, it’s owning it: the Copilot usage API is still beta, permissions drift, and the person who wrote it eventually changes jobs.

SaaS management and M365 governance platforms

Tools like CoreView, Rencore, AvePoint and the broader SaaS management category (Torii, Zylo and others) handle Copilot reclaim workflows with approvals and notifications built in. They make sense if you’re governing dozens of SaaS apps, or if M365 administration is the main job and you want delegation, policy and reclaim in one place.

The tradeoff is scope. They sit on the M365 or SaaS side of the house and don’t see your Azure bill. For teams where the same FinOps people own both, that means two tools and two views of what’s essentially one Microsoft spend line.

Turbo360 Tenant Manager

Turbo360 comes at this from the Azure side. It’s an Azure-native cloud cost platform, and Tenant Manager brings Microsoft 365 licensing into the same place where you already track Azure spend.

What it covers is the license-level waste that surrounds Copilot. The License optimizations document flags unused licenses, overlapping assignments and licenses held by inactive users, and lists accounts that are disabled in Microsoft Entra ID but still hold active licenses, with a per-user breakdown of what each one holds. That last list is the fastest reclaim in this whole guide, and it covers every SKU in the tenant, not just Copilot. The License Consumption document summarizes every Microsoft 365 SKU in the tenant (paid, free and trial) along with the service plans bundled in each, so purchased vs assigned gaps show up without a trip to Billing.

The output is a structured, audit-ready document rather than a dashboard you screenshot, with no scripts or spreadsheets to maintain. That’s handy to hand to finance in the pre-renewal audit.

Pair it with the Copilot usage report for the activity side. Tenant Manager tells you which seats are stranded, unassigned or doubled up. The usage report tells you which assigned seats aren’t being used. Between them you cover every row of the seat-state table at the top of this guide.

FAQ

Where is the Microsoft 365 Copilot usage report?

In the Microsoft 365 admin center, go to Reports > Usage and select the Microsoft 365 Copilot page. The user activity table at the bottom shows each licensed user’s last Copilot activity date, overall and per app.

Why does the Copilot usage report show random strings instead of user names?

Microsoft hides user names in all usage reports by default. A Global Administrator can turn this off under Settings > Org Settings > Services > Reports by clearing “Display concealed user, group, and site names in all reports”. The change can take a day or more to appear.

How do I see when a Copilot license was assigned to a user?

The usage report doesn’t show it. Check the user’s assigned service plans in Entra ID, where each plan carries an assigned date, or search the audit log for “Change user license” events. Audit log retention is limited, so older assignments may only be visible through the service plan dates.

Can I get a refund for unused Copilot licenses?

Only within a short window. You can remove licenses from a subscription only within seven days of buying or renewing it. After that, a reduction takes effect at your next renewal. Removing a license from a user frees the seat but doesn’t lower the bill mid-term.

How much does a Microsoft 365 Copilot license cost?

The enterprise add-on is $30 per user per month on an annual commitment. Microsoft 365 Copilot Business, for organizations with 300 or fewer users on a Microsoft 365 Business plan, is $21 per user per month. Both need a qualifying Microsoft 365 base license.

Does Copilot Chat need a Microsoft 365 Copilot license?

No. Copilot Chat is available at no extra cost to Microsoft 365 customers. That’s why the Copilot Chat usage report isn’t the right place to judge paid seats. Use the Microsoft 365 Copilot usage report instead.

What inactivity threshold should I use for Copilot licenses?

Sixty days is a common starting point. Thirty days flags people on short leave, and ninety lets waste run for a full quarter. Whatever you pick, only apply it to users who’ve held the license longer than the threshold.

How do I remove a Copilot license from a user who gets it through a group?

You can’t remove it from the user directly. You have to remove the user from the group they inherit the license from. If the user also has a direct assignment, remove both, or the seat stays consumed.

Can I find unused Copilot licenses with PowerShell?

Yes. Use the Microsoft Graph PowerShell SDK to call the Copilot usage user detail report, then filter for blank or old last activity dates. The call needs the Reports.Read.All permission, and the endpoint is currently in the Graph beta.

What happens to a Copilot license when an employee leaves?

Nothing, unless someone removes it. Disabling the account in Entra ID doesn’t release the license, so departed users often keep paid seats for months. These are the safest licenses to reclaim, and you don’t need to notify anyone first.

What’s the difference between an unused and an underused Copilot license?

An unused license has no Copilot activity within your threshold, or isn’t assigned to anyone. An underused license has some activity, often in just one app. Unused licenses get reclaimed. Underused ones usually get training or a check-in first.

How often should I review Copilot license usage?

Monthly for quick checks like disabled accounts, quarterly for a full reclaim cycle, and once more 60 to 90 days before each renewal. The pre-renewal review is the one that lowers your bill, since that’s when seat counts can be reduced.

Advanced Cloud Management Platform - Request Demo CTA

Related Articles