Copilot readiness licence check
21 Sept 2026
Copilot readiness: who in your tenant would actually use it
The proposal says two hundred seats. It says two hundred because that is roughly how many knowledge workers the company has, and because the reseller priced it that way. Nobody in the room can name forty people who will open Copilot in Word twice a week, and nobody wants to be the one who says so.
The instinct is to go and look at the usage data first. That instinct runs into a wall about ninety seconds later, and the wall is the interesting part of this article.
The report named after the question can't answer it
Microsoft publishes a per-user Copilot usage report, and it is good. getMicrosoft365CopilotUsageUserDetail
returns a last-activity date per host app — Teams, Word, Excel, PowerPoint,
Outlook, OneNote, Loop and Copilot Chat — and with version=v2 it
adds nine more columns including prompts submitted and active usage days.
It also carries a one-line note that decides this entire exercise: "This API only returns usage data for users who have a Microsoft 365 Copilot license." The report is a closed loop. You buy the seat, assign it, and then the report starts describing the person. Before the purchase it has nothing to say about anyone, because before the purchase nobody is in it.
Readiness is not a Copilot measurement. It is a measurement of the apps Copilot lives inside, taken from reports that already exist and already cover every user in the tenant. The whole trick is picking signals that predict the surface, not signals that flatter the pitch.
What each signal turned out to mean
Four reports get proposed for this job. They are not equally good, and the gap between them is not where people expect.
The Apps usage report is the load-bearing one. getM365AppUserDetail
returns, per user, a boolean for each of Outlook, Word, Excel, PowerPoint,
OneNote and Teams, and then the same six again split across Windows, Mac, Mobile
and Web — twenty-four app-by-platform cells. That platform split is the part
that matters. Copilot in Word is a thing that happens in Word, and somebody
whose Word cell is true only under Mobile is not going to draft a
proposal with it. A readiness list built from the six app booleans alone
over-counts badly; the same list built from the Windows and Mac columns is a
different, much shorter list.
Teams activity is the highest-signal single column, and it is one
column. getTeamsUserActivityUserDetail
ships thirty-odd columns including Meeting Count, Meetings
Organized Count, Meetings Attended Count and separate counts
for ad hoc, one-time and recurring meetings. Meeting recap is the feature people
actually keep using after month two, so Meetings Attended Count
over a D30 window sorts the tenant more usefully than any other number in this
article. One caveat, straight from the requirements page: Copilot can only refer
to meeting content afterwards if transcription
or recording is enabled. A heavy meeting attender in a tenant with
transcription off is a candidate for a policy change, not a seat.
Mail and file volume is a tiebreaker, not a filter. High mail volume predicts value from Outlook summarisation, and high file activity predicts there is something in OneDrive worth grounding on. Both are real, both are weaker than the two above, and both rank people rather than excluding them.
The activation report is the one that looks useful and isn't. It tells you a user installed Office on a device once, possibly in 2021. That is an install event, not behaviour — the same trap covered at length in the add-on SKUs nobody opens.
| Signal | What it predicts | Where it misleads |
|---|---|---|
Word/Excel/PowerPoint on Windows or Mac |
There is a surface for in-app Copilot to appear on. | The undifferentiated app column counts web and mobile too. |
Meetings Attended Count |
The strongest single predictor of sustained use. | Worthless without transcription or recording turned on. |
| Mail and OneDrive volume | There is material to summarise and ground on. | Ranks people; never use it to exclude one. |
Last Activation Date |
Nothing. Somebody installed Office, once. | Reads like recency and is years stale. |
| Copilot usage report | Whether the seats you bought are being used. | Silent on everyone who hasn't got one. |
Where a readiness score quietly lies
The names are hashes by default. In Microsoft 365 usage
reports, user
information such as usernames, groups and sites is concealed unless the
tenant says otherwise through the adminReportSettings API. A
readiness list of thirty-two-character hex strings is not a list anyone can
action. Either flip the setting first or resign yourself to a headcount.
The 30-day floor is on the wrong parameter. Both per-user
reports accept a period of D7, D30, D90
or D180, and separately accept a single date — but the
date variant is documented as only available for the past 30 days.
Periods are how you look back further; you cannot reconstruct a daily series for
last quarter after the fact.
Some of the tenant is ineligible, not unready. Copilot isn't available when using device-based licensing for Microsoft 365 Apps for enterprise, and isn't available on group mailboxes. Those users will score badly and will keep scoring badly no matter how the pilot goes. Mark them as excluded rather than letting them dilute the percentage.
The denominator hides the easy money. Score two hundred people and you will find some of them have not signed in for months — they are a licence question, not a Copilot question, and they belong in the dormant accounts pass instead.
After the pilot, run the same join backwards
Once the first block of seats is live, the Copilot report finally has
something to say — and version 2 is the one to ask. Prompts submitted
and Active Usage Days separate a person who opened Copilot Chat
once in March from a person using it on eleven days out of twenty-eight, which
the v1 last-activity dates cannot do. Note that v2 shifts the mid window from
D30 to D28, so a monthly chart mixing the two versions
will have a step in it that isn't real.
Put that next to the candidate list you built before the purchase and you get the number that actually matters for the renewal: of the people we predicted would use it, how many did. That is the same reconciliation habit as a licence waste audit, just pointed at the most expensive per-seat add-on Microsoft sells.
GraphPaaS already collects the per-user app usage, Teams activity and Copilot usage reports per tenant on a schedule, so the join is a page rather than four CSVs behind four short-lived download URLs.
- copilotReportRoot: getMicrosoft365CopilotUsageUserDetail — the licensed-users-only note, the v1 column list, the nine extra v2 columns, and the
D28window that replacesD30in v2. - getM365AppUserDetail — the six apps across Windows, Mac, Mobile and Web, and the note that the
datevariant only covers the past 30 days. - getTeamsUserActivityUserDetail — the meeting columns, including attended, organised and the ad hoc / one-time / recurring split.
- App and network requirements for Microsoft Copilot — transcription or recording required for post-meeting recap, no Copilot on group mailboxes, and none with device-based licensing.
- Working with Microsoft 365 usage reports in Microsoft Graph — user information is concealed in reports by default, and
adminReportSettingsis what controls it.
Score Copilot readiness from the reports you already have — before the seats are on the invoice.
See who would use it →