Skip to content

Teams App Inventory

The question it answers: Which apps are installed in which teams, which were sideloaded and which third-party apps hold team permissions?

Every app added to a team can read that team’s messages, files or members through the permissions it requested. Sideloaded apps bypassed the org catalogue entirely; third-party store apps with resource-specific permissions can read team data without a tenant-wide admin consent.

Where in the appTenant › Teams App Inventory
WorkloadTeams and collaboration
KindTable · dashboard tile
DataA scan: it runs only when someone presses Run scan (or calls the API’s scan action) and can take minutes. The last result is kept until the next scan.
LicenceMicrosoft Teams.
Report id (API and MCP)tenant.teams.apps
ColumnKeyType
AppNameText
SourceSourceStatus
Team permissions (RSC)PermissionsText
TeamsTeamCountText
Installed inTeamsText
VersionVersionsText
App idAppIdText
FilterKey (API)On when the page opens
Hide apps that look like Microsoft’shide-microsoftYes

Licence: Microsoft Teams.

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

PermissionAPIWhat it allowsNote
Group.Read.AllMicrosoft GraphRead all groups
Organization.Read.AllMicrosoft GraphRead organization information
TeamsAppInstallation.ReadForTeam.AllMicrosoft GraphRead installed Teams apps for all teams
Channel.ReadBasic.AllMicrosoft GraphRead the names and descriptions of all channels
ChannelMember.Read.AllMicrosoft GraphRead the members of all channels
Data sources it reads
  • GET /v1.0/groups?$filter=resourceProvisioningOptions/Any(x:x eq 'Team')
  • GET /v1.0/teams/{id}/installedApps?$expand=teamsApp,teamsAppDefinition
  • GET /v1.0/teams/{id}/channels?$filter=membershipType eq 'shared'
  • GET /v1.0/teams/{id}/channels/{id}/sharedWithTeams
  • GET /v1.0/teams/{id}/channels/{id}/members
GET /ir-api/v1/reports/tenant.teams.apps?size=100
GET /ir-api/v1/reports/tenant.teams.apps?filter=hide-microsoft
POST /ir-api/v1/reports/tenant.teams.apps/scan

An AI assistant reads it with the MCP tool get_report and the id tenant.teams.apps. The client needs the Run scan grant for Teams and collaboration. See Using the API.