100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Programming

Actions and Steps

Learn how actions form the sequential building blocks of a flow's logic, from simple connector calls to control-flow constructs like conditions and loops.

Triggers & ActionsBeginner9 min readJul 10, 2026
Analogies

What an Action Does

An action is a single step in a flow that runs after the trigger fires, performing one discrete task such as sending an email, creating a SharePoint list item, calling an HTTP endpoint, or transforming data with a Compose action. Actions execute sequentially from top to bottom in the flow designer by default, and each action's outputs become available as dynamic content for every action below it, forming a chain where later steps can reference the results of earlier ones.

🏏

Cricket analogy: It's like a bowler's run-up broken into discrete steps — gather, load, delivery stride, release — each one executing in strict sequence, where the release stride depends on momentum built in the delivery stride before it.

Control-Flow Actions

Beyond simple connector actions, Power Automate provides control-flow actions that alter the linear execution path: Condition (If/Else, evaluating a Boolean expression to branch into Yes/No paths), Switch (multi-way branching on a single value), Apply to each (looping over an array, running its inner actions once per item), Do until (looping until a condition becomes true, with a configurable count/timeout limit), and Scope (grouping actions together, often used with 'configure run after' for structured error handling).

🏏

Cricket analogy: Condition branching is like a captain's decision tree after winning the toss — bat first if the pitch looks dry, bowl first if it looks green — only one path is taken based on that day's specific pitch report.

Apply to Each Example

json
{
  "type": "Foreach",
  "foreach": "@body('Get_items')?['value']",
  "actions": {
    "Send_an_email": {
      "type": "ApiConnection",
      "inputs": {
        "host": { "connectionName": "shared_office365" },
        "parameters": {
          "emailMessage/To": "@items('Apply_to_each')?['ManagerEmail']",
          "emailMessage/Subject": "Reminder: @{items('Apply_to_each')?['Title']}"
        }
      }
    }
  },
  "runAfter": { "Get_items": ["Succeeded"] }
}

Apply to each runs in parallel by default (up to 20 concurrent iterations), which speeds up execution but means iterations are not guaranteed to complete in order. If ordering matters — for example, appending rows to a log in sequence — set 'Concurrency Control' to off or to 1 in the loop's settings.

Configure Run After

Every action has a hidden 'Configure run after' setting that determines which status(es) of its preceding action(s) allow it to run: Succeeded (default), Failed, Skipped, or Timed Out. This is the mechanism behind structured error handling — you can add a Scope named 'Try', a second Scope named 'Catch' configured to run after 'Try' has Failed, and a 'Finally' scope configured to run after 'Try' has Succeeded, Failed, Skipped, or Timed Out, replicating a try/catch/finally pattern that isn't natively named that way in the designer but is fully achievable through this setting.

🏏

Cricket analogy: It's like a bowling change plan that only brings on the spinner if the pacer's over goes for more than 12 runs (a 'Failed' condition), otherwise the pacer continues — a conditional continuation based on the prior over's outcome.

If you don't explicitly configure a 'Catch' scope's run-after to include 'Failed', 'Skipped', and 'Timed Out', the entire flow run will simply be marked Failed the moment any action in the try scope fails, and your error-handling actions will never execute.

  • Actions are the discrete steps that run after a trigger, executing sequentially by default.
  • Each action's outputs become dynamic content available to every subsequent action.
  • Control-flow actions (Condition, Switch, Apply to each, Do until, Scope) change the linear execution path.
  • Apply to each runs iterations in parallel by default, up to 20 concurrent, unless concurrency control is limited.
  • Configure run after determines whether an action runs based on Succeeded, Failed, Skipped, or Timed Out status of prior actions.
  • Try/Catch/Finally error handling is built using Scopes combined with configure-run-after settings.
  • Omitting Failed/Skipped/TimedOut from a catch scope's run-after means error handling never executes.

Practice what you learned

Was this page helpful?

Topics covered

#Programming#PowerAutomateStudyNotes#ActionsAndSteps#Actions#Steps#Action#Does#StudyNotes#SkillVeris#ExamPrep