How much are you wasting on unused Microsoft 365 licences?

19 Jul 2026

How much are you wasting on unused Microsoft 365 licences?

Licences are bought for a reason at the time. Then people leave, projects end, plans change, and it is nobody's job to notice. What is left is a quiet line item that renews itself every month, and the only way to size it is to look at your own tenant.

€404
per year, per idle E3 seat (list price)
5
places the waste hides
90 days
inactivity threshold to flag
2
data sets to join: assignments and activity

€404 = Microsoft 365 E3 at its list price of €33.70 per user per month, × 12.

Where the waste hides

Licence waste is rarely one big mistake. It is five small leaks, each invisible from the billing page, each only visible when you cross licence assignments with actual sign-in and usage data:

Leak What it looks like How to find it
Leavers still licensed Offboarding disabled the account but never reclaimed the licence. Accounts with sign-in blocked and a paid SKU assigned.
Never signed in Provisioned for a hire, a project or "just in case" — never used once. Licensed users with no sign-in activity at all.
Dormant 90+ days Real people who stopped using the account months ago. Last sign-in older than 90 days, licence still assigned.
Over-sized SKUs E3 or E5 assigned where usage says email-only. Cross mailbox/Teams/OneDrive activity against the SKU per user.
Unused service plans Waste inside seats you do use — paid add-ons nobody opens. Per-SKU service plan usage vs. what the bundle includes.
The pattern
None of these show up in the Microsoft 365 admin center's licence page, because it counts assignments, not usage. Waste lives exactly in the gap between the two.

The audit, in four steps

1
Pull assignments and activity together.

Export licensed users with their SKUs, then join last-sign-in dates and per-workload activity (mailbox, Teams, OneDrive). This join is the whole audit — everything else is filtering.

2
Reclaim the certain cases first.

Blocked accounts with licences are the safest removals: nobody can sign in to use them. Users who never signed in come next, after one check for a new hire who has not started yet.

3
Review the dormant list with HR context.

90-days-inactive users need a human look: parental leave and sabbaticals are fine; the contractor whose project ended in March is not. Downgrade or reclaim case by case.

4
Make it monthly, not heroic.

A one-off audit goes stale — waste is a flow, not a stock. Put the same report on a monthly cadence so reclaiming a seat becomes routine hygiene instead of an annual project.

Doing this without the spreadsheet marathon

You can run the whole audit by hand: two admin centers, three CSV exports, one careful spreadsheet join — and again next month. That is exactly the report GraphPaaS keeps for you: licences on disabled accounts and on people with no sign-in or activity for 90 days, down to the person, per tenant, refreshed automatically. It comes with a dry-run PowerShell script your admin runs to take the licences back (direct assignments only; we stay read-only). Step 3 is the part left for a human.

Either way, run the numbers once: the count of idle seats times the list price is the figure to take to whoever signs the renewal.

GraphPaaS

Free licence audit of your tenant: one admin consent, read-only, no credit card.

See your number →

Newsletter

Get the next article by email

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