Nobody opens the usage report between renewals

A license nobody uses looks free right up until the renewal notice lands, because the number a finance team multiplies against the unit price is the seat count on the contract, not the login count behind it. The waste stays invisible for a boring reason. The invoice arrives once a year, and the usage data sits one click into an admin center that nobody has a reason to open between one renewal and the next.

On a Power Platform tenant I reviewed ahead of a contract renewal, the admin center listed 140 premium per-user licenses assigned across three business units. The ninety-day active user count was 61. The other 79 people had not opened a canvas app, run a flow that used a premium connector, or touched Dataverse directly in three months. Nobody had checked, because the number that mattered on the renewal slide was 140 seats times the unit price, not the 79 names sitting behind seats that had gone quiet.

The audit is three lists, not a project

The method behind that finding does not need a steering committee or a quarter of runway. Pull the last-ninety-day active usage report for each license type, whether that is the Power Platform admin center's user activity view or Salesforce's login history under Setup. Pull the assigned seat list from the same tenant. Line the two lists up by user, and anyone holding a seat with zero activity in ninety days goes onto a flagged list of their own.

The same pass works on Agentforce seats. Salesforce's usage dashboards report agent-assisted conversations per assigned user, and a service team that provisioned twenty agent builder seats for a pilot last spring will usually show four or five people who ever opened the console. The other fifteen seats were assigned so the pilot could expand later, and later never arrived. Our checklist for reading a licensing change covers the entitlement side of this same review, and it pairs well with a usage pull, since a changed entitlement is often the reason a seat went quiet in the first place.

The unused seat is the easy find

A flagged seat with zero logins in ninety days is the easy eighty percent of this exercise. Nobody needs persuading that a license assigned to someone who left the automation project eighteen months ago should be reassigned or cancelled. That list gets shorter the moment you show it to a budget owner, because there is no argument to have. The number was always going to be embarrassing once somebody printed it.

The harder case sat two rows below the flagged list on that same review. A regional operations manager held a Power Apps per-user premium license, logged in every week, and used exactly one canvas app that read from a single SharePoint list. A per-app plan would have covered that single app for a fraction of what the premium license cost across a year. A usage report cannot see that difference. It only sees a login, and a login looks the same whether the person behind it is using one feature or twelve.

A report finds the seat, a manager finds the reason

That second kind of finding cannot close itself. It needs a conversation with the manager who requested the license, not another export from the admin center. When I raised the operations manager's case with her director, the first answer was that the team had two more canvas apps planned for the following quarter, which would have justified the premium tier on their own. The second answer, once we checked the project list together, was that both apps had been deprioritized in June and nobody had told licensing.

The point of that conversation is to find the plan the license was bought against and check whether that plan still holds, not to catch anyone out. A director who requested twenty Agentforce seats for a pilot six months ago can usually tell you, in one sentence, whether the pilot became a program or quietly stalled. The governance work around Agentforce editions makes the same point from the buying side, that a seat count decided at kickoff rarely matches the seat count a program actually needs a year in.

Reclaim the seat on a delay, not the same day

I have seen a reclaimed license cause a bigger mess than the one it fixed. A marketing analyst's Power BI Pro license was pulled two days after a usage audit flagged her as inactive. Her ninety days of quiet had been maternity leave, not disuse, and she came back to find her workspace access gone the week she needed to rebuild a board deck for a leadership review.

The fix is a holding step, not a faster script. Move a flagged seat to a disabled state instead of a deleted one, notify the assigned person's manager with a plain description of what triggered the flag, and hold it there for thirty days before the license is actually cancelled or reassigned. Anyone on leave, in a role transition, or mid-project gets caught by that window instead of by a support ticket the week of their board deck.

Put the review sixty days before the renewal locks

None of this holds up as a one-time cleanup. Run it once, recover the obvious savings, and the seat list drifts right back to where it started within a year, because provisioning always outpaces the review that catches it. The fix is to put the usage pull on the renewal calendar itself, sixty days before the contract locks, so a flagged seat has time to become an actual line item change instead of a note nobody acts on because the invoice already went out.

Pull your own tenant's ninety-day report before the next renewal quote arrives, not after. Then ask whoever owns that renewal for the login count behind the seat count on the slide, and expect an answer before you sign.