Skip to content

Movers: Access Kept after a Department Change

The question it answers: Which users changed department in the last 30 days and are still in groups of their old department?

When people change department they collect access - they join the new team’s groups and keep the old ones. This is the ‘access creep’ auditors ask about most. The report lists every department change of the last 30 days and the groups that still tie the mover to the old department.

Where in the appEntra ID › Sign-in & Audit Investigations › Movers Keeping Old Access
WorkloadEntra ID
KindFindings list · 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).
LicenceNo extra licence needed.
Report id (API and MCP)entra.investigations.movers
ColumnKeyType
SeveritySeverityStatus
MoveCategoryText
UserSubjectLink
CheckSettingText
Old-department groupsValueText
FindingFindingText
Job title changeDetailText
ChangedWhenDate
GroupsNumberNumber

A findings list hides columns that no row fills. Severity is Critical, Serious, Warning, OK or Info; rows rated Critical, Serious or Warning need attention (Working with findings).

Licence: No extra licence needed.

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

PermissionAPIWhat it allowsNote
AuditLog.Read.AllMicrosoft GraphRead all audit log data
User.Read.AllMicrosoft GraphRead all users’ full profiles
GroupMember.Read.AllMicrosoft GraphRead all group memberships
Data sources it reads
  • GET /v1.0/auditLogs/directoryAudits?$filter=activityDisplayName eq 'Update user'
  • GET /v1.0/users/{id}/memberOf ($batch)
  • GET /v1.0/groups/{id}/members?$select=department ($batch)
GET /ir-api/v1/reports/entra.investigations.movers?size=100

An AI assistant reads it with the MCP tool get_report and the id entra.investigations.movers. The client needs the Read grant for Entra ID. See Using the API.