Skip to content

Shared Mailboxes Needing a Licence

The question it answers: Which shared mailboxes need an Exchange Online licence they do not have, and which hold one they no longer need?

Shared mailboxes are free - until they grow past 50 GB, get an archive, or are placed on litigation or retention hold. Then they need an Exchange Online licence. Unlicensed ones out of those limits are a compliance gap; licensed ones that no longer need it are money to reclaim.

Where in the appExchange Online › Mail Security Posture › Shared Mailboxes Needing a Licence
WorkloadExchange Online
KindTable · dashboard tile
DataRead from Microsoft 365 when someone first opens it, then kept for the report cache lifetime (Settings > Data & cache, 1 hour unless changed). It reads through PowerShell (Exchange Online or SharePoint Online), so the first load takes longer than a Graph report.
LicenceExchange Online.
Report id (API and MCP)exchange.posture.shared-mailbox-licensing
ColumnKeyType
MailboxDisplayNameText
AddressPrimarySmtpAddressText
StatusSeverityStatus
Needs a licence becauseNeedsLicenceBecauseText
Size (GB)SizeGbText
ArchiveArchiveText
HoldsHoldsText
Exchange licenceHasExchangeLicenceYesNo
FilterKey (API)On when the page opens
Only mailboxes with a licensing mismatchmismatchYes

Licence: Exchange Online.

Application permissions on the IntensiveReports app registration (all permissions):

PermissionAPIWhat it allowsNote
Exchange.ManageAsAppOffice 365 Exchange OnlineManage Exchange As Application
User.Read.AllMicrosoft GraphRead all users’ full profiles
User-LifeCycleInfo.Read.AllMicrosoft GraphRead all users’ lifecycle information
Organization.Read.AllMicrosoft GraphRead organization information
Data sources it reads
  • Get-EXOMailbox -RecipientTypeDetails SharedMailbox
  • Get-EXOMailboxStatistics (per shared mailbox)
  • GET /v1.0/users (assignedLicenses)
  • GET /v1.0/subscribedSkus
GET /ir-api/v1/reports/exchange.posture.shared-mailbox-licensing?size=100
GET /ir-api/v1/reports/exchange.posture.shared-mailbox-licensing?filter=mismatch

An AI assistant reads it with the MCP tool get_report and the id exchange.posture.shared-mailbox-licensing. The client needs the Read grant for Exchange Online. See Using the API.