Skip to content
Browse Power Automate tutorials

When two actions do not depend on each other, putting them in separate branches lets Power Automate process them concurrently. In this example, a new SharePoint request starts two email actions: a receipt for the requester and a notification for the manager. Each branch has its own failure scope, and both branches feed a final Compose action.

Before you begin

Have access to Power Automate, a SharePoint Online list, and an Office 365 Outlook mailbox with working connections. Your SharePoint connection must be able to access the selected list; your test user must be able to create an item. Use a list with a single-person Requestor column so the trigger exposes Requestor Email, or substitute an email field from your own list.

The example uses the existing Requested Projects list on the Office Solutions Pro site. It uses a custom Project Request Intake form, which you don’t need for this tutorial. A standard list form and an appropriate email field are sufficient.

Both SharePoint and Office 365 Outlook are Standard connectors in Power Automate, so neither needs a Premium license. The free plan or a Microsoft 365 license plan gives access to standard connectors. You still need access to those services. Microsoft: licensing context.

Most of the build uses the classic designer, and step 7 checks the join in the new designer. The classic layout is a preference, not a requirement. Microsoft recommends the new designer and currently documents switching to classic with the New designer toggle. Microsoft also says the new designer will replace the classic designer once it can cover most, if not all, classic scenarios, so the classic steps below may not always be available. Microsoft: designer differences and limitations, Microsoft: classic designer replacement.

1. Create the SharePoint-triggered flow

In Power Automate, select Create → Automated cloud flow. Select Skip in Build an automated cloud flow, because you’ll add the trigger in the designer. Turn off New designer before adding actions if you want the classic layout used below.

If the flow is still empty, choose Switch without saving. Save existing work before switching designers on a flow you have already configured.

Add the SharePoint trigger When an item is created and set:

ParameterExample value
Site AddressOffice Solutions Pro, the SharePoint site in this example
List NameRequested Projects

Choose your own site and list when reproducing this. The trigger runs for a newly created item, rather than for every subsequent edit. Microsoft: SharePoint trigger.

The SharePoint trigger has the Office Solutions Pro site selected, with the pointer on Requested Projects in the list menu

2. Add the requester receipt

Select New step, search for Send an email (V2), and choose the Office 365 Outlook action.

Use the action’s menu to rename it Send an email (V2) (Requestor Email). For To, insert the trigger’s Requestor Email dynamic-content value. Configure the sample message:

InputValue
ToRequestor Email, from When an item is created
SubjectNotification of Receipt of Request
BodyTest Email

The requester and manager emails use different subjects so you can tell them apart when they arrive. The subjects are message text, not flow conditions. Use the spelling in the tables here; the example screenshots show “Notification” misspelled.

The requester email uses the Requestor Email token, a receipt subject, and Test Email as its body

3. Add the manager email as a parallel branch

Select the + on the connector between the trigger and the requester email. Choose Add a parallel branch. Add a second Send an email (V2) action in the new branch.

The plus menu above the requester email offers Add a parallel branch

Rename this action Send an email (V2) (Manager) and configure:

InputValue
ToYour manager or process-notification recipient
SubjectNotification of New Request
BodyNotification of New Request

The manager branch contains a separate email addressed to Travis for this example

In this example, both messages go to the same mailbox. “Manager” is a manually selected recipient here; no manager-lookup action is added.

Both email branches depend on the trigger, so neither needs the other email to finish. Keep dependent work sequential. Parallel execution can reduce elapsed time, but it does not promise identical start times, delivery order, or a fixed speed improvement. Microsoft: independent parallel work.

4. Add a failure scope within each branch

Each branch gets its own failure scope, so an alert tells you which branch failed. The scope contains Compose - Failed Run Link followed by an Outlook email to the process manager. If you already have a suitable scope, you can insert it from My clipboard instead of building it.

The requester branch contains a failure scope with Compose - Failed Run Link and a manager notification email

The alert in the screenshot is prebuilt, with an HTML link and flow-name expressions. The following steps build a simpler minimal handler, using Microsoft’s documented workflow functions, so your email will differ from the screenshot.

  1. Use the branch’s small + → Add an action beneath the requester email. Add Control → Scope and name it Scope - Failure Processing.
  2. Inside it, add Data Operation → Compose. Rename it Compose - Failed Run Link.
  3. In Compose’s Expression editor, enter this expression for the commercial Power Automate portal:
concat('https://make.powerautomate.com/environments/', workflow()['tags']['environmentName'], '/flows/', workflow()['name'], '/runs/', workflow()['run']['name'])

The expression combines the environment, flow, and run identifiers. Microsoft’s error-handling guidance reads the flow identifier from logicAppName in the workflow tags instead of workflow()['name']. Microsoft documents both properties, so this example keeps workflow()['name']. Microsoft: workflow properties, Microsoft: current-run links.

US government clouds use different portal addresses. Microsoft lists https://make.gov.powerautomate.us (GCC), https://make.high.powerautomate.us (GCC High), and https://make.powerautomate.appsplatform.us (DoD). If you use one of those clouds, put your portal’s address in the expression in place of https://make.powerautomate.com. Microsoft’s list gives the portal addresses only, not the path to a flow run, so confirm in step 6 that the generated link opens the run. Microsoft: US Government service URLs.

  1. Below Compose, inside the scope, add Send an email (V2). Address it to the process manager. Use a subject such as Requester email failed and include an explanation plus Outputs from this branch’s Compose - Failed Run Link in the body. This simpler message identifies the branch and includes the run URL.
  2. On the scope itself, open … → Configure run after. Select has failed, clear is successful, and select Done.

The requester failure scope is configured to run only when its preceding requester email has failed

Repeat the handler beneath the manager email. Name the second scope Scope - Failure Processing 2, and use a distinct subject such as Manager notification failed. Its scope must depend on Send an email (V2) (Manager) with only has failed selected. If you copy actions, confirm the second notification uses its own Compose output.

These failure scopes handle Failed only. Add has timed out as well if your intended policy includes timeouts. That is an optional extension, and the screenshots show has failed only. Microsoft: error handling.

5. Join both branches with a final Compose action

In the classic designer, use the large + New step button at the bottom of the entire flow. Add Compose there, rather than inside either branch. The flow-level New step button is separate from the branch-local plus button. Microsoft: options after adding parallel branches.

The final Compose in the example screenshot contains this text:

Successfully ran parallel actions

The final Compose in this example contains Successfully ran parallel actions

Use neutral wording for the all-outcome join below, such as:

Parallel branches finished

A static Compose message does not check whether both emails succeeded, so success wording can mislead when this action also runs after a failure.

Open the final Compose’s Configure run after. It must list both failure scopes. Select each scope separately and enable all four outcomes:

Predecessoris successfulhas failedis skippedhas timed out
Scope - Failure ProcessingYesYesYesYes
Scope - Failure Processing 2YesYesYesYes

The final Compose Run after dialog lists both scopes and shows all four outcomes enabled

Settings apply separately to each predecessor, so the outcomes you select for one scope do not carry over to the other. If you can’t select the second scope, select Done, reopen Configure run after, and select it there. Verify both entries before you select Done for the last time.

Why Skipped matters: If the requester email succeeds, its failure scope is skipped. The same applies to the manager branch. The final Compose must accept that skipped state to run on the normal path. It waits for both selected scopes to reach an allowed outcome; it is not a “whichever branch finishes first” action.

With these Run after settings, each email’s result should lead to the following:

Email resultIts failure scopeFinal Compose
SucceedsSkippedRuns after both branches finish
FailsRuns and tries to send the alertRuns after both branches finish, even if the alert fails
Times outSkipped, so no alert is sent, unless you added has timed out to the scopeRuns after both branches finish

Because all four outcomes are allowed, this Compose can also run after a notification or handler fails, so use a join like this for cleanup or logging, not as a success-only business gate.

An email action’s result and the run’s overall status are separate results. To confirm success, open the run and check each email action and failure scope, and don’t rely on the run’s overall status alone. Azure Logic Apps documentation says a run can be Succeeded after an action failed, if a later action handled the failure, and that a run is Failed if any branch ends in failure. Those pages are for Azure Logic Apps, so they don’t settle what this flow reports. Check what your own flow’s run shows. Azure Logic Apps: run statuses, Azure Logic Apps: branch statuses, Microsoft: Run after settings, Azure Logic Apps: multiple predecessors and statuses.

6. Save and test with a new list item

Name the flow Demo Parallel and select Save. Return to its details page and confirm it is turned on.

Demo Parallel shows both email branches, their failure scopes, and the shared final Compose

In the SharePoint list, create a new request and save it. This example uses the custom form with Project Title = Test Run, Project Sponsor (Department) = HQ, and Requestor = Travis. Use an appropriate test requester and complete your own list’s required fields; those example values are not trigger filters.

The Project Request Intake test form is filled with Test Run, HQ, and Travis as Requestor

Refresh the flow’s run history, open the new run, and wait for both branches to finish. In this example’s successful run:

  • Both original email actions have green success indicators.
  • Both failure scopes are Skipped, which is expected.
  • The shared final Compose succeeds after the branches finish.

The successful run shows two successful emails, two skipped failure scopes, and a successful final Compose

Check the recipient mailbox too. In this example, the receipt and the new-request notification both arrive in the same mailbox.

Outlook contains the requester receipt and the manager's new-request notification

This verifies the normal path only. It does not exercise a failed email, a timeout, or delivery of a failure alert. In your own test flow, validate the handler paths and confirm the run URL from Compose - Failed Run Link opens the correct run for an authorized flow owner or co-owner. A link does not itself grant access. Microsoft: owners can view run history. Static results let you mock an action’s result and see how a flow reacts when that action fails. Microsoft: static results.

7. Check the join in the new designer

To check the join here, turn the New designer toggle back on. If you built the final Compose in step 5, it already lists both scopes, so confirm the entries below rather than changing them.

Building the join directly in the new designer needs one more step. If you can’t add an action below both branches, add it beneath one branch. It then lists only that branch’s scope, with only Is successful selected. Left like that, the action doesn’t wait for the other branch, and it’s skipped whenever that scope is skipped.

Select the final action and open Settings → Run after:

Before adding the second predecessor, the new designer shows only Scope - Failure Processing and the successful outcome

This is the starting point for an action added beneath one branch. A final Compose built in step 5 shows both scopes, as in the next screenshot.

Use Select actions to include both Scope - Failure Processing and Scope - Failure Processing 2. Expand each and select all four outcomes.

In the new designer, Compose Settings lists both scopes with successful, timed out, skipped, and failed selected

The final action should now have connections from both scopes.

Save and retest after changing dependencies.

Troubleshoot the dependency, then the action

If an email fails, inspect that email’s run inputs, connection, recipient, and error details. If the final action is skipped, inspect both predecessor selections and their accepted statuses—especially Skipped on the failure scopes. Also check that the run reached those actions and was not canceled.

A missing outcome in Run after is a common cause of a skipped final action, but not the only one.

A branch can’t use outputs from the other branch, and the designer may refuse to save that kind of reference. Microsoft: FlowCheckerError. Use trigger data or earlier shared outputs in independent branches, and move work that needs both results after the join. Dragging an existing action into a parallel branch doesn’t always work. If it causes problems, try deleting the action and adding it again, then check its dynamic-content references.

The result is a flow with independent notification branches and an explicit continuation point.

Companion video

Video: Power Automate Parallel Actions Tutorial: Run Multiple Actions at the Same Time. Published June 23, 2026.

If the player is blocked on your network, open the video on YouTube.

Need help applying this to your own setup? Read about consulting.