๐ณ 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) andskuPartNumberneeded 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, andSTANDARDPACKare examples โ refer to Microsoft's product names and service plan identifiers reference for translation. - Suspended vs. warning units:
prepaidUnitsincludesenabled,suspended, andwarningcounts. Onlyenabledseats 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
| Permission | Why It's Needed |
|---|---|
| Organization.Read.All | Required to read tenant-wide subscription and SKU information via the subscribedSkus endpoint. |
| Directory.Read.All | Alternative 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