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.

0
Rows for an unlicensed user
24
App × platform cells per user
30
Days the single-day view reaches back
9
Extra columns in report version 2

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.

The pattern

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.

THE QUESTION SITS ON THE WRONG SIDE OF THE PURCHASE M365 Apps usage which app, on which platform Teams user activity meetings attended, messages Mail and file activity volume there is to summarise Candidate list every user, no seat needed LICENCE ASSIGNED Copilot usage report last activity per host app Version 2 columns prompts, active usage days Unlicensed user no row, ever was the candidate list right? Everything left of the dashed line is free to measure today and covers the whole tenant. Everything right of it describes only the seats you already paid for. Unlicensed Copilot Chat activity is not in Graph reports at all — that one lives in the admin centre and the audit log.

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.

Sources
GraphPaaS

Score Copilot readiness from the reports you already have — before the seats are on the invoice.

See who would use it →

Newsletter

Get the next article by email

Practical M365 & Azure cost pieces like this one. No spam, unsubscribe anytime.