๐ณ Recipe ยท Licensing & Cost Optimization
Count Assigned Microsoft Teams Premium Licenses in a Tenant
Quickly determine how many users have Microsoft Teams Premium assigned โ and confirm whether the license is even subscribed in your tenant.
Complexity
Beginner
Impact
read-only + licensing + audit + cost-visibility
Context
Why This Matters
Microsoft Teams Premium is an add-on license that unlocks advanced meeting features โ intelligent recap, advanced webinars, virtual appointments, meeting branding, and enhanced security controls. Because it's an add-on (not bundled with most E3/E5 plans), admins often need to verify how many seats are currently assigned for budgeting, renewal planning, or capacity reviews.
This recipe shows how to answer the common question "How many people in our tenant have Teams Premium?" using the subscribedSkus endpoint. It also handles the equally common case where the tenant hasn't purchased Teams Premium at all โ in which case the correct answer is zero.
Run this when:
- Finance or procurement asks for current Teams Premium seat utilization.
- You're evaluating whether to expand, reduce, or cancel a Teams Premium subscription.
- You're auditing add-on license usage across the tenant.
Expected Outcomes
- A definitive count of users with Microsoft Teams Premium assigned (
consumedUnits). - Total purchased seats (
prepaidUnits.enabled) and remaining available seats. - Clear confirmation if Teams Premium is not subscribed in the tenant (zero assigned).
- The SKU ID, useful for follow-up scripts that list or bulk-assign Teams Premium licenses.
Risks & Considerations
Gotchas
- SKU part number naming: Teams Premium typically appears as
Microsoft_Teams_Premium, but Microsoft has historically used variants likeTEAMS_PREMIUMor region-specific names. Match on a substring (TEAMS_PREMIUM) rather than an exact value. - Not subscribed โ error: If the SKU is absent from
subscribedSkus, the tenant simply doesn't own Teams Premium. Report zero and move on โ don't treat it as a failure. - consumedUnits vs. active users:
consumedUnitscounts assigned licenses, including licenses assigned to disabled or soft-deleted user accounts. If you need only active users, cross-reference with/usersand filter onaccountEnabled. - Group-based licensing: If Teams Premium is assigned via group-based licensing,
consumedUnitsstill reflects the correct total, but changing group membership can shift this number. Always pull fresh data. - No write operations here: This is a read-only query. It's safe to run repeatedly and requires no change management.
Required Permissions
| Permission | Why It's Needed |
|---|---|
| Organization.Read.All | Required to read subscribedSkus and view license inventory for the tenant. |
| Directory.Read.All | Alternative permission that also grants read access to subscribedSkus. |
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 Pro
Check Teams Premium Assignments in the Microsoft 365 Admin Center
- Sign in to the Microsoft 365 admin center as a Global Reader, License Administrator, or Global Administrator.
- In the left navigation, expand .
- On the Licenses page, scan the list for Microsoft Teams Premium (or a variant like Teams Premium Introductory Pricing).
- If it's not in the list, the tenant has 0 Teams Premium licenses โ it hasn't been purchased.
- If it's present, the Assigned column shows exactly how many users have it.
- Click the Microsoft Teams Premium row to drill in and see:
- Assigned โ number of users with the license.
- Available โ unassigned seats.
- Users tab โ the full list of assigned users (exportable to CSV).
- (Optional) From the Users tab, click Export users to download a CSV of every Teams Premium licensee.
This path requires no scripting and is the fastest way to get the number for a one-off request.
Query subscribedSkus via Microsoft Graph
Teams Premium license usage lives on the subscribedSku resource. List all SKUs and pick out the Teams Premium entry by its skuPartNumber.
Request
GET https://graph.microsoft.com/v1.0/subscribedSkus?$select=skuId,skuPartNumber,consumedUnits,prepaidUnits
Authorization: Bearer <token>Example response (truncated)
{
"value": [
{
"skuId": "989a1621-93bc-4be0-835c-fe30171d6463",
"skuPartNumber": "Microsoft_Teams_Premium",
"consumedUnits": 42,
"prepaidUnits": { "enabled": 100, "suspended": 0, "warning": 0 }
}
]
}Interpreting the result
consumedUnitsโ this is your answer: the number of users who have Teams Premium assigned.prepaidUnits.enabledโ total seats purchased.- If no SKU matches
*TEAMS_PREMIUM*, the tenant has no Teams Premium subscription โ the count is 0.
Listing the assigned users
Once you have the Teams Premium skuId, list every user with that license:
GET https://graph.microsoft.com/v1.0/users?$filter=assignedLicenses/any(x:x/skuId eq <skuId>)&$select=id,userPrincipalName,displayName&$count=true
ConsistencyLevel: eventualNote: the $filter on assignedLicenses requires the ConsistencyLevel: eventual header and an advanced query.
Notes
- Server-side
$filteronskuPartNumberis unreliable โ filter client-side with a substring match onTEAMS_PREMIUM. subscribedSkusis a small collection (usually < 50 entries), so the full list is cheap to pull.
Count Teams Premium licenses with PowerShell
Use the Microsoft Graph PowerShell SDK. It handles auth, paging, and serialization for you.
One-liner (interactive)
Connect-MgGraph -Scopes "Organization.Read.All"
Get-MgSubscribedSku -All |
Where-Object { $_.SkuPartNumber -match 'TEAMS_PREMIUM' } |
Select-Object SkuPartNumber, SkuId,
@{n='Assigned';e={$_.ConsumedUnits}},
@{n='Purchased';e={$_.PrepaidUnits.Enabled}}What it does
- Connect-MgGraph authenticates with the minimum scope needed to read tenant SKU data.
- Get-MgSubscribedSku returns every subscription in the tenant.
- Where-Object filters for any SKU whose part number contains
TEAMS_PREMIUM(covers all known naming variants). - Select-Object projects the friendly columns: assigned seats and total purchased.
If nothing is returned
The tenant hasn't subscribed to Teams Premium. The correct answer is 0 users have it assigned. The downloadable script below handles this case explicitly.
Listing the actual users
$sku = Get-MgSubscribedSku -All | Where-Object { $_.SkuPartNumber -match 'TEAMS_PREMIUM' }
if ($sku) {
Get-MgUser -All -Property Id,UserPrincipalName,DisplayName,AssignedLicenses |
Where-Object { $_.AssignedLicenses.SkuId -contains $sku.SkuId } |
Select-Object DisplayName, UserPrincipalName
}Next steps