Power Automate cloud flows — a deep dive
The architecture, triggers, actions, and patterns of cloud flows — and the licensing rules that catch many users out.
Cloud flows in Power Automate are the bread and butter of low-code workflow automation in Microsoft 365. Beyond simple "when email arrives, post to Teams" scenarios, they support sophisticated orchestration — parallel branches, error handling, approvals, child flows — that can replace a surprising amount of custom development.
The three trigger types
- Automated — fires on an event (new email, new SharePoint item, file upload, message in Teams). The most common type.
- Instant — triggered manually by a button (in Power Automate mobile, from Teams, from a Power App).
- Scheduled — runs on a timer (every hour, every Tuesday at 09:00).
Each cloud flow has one trigger.
Actions and connectors
After the trigger come actions: connector calls that read, write, or transform data. Microsoft ships hundreds of connectors for Microsoft 365 services, Azure, Dynamics 365, SAP, Salesforce, ServiceNow, Twilio, Stripe, and so on. Custom connectors let you call any REST API.
Connectors are split into standard (in-suite, included with Microsoft 365) and premium (Dataverse, SQL, HTTP, custom). Premium requires Power Automate or Power Apps premium licensing.
Control flow
Cloud flows support the usual control structures:
- Conditions with if/then branches.
- Switch on a value.
- Apply to each loops.
- Do until loops with explicit exit conditions.
- Parallel branches for independent steps.
- Scope blocks for grouping and error handling.
- Run after configuration on any action — run only if the previous failed, succeeded, was skipped, or timed out.
Error handling is where many flows fall down. Configure Run after on key actions so failure paths log to a SharePoint list, post to Teams, or escalate to a human.
Child flows
A child flow is a flow that another flow can call. They live in solutions (a packaging unit), accept parameters, and return values. Use them to factor out reusable patterns — "send a notification," "create a ticket" — once and call them everywhere.
Approvals
The Approvals action triggers an approval request that the recipient can act on from Outlook, Teams, or the Power Automate mobile app. Approvals can be sequential or parallel, with multiple approvers and configurable response options. Built on a shared Dataverse table behind the scenes.
Licensing gotchas
The licensing model has changed several times:
- Standard connectors in-suite are included with Microsoft 365, with a fairly generous per-user run allowance.
- Premium connectors (SQL, HTTP, on-premises gateway, Dataverse) require Power Automate Premium licensing.
- Per-flow licensing is available for flows shared by many users where buying per-user doesn't fit.
- Pay-as-you-go through an Azure subscription is increasingly the pragmatic answer.
The most common surprise: a flow that uses a premium connector consumes premium runs from anyone who invokes it — and they all need licensing.
Patterns that work
- Use scope blocks for error handling.
- Send a Teams adaptive card for approvals instead of email — better UX, richer responses.
- For long-running flows, prefer state in Dataverse over flow variables.
- For high-volume scenarios, child flows with parallel runs scale better.
- Always log to a known place so flow failures are visible.
Cloud flows are how a tenant's Microsoft 365 quietly becomes much more automated. Treat them as code: version-controlled in solutions, tested, monitored.