Dynamic Group Rule Health
The question it answers: Which dynamic groups are paused or have a membership rule that matches nobody?
Dynamic groups drive licensing, app access and Conditional Access. A paused rule freezes membership - joiners get nothing, leavers keep everything - and a rule that matches nobody usually means an attribute was renamed or is not populated.
At a glance
Section titled “At a glance”| Where in the app | Entra ID › Identity Hygiene › Dynamic Group Rule Health |
| Workload | Entra ID |
| Kind | Table |
| Data | Built from the tenant data IntensiveReports keeps in memory and refreshes in the background, so it opens at once. |
| Licence | Microsoft Entra ID P1 (dynamic groups). |
| Report id (API and MCP) | entra.groups.dynamic-group-health |
Columns
Section titled “Columns”| Column | Key | Type |
|---|---|---|
| Group | DisplayName | Link |
| Type | Secondary | Text |
| Processing | Category | Status |
| Finding | Finding | Text |
| Members | Value | Text |
| Rule | Detail | Text |
Filters
Section titled “Filters”| Filter | Key (API) | On when the page opens |
|---|---|---|
| Only groups with a finding | findings | Yes |
What it needs
Section titled “What it needs”Licence: Microsoft Entra ID P1 (dynamic groups).
Application permissions on the IntensiveReports app registration (all permissions):
| Permission | API | What it allows | Note |
|---|---|---|---|
Group.Read.All | Microsoft Graph | Read all groups |
Data sources it reads
GET /v1.0/groups?$filter=groupTypes/any(c:c eq 'DynamicMembership')
Through the API and MCP
Section titled “Through the API and MCP”GET /ir-api/v1/reports/entra.groups.dynamic-group-health?size=100GET /ir-api/v1/reports/entra.groups.dynamic-group-health?filter=findingsAn AI assistant reads it with the MCP tool get_report and the id entra.groups.dynamic-group-health. The client needs the Read grant for Entra ID. See Using the API.