Skip to content

Microsoft 365

Reads the licenses of all customer tenants from Microsoft Graph via GDAP (granular delegated admin privileges): what is booked ("Verkauft" = sold) and what is assigned to users ("Zugewiesen" = assigned).

Prerequisites

  • A multi-tenant app registration in the partner tenant with the delegated Graph permissions Organization.Read.All and DelegatedAdminRelationship.Read.All.
  • A service account that is a member of the GDAP security group (the "Directory Readers" role is sufficient) — it reads all customer tenants on your behalf.

Credentials (gear icon)

FieldMeaning
App ID (Client ID)the multi-tenant app registration
Client Secretsecret of the app
Partner tenant IDGUID or partner.onmicrosoft.com
Refresh tokendo not fill in by hand — set via "Connect service account" in the view and renewed automatically

Setup: fill in the gear dialog (without refresh token) → in the view, "Connect service account" → Microsoft login with the service account → done.

Metrics

Two rows per customer and product:

  • Verkauft › <Produkt> — licenses booked in the tenant (subscribedSkus)
  • Zugewiesen › <Produkt> — licenses assigned to users

Free/bundled SKUs (e.g. Flow Free) are filtered out. The dashboard tile counts the assigned licenses.

ALSO comparison & product mappings

The view contains two additional tabs:

  • ALSO comparison: sets purchases (ALSO) against the tenant inventory per customer — the join runs on stable IDs (tenant ID, skuId), name matching only as a fallback. Details: product mappings.
  • Product mappings: merge list for diverging product names.

Specifics

  • Tenant IDs are stable → automatic rename detection.
  • Tenants without a readable display name initially appear with their GUID and are upgraded automatically as soon as the first real name arrives.