Quick Answer: To get a complete list of all installed apps on Intune devices, use the Intune Admin Center (export from Apps > Monitor > Discovered apps) or automate the query with PowerShell using Microsoft Graph API (GET https://graph.microsoft.com/v1.0/deviceManagement/managedDevices?$expand=detectedApps with DeviceManagementManagedDevices.Read.All permissions) to generate a consolidated CSV across your entire fleet.
Learn how to pull a complete list of installed apps from Intune step by step, with Intune console, PowerShell and Graph API.
Prerequisites
Before you start, make sure you have:
An Intune Administrator account with access to Apps > Monitor > Discovered Apps Microsoft Learn.
PowerShell 7+ and the Microsoft.Graph.Intune module (for automation) Microsoft Learn.
(Optional) An Azure AD app registration with the right Graph permissions if you plan to call the Graph API directly Microsoft Learn.
Method 1: Quick CSV Export (Intune Portal)
Sign in to the Microsoft Endpoint Manager admin center.
Navigate to Apps > Monitor > Discovered apps.

Click Export to download a .csv report containing:
Application name
Platform
Version
Publisher
Device count
This produces a clean one-click inventory, perfect for quick audits. Also, if you need the result for specific application, just search with App name.
Method 2: Automate with PowerShell
Automating your export means you’ll never click the portal again. This script will connect to Microsoft Intune using Graph API and fetch all the installed application on all devices and will export to C: drive.
<#
.SYNOPSIS
Export all installed applications across Intune-managed devices via Microsoft Graph API.
.DESCRIPTION
Queries Microsoft Graph /deviceManagement/managedDevices to enumerate detected apps per device,
extracts device names, app names, versions, and bundle IDs, and exports everything into a structured CSV.
.NOTES
Requires Microsoft Graph Application Permission: DeviceManagementManagedDevices.Read.All
#>
[CmdletBinding()]
param(
[string]$TenantID = "YOUR_TENANT_ID",
[string]$ClientID = "YOUR_CLIENT_ID",
[string]$ClientSecret = "YOUR_CLIENT_SECRET",
[string]$OutputCsv = "$env:USERPROFILE\Desktop\Intune_Installed_Apps.csv",
[int]$RequestTimeout = 120
)
# Start local log transcript
$LogPath = "$env:ProgramData\TechEUC\Logs"
if (-not (Test-Path -Path $LogPath)) {
New-Item -Path $LogPath -ItemType Directory -Force | Out-Null
}
$LogFilePath = Join-Path -Path $LogPath -ChildPath "IntuneAppInventory.log"
Start-Transcript -Path $LogFilePath -Append -Force
try {
# Get Access Token via OAuth 2.0
Write-Host "[INFO] Authenticating to Microsoft Graph API..." -ForegroundColor Cyan
$TokenUrl = "https://login.microsoftonline.com/$TenantID/oauth2/v2.0/token"
$TokenBody = @{
Client_Id = $ClientID
Scope = "https://graph.microsoft.com/.default"
Client_Secret = $ClientSecret
Grant_Type = "client_credentials"
}
$TokenResponse = Invoke-RestMethod -Uri $TokenUrl -Method Post -Body $TokenBody -TimeoutSec $RequestTimeout
$AccessToken = $TokenResponse.access_token
# Define Headers for Graph API
$Headers = @{
Authorization = "Bearer $AccessToken"
"Content-Type" = "application/json"
}
# Query Microsoft Graph API for Managed Devices with detected apps
Write-Host "[INFO] Querying Intune managed devices and installed apps..." -ForegroundColor Cyan
$BaseUrl = "https://graph.microsoft.com/v1.0/deviceManagement/managedDevices?`$expand=detectedApps(`$select=displayName,version,sizeInByte)&`$select=id,deviceName,userPrincipalName,operatingSystem,osVersion"
$AllApps = [System.Collections.Generic.List[PSObject]]::new()
$NextLink = $BaseUrl
while ($NextLink) {
$Response = Invoke-RestMethod -Uri $NextLink -Headers $Headers -Method Get -TimeoutSec $RequestTimeout
foreach ($Device in $Response.value) {
if ($Device.detectedApps) {
foreach ($App in $Device.detectedApps) {
$AllApps.Add([PSCustomObject]@{
DeviceName = $Device.deviceName
UserPrincipalName = $Device.userPrincipalName
OperatingSystem = $Device.operatingSystem
OSVersion = $Device.osVersion
ApplicationName = $App.displayName
ApplicationVersion= $App.version
AppSizeBytes = $App.sizeInByte
})
}
}
}
$NextLink = $Response.'@odata.nextLink'
}
# Export to CSV
if ($AllApps.Count -gt 0) {
$AllApps | Export-Csv -Path $OutputCsv -NoTypeInformation -Force
Write-Host "[SUCCESS] Exported $($AllApps.Count) application records to $OutputCsv" -ForegroundColor Green
} else {
Write-Warning "[WARN] No installed applications discovered on managed devices."
}
}
catch {
Write-Error "[FATAL] Script execution failed: $($_.Exception.Message)"
}
finally {
Stop-Transcript
}After this Powershell Graph API script is ran, All the applications installed on devices will be exported to the CSV, you can use this script in Power BI too if you need the live dashboard. You can run this script as Windows task scheduler job to get daily email to your inbox.

Next Steps in Production
Well, that’s your complete toolkit to get all installed apps on devices from Intune, portal, PowerShell, or Graph API. Here’s what I think: pick the method that fits your workflow, automate it, and never miss a single app again.
For more hands-on Intune deployment and troubleshooting playbooks, explore our guides on Deploying Win32 Apps with .IntuneWin Packaging and Troubleshooting Slow Intune App Deployments.
For more hands-on Intune guides, swing by techeuc.com and subscribe for updates. If you need any help or facing any issues, Please reach out to me or contact me.