Skip to content

Contractors & Externals without an End Date

The question it answers: Which contractor and external member accounts have no end date, expiring access or sponsor?

Contractors and vendor staff often get normal member accounts that nothing ever ends: no leave date, no expiring access package, no sponsor who would notice. When the contract ends, the account stays - with its access.

Where in the appEntra ID › Identity Governance & Lifecycle › Contractors without End Date
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).
LicenceNone; access package expiry needs Entra ID Governance.
Report id (API and MCP)entra.governance.contractors
ColumnKeyType
SeveritySeverityStatus
Employee typeCategoryText
AccountSubjectLink
CheckSettingText
CompanyValueText
FindingFindingText
ControlsDetailText
EndsWhenDate
CountNumberNumber

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: None; access package expiry needs Entra ID Governance.

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

PermissionAPIWhat it allowsNote
User.Read.AllMicrosoft GraphRead all users’ full profiles
User-LifeCycleInfo.Read.AllMicrosoft GraphRead all users’ lifecycle information
EntitlementManagement.Read.AllMicrosoft GraphRead all entitlement management resourcesoptional
Data sources it reads
  • GET /v1.0/users?$select=employeeType,companyName,employeeLeaveDateTime
  • GET /v1.0/users/{id}/sponsors ($batch)
  • GET /v1.0/identityGovernance/entitlementManagement/assignments
GET /ir-api/v1/reports/entra.governance.contractors?size=100

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