Add-on Licences with No Product Sign-in (30 days)
The question it answers: Which users hold add-on licences such as Visio, Project, Power BI or Power Apps but did not sign in to the product in 30 days?
Add-on licences are bought per user and rarely reviewed. The Microsoft 365 usage reports do not cover Visio, Project, Power BI or Power Apps per-user plans, so Licence Usage cannot see them. This report compares who holds each add-on with who actually signed in to the product in the last 30 days.
At a glance
Section titled “At a glance”| Where in the app | Entra ID › Sign-in & Audit Investigations › Unused Add-on Licences |
| Workload | Licensing |
| Kind | Findings list · dashboard tile |
| Data | Read from Microsoft 365 when someone first opens it, then kept for the report cache lifetime (Settings > Data & cache, 1 hour unless changed). |
| Licence | Microsoft Entra ID P1 (sign-in logs). |
| Report id (API and MCP) | entra.investigations.unused-add-ons |
Columns
Section titled “Columns”| Column | Key | Type |
|---|---|---|
| Severity | Severity | Status |
| Product | Category | Text |
| User | Subject | Link |
| Check | Setting | Text |
| Licence | Value | Text |
| Finding | Finding | Text |
| UPN / department | Detail | Text |
| Date | When | Date |
| Count | Number | Number |
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).
What it needs
Section titled “What it needs”Licence: Microsoft Entra ID P1 (sign-in logs).
Application permissions on the IntensiveReports app registration (all permissions):
| Permission | API | What it allows | Note |
|---|---|---|---|
AuditLog.Read.All | Microsoft Graph | Read all audit log data | |
User.Read.All | Microsoft Graph | Read all users’ full profiles | |
Organization.Read.All | Microsoft Graph | Read organization information |
Data sources it reads
GET /v1.0/subscribedSkusGET /v1.0/users (cached, assignedLicenses)GET /beta/auditLogs/signIns?$filter=startswith(appDisplayName,'...') / startswith(resourceDisplayName,'...')
Through the API and MCP
Section titled “Through the API and MCP”GET /ir-api/v1/reports/entra.investigations.unused-add-ons?size=100An AI assistant reads it with the MCP tool get_report and the id entra.investigations.unused-add-ons. The client needs the Read grant for Licensing. See Using the API.