After the Copilot Rollout: Usage Reports, Dormant Licences and Proving ROI to the Board (2026)
tiagoscarvalho.com
Every Copilot deployment has a month three. The pilot excitement has faded, the licences renewed at least once, and someone in a budget meeting asks the question the whole project has been avoiding: "so, is it working?" Most IT teams answer with an anecdote, because nobody set up measurement when the licences went out. This article is the measurement half of the Copilot story that my readiness content deliberately left for later: the four reporting surfaces Microsoft actually gives you (admin center usage reports, the Copilot Dashboard in Viva Insights, Purview audit logs, and agent analytics), which questions each one answers, the dormant-licence inventory you can script with Graph in twenty minutes, the licence reassignment play that pays for the exercise, and the one-page board report that survives a CFO's follow-up questions. The tone throughout is honest about the limits: some of Microsoft's impact numbers deserve caveats, per-user data has a privacy line you should not cross casually, and "assisted hours" is an argument, not a fact. Validate report names, roles and API surfaces against Microsoft Learn before you operationalise anything; this area is shipping changes monthly.
The month-three question
Here is how the conversation actually goes. Finance sees a line item: fifty licences, circa 30 USD per user per month, renewing again. Someone asks what the company got for it. IT says "people like it". Finance asks which people, how much, and compared to what. And the project that was a strategic priority in January becomes a cost-cutting candidate by September, not because Copilot failed, but because nobody could say whether it succeeded.
The irony is that Microsoft ships more measurement tooling for Copilot than for almost any other product in the suite, most of it at no extra cost. The failure mode is not missing data. It is that nobody was assigned to look at it, and by the time the question arrives, there is no baseline, no trend and no story. This article fixes the mechanics; assigning an owner is on you.
The four reporting surfaces, mapped
| Surface | Where | Role needed | The question it answers |
|---|---|---|---|
| Usage + readiness reports | Microsoft 365 admin center > Reports > Usage > Microsoft 365 Copilot | AI Administrator | Who is using Copilot, in which apps, how recently. Includes top agents. Data lands within about 72 hours. |
| Copilot Dashboard (Copilot Analytics) | Viva Insights app in Teams, or Viva Insights web | AI Administrator enables and delegates; no paid Viva licence needed to view | What Copilot is changing: adoption trends, usage patterns, impact estimates, sentiment. Benchmarks and group views at 50+ licences. |
| Purview audit logs | Purview portal > Audit; filter by operation, record type and workload values such as CopilotInteraction, ConnectedAIAppInteraction, AIAppInteraction, Copilot, ConnectedAIApp and AIApp | Audit Reader | What exactly happened: per-interaction records, including prompts, for compliance and investigations. Not an adoption tool. |
| Agent analytics | Power Platform admin center (consumption) and Copilot Studio (per-agent) | System Administrator / Copilot Studio authors | What agents are doing and, for pay-as-you-go, what they cost. The meter lives here. |
The admin center usage report: your first fifteen minutes
Start here, not because it is the best surface, but because it is the fastest route to the three numbers every other conversation depends on: licensed users, active users, and the trend line between them.
What to pull from it, in order:
- Active users versus enabled users. This ratio is your headline. Write it down monthly; the trend matters more than the level.
- Last activity per user. The raw material for the dormancy inventory. Exportable, and the same data is available through Graph (next section) for scripting.
- App mix. Which apps people actually use Copilot in: Teams, Outlook, Word, Excel, chat. A tenant where usage is 90% Teams meeting summaries has a different training gap (and a different ROI story) than one living in Excel.
- Top agents. Newer additions to the report surface agent usage. If agents are appearing here that IT never deployed, that is a governance conversation, not a reporting one.
The Copilot Dashboard: the free report nobody opens
The Copilot Dashboard, part of what Microsoft now brands Copilot Analytics, is the closest thing to a ready-made executive report in the entire stack, and in most tenants I look at, nobody has ever enabled it. Three facts worth internalising:
- It costs nothing to view. No paid Viva Insights licence is required for the dashboard itself. An AI Administrator enables it and can delegate access to specific people, which is exactly how you get it in front of the sponsor without giving them admin rights.
- It is organised around the questions executives ask: readiness (who could use Copilot), adoption (who does), impact (what is changing in meeting time, email time, document work) and sentiment (survey data where available).
- Scale unlocks depth. Tenants with at least 50 Copilot licences (or 50 Viva Insights licences) get benchmarks, agent insights, intelligent summaries and scoped group-level views. Below that threshold the dashboard still works; it is just quieter.
For deeper cuts, the Analyst Workbench in Viva Insights Advanced Insights offers custom Copilot queries and prebuilt Power BI templates (the adoption and impact report templates are the useful ones). That path does require the Insights Analyst role and setup effort; for a lean team, my honest advice is to exhaust the dashboard and the Graph route first. Most 200-seat tenants never need the workbench.
Reading the signals: what the numbers actually mean
Numbers without interpretation are how measurement projects die. The four signals I actually read, and what they tell you:
| Signal | How to compute it | What it tells you |
|---|---|---|
| Active percentage | Active users in the last 28 days ÷ licensed users | The headline. Low and falling means a training or fit problem; low and flat means the wrong people got licences. High is table stakes, not victory. |
| Habit formation | Users active in each of the last 4 weeks ÷ active users | The difference between a toy and a tool. One-off usage spikes after training sessions; habitual usage survives them. This is the number I trust most. |
| App mix | Share of activity per app from the usage report | Where the value story lives. Meeting summaries and email drafting are the usual entry drugs; spreadsheet and document usage is where deeper workflow change shows up. |
| Dormancy | Licensed users with no activity in 60+ days | The money. Every name on this list is circa 360 USD a year of shelf-ware, and also a person whose licence someone on a waitlist would use. |
Resist the urge to publish benchmark comparisons you cannot source. The dashboard's built-in benchmarks (at the 50-licence tier) are the defensible ones because Microsoft owns the methodology. "Industry average adoption is X%" from a vendor webinar is not a number to put in front of a board.
The Graph script: dormant licences in twenty minutes
Everything above is portal work. This is the part you script once and schedule. The Microsoft Graph reports API exposes Copilot usage detail per user, including last activity dates per app; joined against your licensed-user list, it produces the dormancy inventory that drives the reassignment play.
# Requires Microsoft Graph PowerShell
# Scope: Reports.Read.All
Connect-MgGraph -Scopes "Reports.Read.All"
# Current Microsoft 365 Copilot usage reports endpoint
# (note the /copilot/reports path; the old /reports/
# path is legacy). Validate endpoint, period values and
# response schema before scheduling.
$uri = "https://graph.microsoft.com/v1.0/copilot/reports/" +
"getMicrosoft365CopilotUsageUserDetail(period='D90')" +
"?`$format=application/json"
$response = Invoke-MgGraphRequest -Method GET -Uri $uri
$usage = $response.value
$usage | Select-Object -First 3 |
Select-Object userPrincipalName, displayName,
lastActivityDate,
microsoftTeamsCopilotLastActivityDate,
wordCopilotLastActivityDate,
excelCopilotLastActivityDate,
outlookCopilotLastActivityDate,
copilotChatLastActivityDate |
Format-List
# Returns data for users with a Microsoft 365 Copilot
# licence; unlicensed Copilot Chat use is not included.
$cutoff = (Get-Date).AddDays(-60)
$dormant = $usage | Where-Object {
$lastRaw = $_.lastActivityDate
if ([string]::IsNullOrWhiteSpace($lastRaw)) {
$true # licensed, never active
}
else {
([datetime]$lastRaw) -lt $cutoff
}
}
$dormant |
Select-Object userPrincipalName, displayName,
@{n='LastCopilotActivity'; e={ $_.lastActivityDate }} |
Sort-Object LastCopilotActivity |
Export-Csv .\copilot-dormant-60d.csv -NoTypeInformation
Write-Host ("Dormant 60d+: {0} of {1} licensed users" -f
$dormant.Count, $usage.Count)
# Each row is ~360 USD/year of shelf-ware and a
# reassignment candidate. Review by hand before acting:
# leavers, long leave and role changes all look dormant.
/reports/ path to /copilot/reports/, and schemas here have changed before. Note also that the API returns data only for users holding a Microsoft 365 Copilot licence, which is exactly the universe you want for a dormancy inventory, but means unlicensed Copilot Chat activity is invisible to it. If your tenant conceals user names in reports, userPrincipalName will be pseudonymised and the reassignment workflow needs the display-setting conversation from the admin center section first. And run the review by hand: parental leave, sabbaticals and recent joiners all look like dormancy to a script.The licence reassignment play
This is the part of the exercise that pays for itself, and the part most organisations fumble by treating it as a punishment. The play, in five steps:
- Set the policy before the first list. Sixty days of no activity triggers a conversation; ninety days triggers reassignment. Announce it once, kindly, to all licence holders. A policy announced after the list exists feels like an ambush; announced before, it feels like stewardship.
- Review the list by hand. Strip leavers (that licence removal is a different, faster process), people on leave, and anyone whose role changed. What remains is genuine non-adoption.
- Offer the exit ramp first. A two-line message: "your Copilot licence shows no use since April; want a 30-minute refresher, or should we pass it to someone on the waitlist?" A surprising number of people opt out gracefully, and a few become your best users after the refresher. Both outcomes are wins.
- Reassign, do not return. Keep a waitlist from the start (there is always a waitlist once people know licences move). Reassignment converts dead spend into a motivated user; returning licences at renewal converts it into a smaller project. Note the commercial reality: most agreements bill the committed seat count until renewal, so mid-term removal saves nothing by itself. Moving the seat to someone who wants it is what changes the value.
- Report the motion. "Twelve licences reassigned this quarter, waitlist of eight" is one of the strongest lines a board report can carry. It says the asset is managed, demand exists, and IT is paying attention. No adoption percentage communicates that.
The board report: one page, five numbers, no screenshots
Dashboards do not survive contact with a board. A page does. The structure I use:
| Line | Number | Source | Honesty note |
|---|---|---|---|
| Adoption | Active users / licensed, with 3-month trend arrow | Admin center usage report | Defensible as-is. |
| Habit | % of active users active every week of the month | Usage report exports / Graph | Defensible as-is. The trend is the story. |
| Where | Top 3 apps by Copilot activity | Usage report | Pairs with one sentence on what that means for training focus. |
| Impact | Dashboard impact figures (meeting hours, email time) | Copilot Dashboard | Present explicitly as "Microsoft's model-based estimate". Name the methodology. This caveat costs you nothing and buys you credibility for every other number on the page. |
| Stewardship | Licences reassigned + waitlist depth + cost per active user | Your dormancy process | Defensible as-is, and usually the line that lands hardest with finance. |
Cost per active user deserves a sentence, because it is the number finance actually wants and almost nobody computes it: total Copilot spend divided by 28-day active users, not by licences. When adoption rises, this number falls, which gives the board a metric that rewards exactly the behaviour you want funded. A licence at circa 30 USD per month costs the same whether it is used or not; cost per active user makes that visible without a lecture.
Agents and the meter
Agent usage is the newest wrinkle and the one that will dominate this conversation by next year. Three things to wire up now:
- Top agents in the usage report: already there. If agents appear that IT did not deploy, route that to your governance process rather than your reporting one.
- Consumption billing lives in the Power Platform admin center: pay-as-you-go and message-pack agents are metered there (Licensing > Copilot Studio). If anyone in the tenant builds agents on consumption billing, someone in IT needs eyes on that meter monthly, because consumption pricing turns a pilot into a procurement surprise quietly and quickly.
- Cost insights are arriving in Viva: Microsoft added Copilot cost management insights (mid-2026) to track credit usage across AI services. Check current availability for your tenant; if present, it belongs in the same monthly review.
The privacy line
A measurement programme that turns into surveillance poisons adoption faster than any licensing cost. The lines I hold:
- Measure adoption, not individuals. The dormancy list is an asset-management artefact, not a performance one. The moment usage data reaches a people manager as an individual metric, users notice, and usage goes quiet in the worst way: people stop using Copilot for anything they would not want read aloud.
- Respect the pseudonymisation setting and make changing it a documented, deliberate decision with the data-protection owner in the room. EU tenants: in several countries this is works-council territory. Have the conversation before the export, not after.
- Purview audit logs record prompts. That is their compliance job, and access is rightly role-gated. Do not use audit data for adoption analytics; the aggregate surfaces exist precisely so nobody has to read anyone's prompts to answer a budget question.
- Sentiment beats surveillance. If you want to know why adoption is low in a team, the dashboard's survey data (where available) or a fifteen-minute conversation outperforms any amount of log forensics.
The mistakes I keep seeing
- Deploying licences with no measurement owner.The data was always there. Nobody was assigned to look. By month three the question arrives and the answer is an anecdote. Name an owner on deployment day, even if the owner is you and the process is fifteen minutes a month.
- Answering the CFO with a dashboard screenshot.Screenshots say "we have data". A page with five numbers and a trend says "we manage this". The second one gets renewals funded.
- Presenting assisted-hours estimates as measured fact.One sceptical board member asking "how is that computed" undoes the whole report. Caveat it yourself, first, visibly. Credibility compounds.
- Building a per-user league table.It feels like insight and lands like surveillance. Adoption data aggregates up well and weaponises badly. Keep individual data inside the licence-hygiene process.
- Ignoring the 50-licence dashboard tier.Tenants at 45 licences are five seats away from benchmarks, group views and agent insights. Sometimes the cheapest analytics upgrade is a slightly bigger deployment, and the waitlist you built has the candidates.
- Letting consumption agents run unmetered.Seat licensing fails predictably; consumption billing fails interestingly. If agents are on pay-as-you-go, the Power Platform meter is a monthly appointment, not a quarterly surprise.
- Measuring once.A single snapshot answers nothing; every number in this article only means something against last month. The habit is the deliverable.
Copilot measurement FAQ
Do I need Viva Insights licences to see the Copilot Dashboard?
No. The dashboard is viewable without a paid Viva Insights licence; an AI Administrator enables it and delegates access. The richer tier (benchmarks, agent insights, group-level views) unlocks for tenants with at least 50 Copilot or Viva Insights licences. The Advanced Insights Analyst Workbench is the part that carries real setup weight, and most SMB tenants never need it.
How fresh is the usage data?
Admin center usage data generally lands within about 72 hours of the activity day. That is fine for monthly measurement and useless for real-time arguments; do not promise same-day numbers to anyone.
Can I see what users are actually asking Copilot?
Prompts are recorded in Purview audit logs for compliance purposes, gated behind audit roles, and that is where that capability should stay. For adoption measurement you never need prompt content, and reaching for it converts a measurement programme into a trust problem. Aggregate signals answer the budget question.
What is a good adoption number?
The honest answer: the one that is higher than last quarter. Published benchmarks vary wildly with deployment quality and licence targeting, and most numbers quoted in vendor decks are unsourced. Use the dashboard's built-in benchmarks if you have the 50-licence tier, and otherwise compete with your own baseline. A tenant that licensed the right people and trained them will beat any industry average; a tenant that sprayed licences will not, and no benchmark fixes targeting.
Does removing a dormant licence save money immediately?
Usually not mid-term: most agreements bill committed seats until renewal. What reassignment does immediately is convert dead spend into a motivated user, and what the dormancy process does at renewal is give you a defensible, evidenced number to re-commit at. Both beat discovering the same information during renewal week.
We are an MSP. What does this look like across customers?
Standardise the afternoon: the Graph pull per tenant, the same five-number page per customer, quarterly. It is one of the easiest recurring-value deliverables in the current stack, it is built almost entirely on no-cost reporting surfaces, and it reliably starts the "should we adjust seats" conversation that keeps licensing revenue honest and customers feeling managed.
- Microsoft 365 Copilot reporting options for admins (the four surfaces)
- Microsoft 365 Copilot usage report
- Microsoft 365 Copilot readiness report
- Connect to the Microsoft Copilot Dashboard
- Copilot Analytics introduction
- Copilot adoption report template (Advanced Insights)
- Purview audit logs for Copilot and AI activities
- Graph API: Copilot usage user detail
- Copilot Studio analytics overview
Fifty licences and no story for the board?
Setting up the measurement habit is work I do with small IT teams: the reporting surfaces, the dormancy process and the one-page report, running without you thinking about it. If the month-three question is heading your way, get in touch. It is easier to answer before it is asked.
Talk to me