Inventory Power Automate Flows with SharePoint, Connectors, and Owners
If you manage Microsoft Power Platform environments across your organization, getting a clear view of your Power Automate flows can be a challenge. Who owns them? Which connectors are in use? Are flows connected to SharePoint lists or document libraries?
This PowerShell script helps you generate a complete inventory of flows across all environments, including:
- The environment ID
- The Flow Name
- The owner of each flow
- The Type of item line :
- Connector used by the flow
- Resource depending on one of the connectors
- The connectors used (like SharePoint, Outlook, etc.)
- Referenced resource depending on the connector : SharePoint sites, lists, and files ID (when applies) - this will produce additional line(s) if data is available
- The flow status (enabled/disabled)
- The creation date of each flow
The result is exported into a CSV file with a timestamped filename for easy tracking and archiving.

How the Script Works
1. Module Verification
The script first checks for required PowerShell modules:
- Microsoft.PowerApps.Administration.PowerShell
- Microsoft.Graph.Users
If they're missing, it installs them automatically.
2. Interactive Login
The user is prompted to log into:
- Power Platform Admin Center (Add-PowerAppsAccount)
- Microsoft Graph API (Connect-MgGraph with User.Read.All scope)
3. Flow Extraction
The script retrieves all flows using Get-AdminFlow and loops through them. For each flow:
- It collects the environment name, creation date, and status
- It tries to resolve the user's display name based on the used id from Microsoft Graph.
Value is set to Unknown User if the user is not found. - It extracts the connectors in use
- It looks for referenced SharePoint resources, keeping unique values only and filtering out placeholders like [DYNAMIC_VALUE]
4. Progress Feedback
During execution, the script displays a real-time percentage to track the progress of the export.

5. CSV Export
All results are exported to a CSV file named like FlowInventory_YYYY-MM-DD.csv in the current directory.
The Script
Below is the full PowerShell script you can use or adapt:
# Check and install required modules if missing
$requiredModules = @(
"Microsoft.PowerApps.Administration.PowerShell",
"Microsoft.Graph.Users"
)
foreach ($module in $requiredModules) {
if (-not (Get-Module -ListAvailable -Name $module)) {
Write-Host "Installing required module: $module" -ForegroundColor Yellow
Install-Module -Name $module -Scope CurrentUser -Force -AllowClobber
}
}
Import-Module Microsoft.PowerApps.Administration.PowerShell
Import-Module Microsoft.Graph.Users
# Login
Write-Host "Connecting to Power Platform..." -ForegroundColor Cyan
Add-PowerAppsAccount
Write-Host "Connecting to Microsoft Graph..." -ForegroundColor Cyan
Connect-MgGraph -Scopes "User.Read.All"
$Results = @()
$Flows = Get-AdminFlow
$totalFlows = $Flows.Count
$flowIndex = 0
foreach ($Flow in $Flows) {
$flowIndex++
$progressPercent = [math]::Round(($flowIndex / $totalFlows) * 100)
Write-Host "Processing flow $flowIndex / $totalFlows ($progressPercent%) - $($Flow.DisplayName)" -ForegroundColor DarkGray
$EnvironmentId = $Flow.EnvironmentName
$FlowName = $Flow.DisplayName
$CreatedOn = $Flow.CreatedTime
$Status = if ($Flow.Enabled -eq $true) { "Enabled" } else { "Disabled" }
try {
$FlowInfo = Get-AdminFlow -FlowName $Flow.FlowName -EnvironmentName $EnvironmentId
} catch {
Write-Host "Failed to retrieve flow details: $FlowName" -ForegroundColor Red
continue
}
try {
$user = Get-MgUser -UserId $FlowInfo.CreatedBy.objectId -ErrorAction Stop
$FlowOwner = $user.DisplayName
} catch {
$FlowOwner = "Unknown User"
}
$ConnectorDisplayNames = $FlowInfo.Internal.properties.connectionReferences.PSOBJECT.Properties.value.displayname
foreach ($dspname in $ConnectorDisplayNames) {
$Results += [pscustomobject]@{
EnvironmentId = $EnvironmentId
FlowName = $FlowName
Type = "Connector"
Owner = $FlowOwner
Scope = "Connector"
Details = $dspname
CreatedOn = $CreatedOn
Status = $Status
}
}
$ConnectorResourceList = $FlowInfo.Internal.properties.referencedResources.resource
foreach ($resource in $ConnectorResourceList) {
if ($resource.site) {
$Results += [pscustomobject]@{
EnvironmentId = $EnvironmentId
FlowName = $FlowName
Type = "Resource"
Owner = $FlowOwner
Scope = "site"
Details = $resource.site
CreatedOn = $CreatedOn
Status = $Status
}
}
if ($resource.list) {
$Results += [pscustomobject]@{
EnvironmentId = $EnvironmentId
FlowName = $FlowName
Type = "Resource"
Owner = $FlowOwner
Scope = "list"
Details = $resource.list
CreatedOn = $CreatedOn
Status = $Status
}
}
if ($resource.fileid) {
$Results += [pscustomobject]@{
EnvironmentId = $EnvironmentId
FlowName = $FlowName
Type = "Resource"
Owner = $FlowOwner
Scope = "id"
Details = $resource.fileid
CreatedOn = $CreatedOn
Status = $Status
}
}
}
}
# Export with date-stamped filename
$DateStamp = Get-Date -Format "yyyy-MM-dd"
$ExportPath = ".\FlowInventory_$DateStamp.csv"
$Results | Export-Csv -Path $ExportPath -NoTypeInformation -Encoding UTF8BOM -Delimiter ";"
Write-Host "Export completed: $ExportPath" -ForegroundColor Green
Next Steps
You can now import this CSV into Excel or Power BI to:
- Track unused or orphaned flows
- Identify flows using deprecated connectors
- Audit SharePoint dependencies
- Group flows by owner or environment