๐Ÿ’ณ Recipe ยท Licensing & Cost Optimization

Check M365 License Subscription Counts and Usage

Audit subscribed SKUs, consumed seats, and available licenses across your Microsoft 365 tenant

Complexity

Beginner

Impact

read-only + licensing + cost-optimization + reporting

Context

Why This Matters

Microsoft 365 licenses represent a significant recurring cost for most organizations, and running out of available seats can block user onboarding, mailbox creation, and service activation. Periodically reviewing license counts ensures you have headroom for new hires, identifies unused licenses that can be reclaimed or downgraded, and supports budgeting and true-up conversations with your reseller or Microsoft directly.

Run this recipe:

  • Before onboarding batches of new users
  • Monthly as part of tenant hygiene
  • Before subscription renewal to right-size purchases
  • When investigating "license assignment failed" errors

Expected Outcomes

After completing this recipe you will have:

  • A complete list of every subscribed SKU in the tenant
  • The number of prepaid (enabled) units per SKU
  • The number of consumed (assigned) units per SKU
  • The number of available seats remaining for each SKU
  • Visibility into suspended, warning, and locked-out units that may indicate billing issues

Risks & Considerations

Read-only operation โ€” the Graph endpoint used here does not modify any data, so there is no direct risk. However, keep the following in mind:

  • SKU part numbers are cryptic. ENTERPRISEPACK means Office 365 E3, STANDARDPACK means E1, etc. Always map them to friendly names before sharing reports.
  • Free SKUs inflate pools. SKUs like FLOW_FREE and POWER_BI_STANDARD often show 10,000 or 1,000,000 units โ€” don't treat those as purchased seats.
  • Trial and grace-period subscriptions appear the same as paid ones. Cross-check with the M365 admin center billing page for actual billing status.
  • Do not share raw SKU IDs externally in support tickets without context; they are tenant-agnostic but the consumption counts are sensitive.

Required Permissions

PermissionWhy It's Needed
Organization.Read.AllRequired to read subscribedSkus for the tenant via Microsoft Graph.
Directory.Read.AllAlternative permission that also grants read access to subscribedSkus.
License Administrator or Global Reader roleRequired for interactive admin center or PowerShell sign-in to view license data.

The fastest way to get this done โ€” just ask Dex. Copy the prompt below and paste it into your Dex conversation.

For IT Admins

Paste into Dex CoAdmin

How many M365 licenses are we subscribed to and how many are being used? List each SKU with purchased, consumed, and available seats, and flag anything close to capacity.
Try in Dex CoAdmin