ShareMaster V2 is in beta, a complete rebuild. See what is new and request access →
Features All features overview
Migration Tools Overview Structure and content OneDrive ↔ SharePoint Content only Structure only Move / Copy Upload from this computer Download to this computer Dropbox to SharePoint Resume and incremental runs
Recycling Bin Overview Browse a site's recycle bin Empty recycle bins in bulk Restore and purge history
Archive Overview Configure the tenant On Demand Archive Restore Archived Files Archive Savings Report Blob Viewer
Optimise Storage Tools Overview Delete all items in a list Delete all files and folders in a library Remove empty folders Remove duplicate files Reduce image sizes Delete sites and subsites
SharePoint Tools Overview Tenant Explorer SharePoint Explorer Easy Settings Fix renamed groups List Explorer Search the Preservation Hold Library
Replace Overview Replace in SharePoint Replace in local files Find password-protected files
Shared Links Overview Report shared links Report unique permissions Remove a person from sharing links Remove shared links Remove unique permissions
Version History Overview Version trimming Version trimming report Reset file version
Reports Overview Inventory report Folder inventory Site and subsite storage Security matrix Teams permissions Pre-migration analysis Compare items Dropbox to Microsoft 365 compare Duplicate file report Empty folder report Image size report Recycle bin report Unused licences Report history
V2 beta Pricing Demos Blog Guides Use cases Compare Tools Alerts FAQ Contact Sign in Start free trial
  1. Home
  2. Documentation
  3. Reports

Unused licences

Seats nobody uses, and what they cost

The Microsoft 365 seats you are paying for that nobody is using, priced. It finds licensed users with no activity in the window you set, plus seats you have bought and never assigned to anyone, and separates what you could cut today from what can only change at renewal. It never removes a licence.

Reads only. Nothing in SharePoint is changed.

What it tells you

  • Who holds a licence and has not used it inside your idle window, with the evidence per workload rather than a single guess.
  • Seats that are paid for and assigned to nobody at all.
  • What all of that is worth per month and per year, at Microsoft's list prices for your market.
  • What is genuinely reclaimable now against what is locked until the subscription renews, which are very different conversations with a finance team.
  • Who cannot be judged at all, and why, instead of being quietly counted as idle.

How it runs

  1. Sign in. One window, asking for the full set of read permissions the report needs. It does not ask for a smaller set and then come back for more halfway through.
  2. Set the idle window. One month by default. Seats are priced at Microsoft's list prices built into ShareMaster, which you cannot change in the app; the workbook marks every price as an estimate, and you can edit the Unit price (monthly) cells on its Prices sheet in Excel to use your own.
  3. It gathers the evidence. Tenant subscriptions and SKUs, who holds what, the Microsoft 365 usage reports per workload, and sign-in activity, which is the only uncapped source and therefore the only way to answer questions longer than 180 days.
  4. Save the workbook. Thirteen sheets, or fourteen when an earlier run for the same tenant adds New since last run, arranged so Summary and Savings answer the question and the rest show the working.

How it works

It reads, in order: the tenant's subscribed products and seat counts, which is the one read the report cannot do without; any groups you excluded; every licensed user with their last sign-in; deleted users still holding seats; and subscription renewal and trial dates. If your tenant cannot supply sign-in activity, the users are read again without it and sign-in is marked unavailable. It then reads six Microsoft 365 usage reports (active users, email, Office apps, Teams devices, mailbox usage and Copilot), each over the shortest period that covers your idle window, up to 180 days, and finally the Exchange mailbox activity.

If the usage reports have names concealed, their per-user figures cannot be matched to anyone, so all of them are set aside and the Data sources sheet says why, rather than everyone appearing idle. Each user is then judged against the date the usage data was current as of, in this order: excluded; holding only free products; deleted, disabled or with an assignment error; could not be judged; in use or idle; too new to judge; never used. Never used is decided only from sign-in or Exchange activity, the sources without a 180 day cap.

Confidence is High when workload activity and sign-in were both read, Medium with workload activity only, Low with sign-in only, and None when nothing could be read. A user holding a product that has no usage report is capped at Low.

Unassigned seats are the seats bought minus the seats assigned. Disabled, deleted and errored users count as confirmed savings; idle and never used count as potential. Prices are the published list prices built into the app for your market and cannot be edited, and a product with no bundled price is not costed. Whether a saving can be made now or at renewal follows the price's billing term. A check for holds runs after the verdicts; if it fails, holds read as unknown. The workbook goes into History when the run ends, and when an earlier run exists it adds a sheet of what is new since then.

What you get

An Excel workbook, named like contoso-unused-licences-20260901-142207.xlsx, kept in Report History whether or not you save it. Read Summary and Savings first. The remaining sheets exist so a number you intend to act on can be checked.

Savings sheet

Every reclaimable line, priced, split by how confident and how soon.

ColumnExample
BucketDisabled accounts still licensed
SKUSPE_E3
Seats34
ConfidenceConfirmed
Can be reducedNow (monthly billing)
Renewal2027-02-01
ActionRemove the licence. Convert the mailbox to shared first if the data is still needed.

Users to investigate sheet

Per-user detail behind the counts.

ColumnExample
Userj.olsen@contoso.com
NameJonas Olsen
EnabledYes
Created2019-06-11
SKUsSPE_E3
VerdictIdle - investigate
ConfidenceHigh

Cannot be measured sheet

Accounts the evidence does not cover, kept out of the totals rather than assumed idle.

What you need

  • A Microsoft 365 sign-in that can be granted these read scopes: Organization.Read.All and Directory.Read.All for subscriptions and SKUs, User.Read.All for who holds what, Reports.Read.All for per-workload usage, and AuditLog.Read.All for sign-in activity.
  • Every one of those is read only. Consent is usually a Global Administrator's to give.
  • If your tenant conceals user names in usage reports, per-user idle detection cannot run. The report says so rather than reporting everyone as idle.

What it will not do

  • It never removes a licence, and it has no button that does. Reclaiming is done in the Microsoft 365 admin centre by you.
  • Idle is not the same as unnecessary. A licence can be legitimately dormant, and the workbook keeps a Holds & safe reclaim sheet for exactly that reason.
  • Microsoft's usage reports lag by a couple of days. The Summary sheet states the date the activity data was current as of.

See every feature