Trigger Types and Flow Categories
Power Automate organizes flows into three cloud flow categories plus desktop flows: automated cloud flows fire on an external event through a trigger like 'When an item is created' or 'When a new email arrives'; instant cloud flows fire on manual user action such as a mobile button press or 'For a selected item' from a SharePoint list; scheduled cloud flows fire on a recurrence pattern defined by frequency and interval; and desktop flows automate legacy desktop or web applications via UI automation using Power Automate Desktop, typically invoked from a cloud flow through the 'Run a flow built with Power Automate Desktop' action. Knowing which category a requirement falls into determines which trigger to search for first in the designer, since searching generic terms like 'SharePoint' returns dozens of triggers spanning all three categories.
Cricket analogy: A match is classified as a Test, ODI, or T20 before a single ball is bowled, since the format dictates the rules that follow; identifying whether a flow is automated, instant, or scheduled upfront dictates which trigger to search for.
Common Expressions and Functions
The expression language borrowed from Azure Logic Apps covers most day-to-day needs with a small set of functions: triggerBody() and triggerOutputs() reference data from the trigger; outputs('ActionName') references a prior action's full output, often combined with the safe-navigation operator like outputs('Get_item')?['body/Title']; utcNow() and addDays(utcNow(), -7, 'yyyy-MM-dd') handle dates; and the flow-control functions if(), and(), or(), and coalesce() build inline logic without needing a separate Condition action for simple cases. The distinction between formatDateTime() for converting a date to a display string and convertTimeZone() for shifting a UTC date into a specific time zone like 'India Standard Time' trips up most beginners, since forgetting convertTimeZone() means every timestamp displayed to users stays in UTC regardless of their locale.
Cricket analogy: A scorer converts raw ball-by-ball data into both a readable scorecard and a locally broadcast time for the next session, mirroring how formatDateTime() creates a display string while convertTimeZone() adjusts it to the viewer's zone.
// Common Power Automate expressions cheat sheet
triggerBody()?['Title'] // field from the trigger
outputs('Get_item')?['body/Status'] // field from a named action's output
coalesce(triggerBody()?['Manager'], 'unassigned') // fallback if null
addDays(utcNow(), -7, 'yyyy-MM-dd') // date 7 days ago, formatted
convertTimeZone(utcNow(), 'UTC', 'India Standard Time', 'g') // localize a timestamp
if(equals(triggerBody()?['Amount'], null), 0, triggerBody()?['Amount']) // null-safe number
length(body('Get_items')?['value']) // count of items returnedFrequently Used Actions by Task
For approvals, 'Start and wait for an approval' and 'Post adaptive card and wait for a response' cover the vast majority of human-in-the-loop scenarios; for looping over data, 'Apply to each' iterates a JSON array, and adding a Filter Array action beforehand instead of nesting a Condition inside the loop keeps the flow both faster and cheaper on API calls; for calling external services, the HTTP action (premium) covers any REST API not represented by a dedicated connector, while 'HTTP with Azure AD' handles calls requiring service principal authentication against Azure resources. For error visibility, 'Post message in a chat or channel' to a dedicated 'Flow Alerts' Teams channel from within a Catch scope is the fastest way to get actionable, human-visible failure notifications without building a separate logging solution.
Cricket analogy: A captain filters the bowling attack down to specialists suited for the pitch conditions before the match starts rather than deciding over by over, mirroring how a Filter Array action trims a dataset before looping instead of filtering inside each iteration.
Filter Array reduces the number of iterations Apply to each has to run, which directly reduces the number of API calls the loop's inner actions make — this is not just a style preference, it measurably lowers the chance of hitting a connector's throttling limit on large datasets.
The HTTP action, HTTP with Azure AD, and several other high-value actions are premium and require a standalone or per-app Power Automate license — using them in a flow built under a seeded Microsoft 365 license will block the flow from running or force a licensing upgrade prompt.
- Flows fall into three cloud categories — automated, instant, scheduled — plus UI-based desktop flows.
- triggerBody(), outputs('ActionName'), and the safe-navigation operator ?[ ] cover most data-referencing needs.
- Use formatDateTime() for display formatting and convertTimeZone() for localizing a UTC value to a user's time zone.
- Filter Array before Apply to each is faster and cheaper than filtering with a Condition inside the loop.
- 'Start and wait for an approval' and 'Post adaptive card and wait for a response' cover most human-in-the-loop scenarios.
- HTTP and HTTP with Azure AD are premium actions requiring a standalone or per-app license.
- Route Catch-scope failures to a dedicated Teams channel for fast, human-visible error notification.
Practice what you learned
1. Which expression correctly localizes a UTC timestamp to a specific time zone?
2. Why is it more efficient to use Filter Array before an Apply to each loop rather than a Condition inside it?
3. Which flow trigger category fires on a manual user action like a mobile button press?
4. What license tier is required to use the HTTP action in a Power Automate flow?
5. What is the fastest low-effort way to get human-visible notification of a flow failure without building a full logging pipeline?
Was this page helpful?
You May Also Like
Power Automate Best Practices
Field-tested guidelines for building Power Automate flows that stay maintainable, resilient to failure, and easy to govern once they hit production.
Power Automate vs Logic Apps
How Power Automate and Azure Logic Apps differ in licensing, target audience, and technical capability despite sharing the same workflow engine underneath.
Building an Approval Workflow
A step-by-step walkthrough of building a multi-stage approval flow in Power Automate, from the trigger through the Approvals connector to the final outcome handling.
Related Reading
Related Study Notes in Programming
Browse all study notesApache Spark Study Notes
Programming · 30 topics
ProgrammingApache Flink Study Notes
Programming · 30 topics
ProgrammingHadoop Study Notes
Programming · 30 topics
ProgrammingSnowflake Study Notes
Programming · 30 topics
ProgrammingApache Airflow Study Notes
Programming · 30 topics
Programmingdbt (Data Build Tool) Study Notes
Programming · 30 topics