Cloud Flow Inventory Sync to Dataverse
Scheduled flow uses Power Automate for Admins to list all flows tenant-wide and upserts to a Dataverse table tracking owner, environment, trigger type, and last modified date.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
CF-143 is a governance automation that maintains a real-time inventory of all cloud flows in a Power Platform environment. It runs on a daily schedule, queries the Power Automate Management connector for all flows (admin scope), and upserts each flow record into a dedicated Dataverse table. This provides the data foundation for COE reporting dashboards, orphaned flow detection, and compliance auditing.
Use Case
IT administrators and Center of Excellence (COE) teams need a centralized registry of all cloud flows across the tenant. Without this, identifying orphaned flows, tracking ownership changes, and auditing trigger types requires manual inspection of each environment. This flow automates the data collection layer, enabling downstream Power BI dashboards and governance workflows.
The flow is ideal for teams that:
- IT administrators maintaining tenant-wide flow governance
- Center of Excellence (COE) teams building Power BI flow inventory dashboards
- Compliance auditors tracking ownership, trigger type, and flow state across environments
- Admins identifying orphaned flows or flows with stale last-modified dates
Flow Architecture
Recurrence Daily Sync
RecurrenceRuns once per day on a 1-day interval to refresh the Dataverse flow inventory.
Init varTargetEnvironmentName
Initialize variableInitializes a string variable from the flowlibs_TargetEnvironmentName environment variable. Holds the environment ID to scan (e.g., <your-tenant-id>).
List Flows as Admin V2
Power Automate Management - ListFlowsInEnvironment_V2Calls the Power Automate Management connector with admin scope. Returns all flows in the target environment including display name, state, owner, trigger type, and last modified date.
Apply to Each Flow
Apply to eachFor each flow returned by the admin listing: looks up the existing Dataverse record and routes to update or create.
Check Existing Record by Flow GUID
Dataverse - List rowsQueries the Cloud Flow Registries table with OData filter flowlibs_flowguid eq '{flow GUID}' to determine if a registry entry already exists.
Check If Record Exists
If conditionEvaluates length(body/value) > 0 to decide whether to update an existing row or create a new one.
- Update Existing Flow Record — Dataverse UpdateRecord refreshes the existing row with current flow name, state, trigger type, owner, and last modified date.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_TargetEnvironmentName | String | <your-tenant-id> | The Power Platform environment ID to scan for flows. Set to the GUID of the target environment after import. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Power Automate Management | shared_flowmanagement | ListFlowsInEnvironment_V2 (lists all flows in the environment via admin scope) |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords (looks up existing registry entry by flow GUID) UpdateRecord (refreshes an existing registry row) CreateRecord (inserts a new registry row) |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Deploy in a new environment
- Import the managed solution, set flowlibs_TargetEnvironmentName to the target environment's ID, authorize the Power Automate Management and Dataverse connections, then turn the flow On.
- Capture additional flow attributes
- Add attributes to the flowlibs_cloudflowregistry table and map additional properties from the ListFlowsInEnvironment_V2 response (e.g., properties/connectionReferences, properties/definitionSummary/actions).
- Multi-environment scan
- Duplicate the flow per environment, or add a parent flow that iterates across environments read from a config table, passing each environment ID to a child flow.
- Downstream reporting
- Connect Power BI to the flowlibs_cloudflowregistry table for dashboards showing flow counts by owner, trigger type distribution, and state breakdown.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Read target environment env var
Used in the Init variable action to read the environment variable value.
EXPR.02Iterate over admin-listed flows
Apply to Each input — the array of flows returned by the admin listing.
EXPR.03Current flow GUID
The flow's unique GUID identifier; used in the Dataverse filter and on create.
EXPR.04Current flow display name
Human-readable flow name written to flowlibs_name on update and create.
EXPR.05Current flow state
Started or Stopped — written to flowlibs_flowstate.
EXPR.06Last modified timestamp
ISO timestamp of the flow's last modification — written to flowlibs_lastmodifieddate.
EXPR.07Owner with Unknown fallback
Flow creator object ID; falls back to 'Unknown' when missing.
EXPR.08Primary trigger type with fallback
First trigger's type from the definition summary; falls back to 'Unknown'.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.