๐Ÿ’ณ Recipe ยท Licensing & Cost Optimization

List Available Microsoft 365 License SKUs and Usage in a Tenant

Enumerate subscribed SKUs, consumed units, and available seats across your tenant

Complexity

Beginner

Impact

read-only + audit + licensing + cost-optimization

Context

Why This Matters

Understanding what licenses your tenant owns โ€” and how many are actually in use โ€” is the foundation of sound license management. Microsoft 365 tenants accumulate SKUs over time: trials, add-ons, E3/E5 bundles, Power BI, Teams Phone, Defender, and more. Without periodic inventory, it is easy to over-purchase, miss expiring trials, or leave unassigned seats sitting idle.

Run this recipe when you need to:

  • Audit license utilization before a renewal or true-up conversation with your reseller.
  • Find unused seats to reclaim before buying more.
  • Map friendly product names to the cryptic SKU part numbers (e.g. SPE_E3 = Microsoft 365 E3).
  • Produce a quick snapshot report for finance, compliance, or leadership.

Expected Outcomes

After completing this recipe you will have:

  • A complete list of every SKU your tenant is subscribed to.
  • For each SKU: the total prepaidUnits (purchased), consumedUnits (assigned to users), and calculated available seats.
  • The skuId (GUID) and skuPartNumber needed for downstream automation (assignment, group-based licensing, reporting).
  • An optional CSV export suitable for sharing with finance or procurement.

Risks & Considerations

This is a read-only operation, but keep the following in mind:

  • Permissions: The Graph endpoint requires Organization.Read.All. Attempting the call without consent returns HTTP 403 โ€” Insufficient privileges.
  • Part numbers are not friendly names. SPE_E3, ENTERPRISEPACK, and STANDARDPACK are examples โ€” refer to Microsoft's product names and service plan identifiers reference for translation.
  • Suspended vs. warning units: prepaidUnits includes enabled, suspended, and warning counts. Only enabled seats are assignable. Do not treat the total as available capacity.
  • Do not share raw output externally. SKU IDs are not secrets, but tenant license posture can be considered sensitive commercial information.

Required Permissions

PermissionWhy It's Needed
Organization.Read.AllRequired to read tenant-wide subscription and SKU information via the subscribedSkus endpoint.
Directory.Read.AllAlternative scope that also grants read access to subscribedSkus; useful if Organization.Read.All is not available in your consent policy.

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

List all Microsoft 365 license SKUs in our tenant along with purchased, assigned, and available seat counts. Highlight any SKUs with fewer than {threshold} seats remaining or more than {idle_threshold} unused.
Try in Dex CoAdmin