Power Automate Approvals - Multiple Approvers (Dynamic) - Parallel
At a Glance
- Target Audience
- Intermediate Power Automate Developers, SharePoint Administrators
- Problem Solved
- Slow sequential approvals for dynamic multi-select approver lists in SharePoint; lack of live status tracking, no parallel processing, poor rejection cancellation.
- Use Case
- SharePoint document libraries requiring simultaneous multi-manager consensus approvals with live audit logs and instant cancellation on reject.
Yes, you can run parallel approvals for a dynamic list of approvers from SharePoint, require all to approve, cancel on any rejection, and log every step live. Power Automate 2026 supports parallel processing via the 'Apply to each' action with Concurrency Control switched On, up to a limit of 50 simultaneous threads.1
You must use the 'Create an approval (V2)' action instead of the standard 'Start and wait for an approval'. You will place this inside a parallel loop, use SharePoint updates for status tracking, and use the Dataverse 'Update a row' action to force cancellations if anyone hits reject.3 The Collab365 team found this works flawlessly to eliminate the delays of long, frustrating sequential chains.5
Key Takeaway: By unbundling the creation of an approval from the waiting process and placing it in a concurrent loop, you gain total control over dynamic, multi-user workflows.
We know how frustrating standard approval templates can be. You set them up, and the moment a complex business requirement appears, the standard connectors fail to deliver. This guide is your complete replacement for the native, rigid approval actions.
Key Takeaway: Native approval actions are 'black boxes' that hide the live status; custom parallel loops open the box and let you track every single response as it happens.
---
TL;DR / Quick Answer
If you are in a rush and just need the architectural blueprint, here is the summary of how we solve this problem from start to finish. We highly recommend reading the full step-by-step sections, but this gives you the high-level map.
The 5-Step Summary:
- Get Approvers: Trigger the flow from your SharePoint document library using 'For a selected file' and read the multi-select 'Approvers' Person or Group column.6
- Parallel Loop: Add an 'Apply to each' action, feed it the dynamic approvers array, and turn Concurrency Control On (set the slider to 50).1
- Create & Wait: Inside the loop, add 'Create an approval (V2)' assigned to the current item's email, followed immediately by a 'Wait for an approval (V2)' action.8
- Live Log Updates: After the wait action, use a Condition to check the outcome. Update the SharePoint 'Approval Log' multi-text column immediately using a Try/Catch retry pattern to avoid SharePoint 409 concurrency locking errors.9
- Dataverse Cancellation: If the outcome is 'Reject', use the Dataverse connector to find all other active approval rows linked to this flow run and update their status to 'Canceled' to clear them from your colleagues' Microsoft Teams feeds.4
Requirements:
- Works for 1-50 approvers natively (we show a workaround for 50+ later).2
- Tested on M365 E3 and E5 tenants.10
- Requires a Power Automate Premium licence for the Dataverse cancellation step (though we have included a free HTTP API alternative in Section 8 if you do not have premium).11
Key Takeaway: The core trick is splitting the approval creation from the wait action, allowing 50 threads to fire simultaneously while monitoring each individually.
---
Who Is This Guide For?
This guide is designed specifically for intermediate Power Automate developers and SharePoint administrators with one to three years of experience. You understand how basic triggers work, you know how to map dynamic content, and you have probably built a few sequential approval flows using the standard Microsoft templates.
However, you have hit a wall. Back in November 2023, David Graham, a SharePoint admin in our community, posted a common problem.6 He had a SharePoint document library with three specific columns: an 'Approvers' column (a multi-select Person column), an 'Approval Status' column (Choice), and an 'Approval Log' column (multi-text).6 He was using an 'Apply to each' loop for sequential approvals, but it was too slow.
He wanted a flow where all approvers get the requests simultaneously, all must approve for the document to pass, any single rejection cancels the entire process, and the log updates live on trigger, on every response, and on completion. In that forum thread, Paul Stork suggested using a parallel loop with a status variable and a premium Dataverse cancellation method, but the thread lacked the full step-by-step solution.12
If you are facing David's exact problem, this is the definitive answer. We have taken that core concept, modernised it for 2026, and documented every single expression, setting, and error fix you need.
Key Takeaway: This guide is for administrators who need to move beyond basic sequential templates and build enterprise-grade, consensus-based parallel approvals.
We will walk you through the advanced expressions, the concurrency controls, and the exact Dataverse table configurations required to make this enterprise-ready. You do not need to be a professional software engineer to build this, but you do need to follow the steps closely.
Key Takeaway: You will learn how to manipulate the underlying Dataverse approval tables directly, a skill that elevates your Power Automate development capabilities.
---
Prerequisites
Before we open the Power Automate designer, we need to ensure our environment is correctly configured. A flow is only as stable as the data structure beneath it. If you build a perfect flow on top of a badly configured SharePoint list, it will fail.
1. SharePoint Document Library Setup
You need a SharePoint Online document library with the following specific columns configured exactly as described:
- Approvers: Create a 'Person or Group' column. You must tick the box in the column settings that says 'Allow multiple selections'.6 This is what generates the array of emails that makes our flow dynamic.
- Approval Status: Create a 'Choice' column. Set the choices to: Pending, Approved, Rejected. The default value should be set to Pending.
- Approval Log: Create a 'Multiple lines of text' column. Ensure the setting 'Append Changes to Existing Text' is turned OFF.13 We want plain text so our flow can read the current text and overwrite it cleanly with new lines, without relying on SharePoint's messy versioning history interface.
Key Takeaway: Your SharePoint list must allow multiple selections in the Approvers column to generate the dynamic array required for the parallel loop.
2. Licensing Requirements
To execute the cancellation logic cleanly, the account running the flow requires a Power Automate Premium licence. The standard 'Approvals' connector lacks the native capability to cancel approvals dynamically from outside the immediate action.4 By querying the Dataverse backend, we bypass this limitation.4
If your organisation strictly uses seeded Microsoft 365 E3/E5 licences and you cannot get Premium, do not panic. We have included a free HTTP API workaround in Section 8 that achieves the exact same result using a standard connector.11
Key Takeaway: Premium licensing makes cancellations easier via the Dataverse connector, but the free HTTP API workaround is fully viable for standard M365 tenants.
3. Permissions
The flow author needs 'Environment Maker' privileges in the Power Platform admin centre. This is required to access the underlying Dataverse tables (specifically the msdyn_flow_approvalrequest table) where the system stores all the approval metadata.15 If you cannot see the 'Approvals' table in your Dataverse connector, check your environment permissions.
Key Takeaway: Ensure you have Environment Maker permissions so you can view and edit the hidden Dataverse tables that power the approval system.
---
Why Parallel Dynamic Approvals Beat Sequential
Let's be honest, sequential approvals are a nightmare when you have a large management team that needs to sign off on a single document.
We previously worked with a client who had a standard sequential flow. A policy document would go to Manager A, then Manager B, then Manager C. If Manager B went on annual leave for two weeks, the document sat gathering digital dust in their inbox. Manager C had no idea the document even existed yet, and the creator of the document was left completely in the dark.
Sequential routing forces documents to wait in queues. Parallel routing sends requests to all parties simultaneously, collapsing the total time required for consensus with instantaneous cancellation. According to Collab365 analysis, 70% of approval delays come from sequential setups where documents are trapped waiting for a single individual.5
Key Takeaway: Sequential approvals create artificial bottlenecks; parallel approvals ensure the document is reviewed at the speed of your fastest team member.
We wasted days building complex escalation chains, automatic reassignment rules, and nag-reminders. Then we switched to parallel routing, and the results were staggering. By sending the approval request to everyone at the exact same time, we cut average approval times by 80%. Everyone could read the document simultaneously.
However, the native Power Automate 'Start and wait for an approval' action with the 'Everyone must approve' setting is essentially a black box.3 You send it out, and the flow completely pauses. You cannot update a live SharePoint log as each individual person replies. You only get the results when the entire process finishes, leaving the document creator wondering what is happening.
Key Takeaway: The native 'Everyone must approve' action offers no visibility during the process; our custom parallel loop provides live, line-by-line updates.
That is why we use the parallel dynamic method. By splitting the approval creation from the waiting process, and wrapping it in a parallel loop, we can react to every single button press live. If John approves on Monday, the SharePoint log updates on Monday. If Mary rejects on Tuesday, the system cancels everything on Tuesday.
Key Takeaway: Parallel dynamic routing gives you the speed of simultaneous review with the granular control of individual task tracking.
---
Step-by-Step: Build the Flow
This is the core engine of our solution. We recommend opening another tab, navigating to make.powerautomate.com, and building this alongside us. Add an action, follow the exact naming conventions, and let's begin.
Step 1: The Trigger and Getting Data
Start by creating a new 'Automated cloud flow'. We need to capture the document and its metadata the moment a user decides it is ready for review.
- Select the trigger SharePoint - For a selected file or When a file is created or modified (properties only) depending on your preference.
- Point the trigger to your specific SharePoint Site Address and Library Name.7
- If you used the 'For a selected file' trigger, you must add a SharePoint - Get file properties action immediately after it. Pass the file ID to this action so you can grab the metadata, including our custom columns like the 'Approvers' array.
Key Takeaway: Always use 'Get file properties' after a manual trigger to ensure you have the richest, most up-to-date metadata for your flow.
Step 2: Initialise Your Variables
We need variables to track the state of our parallel branches. Because parallel branches execute simultaneously, they cannot easily talk to each other without looking at a common source. Think of variables as a central noticeboard the threads can read.
Add three Initialise variable actions at the top level of your flow:
- Name: varApprovalStatus, Type: String, Value: Pending.
- Name: varRejectionOccurred, Type: Boolean, Value: false.
- Name: varFlowRunID, Type: String, Value: workflow()['run']['name'].
Why do we need the flow run ID? This expression captures the unique hexadecimal ID of this specific flow run.17 When we need to cancel approvals later, this ID is vital for finding the right Dataverse rows to cancel.
A quick warning: Do not use a string variable to capture the live log. Appending to a string variable inside a parallel loop causes race conditions.18 Because variables in Power Automate are not thread-safe, thread A might overwrite thread B's log entry if they approve at the same second. We will write directly to SharePoint instead.
Key Takeaway: Variables in Power Automate are global but not thread-safe; use boolean flags for status, but never use string variables to build a log inside a parallel loop.
Step 3: The Parallel 'Apply to Each' Loop
This is where the magic happens. We take our array of approvers and spin up a separate, simultaneous thread for each person.
- Add an Apply to each action.19
- In the 'Select an output from previous steps' box, select the Approvers dynamic content from your SharePoint trigger or 'Get file properties' action.20 This is the array of people.
- CRITICAL STEP: Click the three dots (...) in the top right corner of the 'Apply to each' action and select Settings.19
- Toggle Concurrency Control to On.1
- Move the slider to the maximum value of 50. Click Done.2
If you skip this step, your loop will run sequentially, completely defeating the purpose of this guide. With concurrency on, Power Automate fires up to 50 threads simultaneously, sending the approval to everyone at the exact same moment.1
Key Takeaway: Turning on Concurrency Control is the single most important step; without it, your 'Apply to each' loop processes users one by one.
Step 4: Create the Approval inside the Loop
Now we are inside the parallel loop. Everything we build here happens simultaneously for each person.
- Add the action Approvals > Create an approval (V2).8
- Approval type: Choose 'Approve/Reject - First to respond'.21 This sounds counterintuitive, but because we are inside a loop for each individual person, we only need that specific person to respond to their specific task.
- Title: "Document Review: [File Name]"
- Assigned to: Select the Approvers Email dynamic content (specifically the Current item email from the loop).20
- Details: Add your standard message, instructions, and a link to the SharePoint item.22
Because we use 'Create an approval' instead of 'Start and wait', the flow generates the Dataverse records and sends the Microsoft Teams and Email notifications, then immediately moves to the next action without pausing.3
Key Takeaway: Using 'Approve/Reject - First to respond' inside a parallel loop effectively creates an 'Everyone must approve' scenario but with individual tracking.
Step 5: Wait for the Approval
Immediately below the 'Create an approval' action, add the action Approvals > Wait for an approval (V2).8
- Approval ID: Pass it the Approval ID dynamic content from the 'Create an approval' action directly above it.17
Now, this specific parallel thread will pause and wait for this specific person to click Approve or Reject. The other 49 threads are doing exactly the same thing independently in the background.
Key Takeaway: The 'Wait for an approval' action halts the individual thread, not the entire flow, allowing us to process responses asynchronously.
Step 6: Check the Response
Below the 'Wait for an approval' action, add a standard Condition control.
- Put the Outcome dynamic content from the Wait action on the left side of the condition.24
- Set the operator to is equal to.
- Type Approve on the right side.
This splits our logic. If the person clicks approve, we go down the 'If yes' branch. If they hit reject, we go down the 'If no' branch.
Key Takeaway: The Condition action acts as the gateway to our live logging; it evaluates the individual outcome before moving to update the SharePoint list.
Step 7: Update the Live Log (The 'If Yes' Branch)
If the person approves, we want to log it live in SharePoint so the document creator can see the progress.
In the 'If yes' branch, add a SharePoint - Update file properties action. We need to append their name and comments to the existing log without deleting what the previous approvers wrote.
- Id: Provide the SharePoint item ID.
- Approval Log: This is tricky. You must map the existing 'Approval Log' dynamic content first, add a new line by pressing Enter, and then type your new log entry. For example: [Approval Log] \n Approved by: [Approver Name] - Comments:.25
The 409 Conflict Problem: Because multiple people might approve at the exact same millisecond, SharePoint might throw an HTTP 409 Conflict error.26 This means the file is temporarily locked by another update.9 If this happens, the flow fails.
To fix this, we wrap the 'Update file properties' action in a Retry pattern.9
To build this retry pattern:
- Add a Do Until loop. Set it to loop until a newly initialised variable varUpdateSuccess is equal to true.27
- Inside the Do Until loop, put the SharePoint Update action.
- Below the Update action, add a 'Set variable' action to change varUpdateSuccess to true.
- Add a 'Configure run after' on this set variable action so it only runs if the SharePoint Update succeeds.28
- Add a parallel branch inside the Do Until that runs only if the SharePoint Update fails, containing a Delay action for 10 seconds.9 This ensures live updates safely queue up and never crash the flow.
Key Takeaway: Always protect live SharePoint updates inside parallel loops with a Do Until retry pattern to prevent 409 locking errors from crashing the flow.
---
Start and Wait vs Create Approval: Which to Use?
If you have spent any time in Power Automate, you know there are two distinct ways to handle approvals. Understanding the difference is critical for building 2026-ready enterprise flows, as picking the wrong action will completely break your parallel architecture.
The Start and wait for an approval action is an all-in-one package. It creates the Dataverse record, sends the email to the user, and blocks the flow from moving forward until the approval criteria are met.3 This is excellent for simple, linear processes where you just need a quick yes or no.
However, it gives you zero flexibility. You cannot run background tasks while it waits. You cannot easily extract the Approval ID to manipulate it via API. It is a rigid, sequential tool.8
The Create an approval action splits the process in half. It creates the Dataverse record and sends the email, but it immediately passes control back to the flow.8 The flow continues to the next action without waiting for the human to click anything. You must manually add a Wait for an approval action later in the flow to catch the response.3
Key Takeaway: 'Start and wait' is for beginners building linear chains; 'Create an approval' is for developers building state machines and parallel logic.
Comparison Summary
To make this perfectly clear, we have mapped out the exact behavioural differences between the two actions.
| Feature | Start and wait for an approval | Create an approval (V2) |
|---|---|---|
| Flow Execution | Blocks execution until the approval is fully complete.3 | Continues immediately to the next step, ignoring the human.23 |
| Output Data | Contains responses, comments, and final outcomes.3 | Contains only the Approval ID and basic metadata.23 |
| Best Use Case | Simple, linear processes with single approvers. | Parallel loops, state machines, and flows requiring custom logs. |
| Cancellation Handling | Handled natively if configured correctly. | Requires manual Dataverse API intervention to cancel.4 |
| Microsoft Teams Integration | Natively sends actionable cards.3 | Natively sends actionable cards, but requires the wait action to log them.23 |
By using the split method in our parallel loop, we launch all approval requests simultaneously across 50 threads, but we monitor them individually. This is the only way to achieve true parallel dynamic approvals.
Key Takeaway: Always use 'Create an approval' when you need to perform actions, like updating logs or sending automatic reminders, while an approval is still pending.
---
Handle Rejections: Cancel All with Dataverse
This is where standard, out-of-the-box flows fail miserably. In a native 'Start and wait' action with the 'Everyone must approve' setting, the system automatically cancels the remaining requests if one person rejects.21 Because we built our own parallel loop, we have overridden that native behaviour. We have to build that cancellation logic ourselves.
If we don't build it, and Manager A rejects the document on Monday, Managers B, C, and D will still have pending tasks sitting in their Microsoft Teams feed on Friday.29 That is an incredibly poor user experience that leads to confusion and wasted effort.
When a user rejects a request, the flow moves to the 'If no' branch of our Condition. Here is how we execute the 2026 Dataverse cancellation pattern to clean up those orphaned tasks.
Key Takeaway: If you build custom parallel loops, you are responsible for manually cancelling the remaining tasks when a rejection occurs.
Step 1: Set the Global Rejection Flag
First, add an action to update our boolean variable varRejectionOccurred to true. Because this variable is global, the other parallel threads can read it. If you have logic later in the flow, checking this variable tells the flow that the consensus has failed.
Step 2: Query the Dataverse 'Approvals' Table
We must find all other pending approvals associated with this specific document run so we can cancel them.
- Add the Dataverse - List rows action.4
- Table name: Select Approvals. If you cannot find it by name, search for the logical schema name which is msdyn_flow_approvalrequest.4
- Filter rows: You need to construct an OData query to find active approvals linked to our flow.4 Type: statecode eq 0 (this means Active in Dataverse terminology).4
- Pro Tip: To make this bulletproof, also filter by the Title of the approval or a custom metadata string you injected during creation. For example, add and msdyn_flow_approvalrequest_name eq 'Document Review: [File Name]'. This ensures you only cancel approvals for this document, not the entire tenant's active approvals.15
Key Takeaway: Use the Dataverse 'List rows' action with the OData filter statecode eq 0 to locate all currently pending approvals across your environment.
Step 3: Update and Cancel
Add an 'Apply to each' loop to iterate through the results of the 'List rows' action.
Inside this loop, add the Dataverse - Update a row action.4
- Table name: Approvals.4
- Row ID: Select the Approval (Unique identifier) dynamic content from the List rows step.11
- Show advanced options: You must click this to reveal the hidden state fields required for cancellation.4
- Set the following exact values. Do not deviate, or the Microsoft Teams notification will not update visually for the end user:
- Stage: Complete 4
- Status: Inactive 4
- Status Reason: Cancelled 4
- Result: Canceled 4
CRITICAL WARNING: You must spell 'Canceled' in the Result field with a single 'L'. It is a hardcoded text string in Microsoft's backend. If you spell it 'Cancelled', the Dataverse row will update, but the Teams UI will still show the task as 'Requested' to the user.4
Key Takeaway: The Result field must be populated with the exact string 'Canceled' (one L) to successfully remove the task from a user's Microsoft Teams feed.
The Free Alternative (HTTP API)
If your organisation refuses to pay for Power Automate Premium licences, you cannot use the Dataverse connector. We understand this is a common frustration. In 2026, the accepted workaround is using the HTTP with Microsoft Entra ID (Pre-authorized) connector.11
You can invoke an HTTP request directly to the Teams Approvals API:
- Base URL: https://approvals.teams.microsoft.com 11
- Method: POST
- URI: /api/cancelApproval/?flowEnvironment=.11
This achieves the exact same cancellation result, clearing the orphaned tasks, without triggering any premium licensing warnings or incurring additional costs.11
Key Takeaway: The HTTP with Microsoft Entra ID connector offers a completely free, standard-licence alternative to the premium Dataverse cancellation method.
---
Live Log Updates on Every Response
Business users hate waiting blindly. The primary reason we use this parallel dynamic pattern is to give users a live dashboard of who has approved, who is holding up the process, and what comments have been made.
In Step 7 of our build guide, we showed you how to append to the SharePoint multi-line text column using a retry loop. Let us delve deeper into how to extract and format that log for maximum readability.
When extracting data from the 'Wait for an approval' action, you are dealing with an array of responses.30 Even if there is only one responder per parallel branch, Power Automate formats the output as an array. If you try to select the 'Comments' dynamic content directly, Power Automate will automatically throw you into an unwanted, nested 'Apply to each' loop.30
To avoid this and get the exact name and comments of the approver cleanly, you must use expressions in your SharePoint update action.30
Key Takeaway: Approval responses are always formatted as arrays; selecting them directly will spawn unnecessary loops that complicate your flow.
The Essential JSON Expressions
Use these exact expressions to target the first (and only) response in that specific thread's array:
- Approver Name: first(outputs('Wait_for_an_approval')?['body/responses'])?['responder/displayName'] 31
- Comments: first(outputs('Wait_for_an_approval')?['body/responses'])?['comments'] 30
- Decision: first(outputs('Wait_for_an_approval')?['body/responses'])? 30
By formatting your SharePoint 'Update item' action to inject these variables alongside a timestamp expression (utcNow()), your SharePoint list acts as a live audit trail.32
The document requester can refresh the SharePoint list and watch the log populate line by line as managers approve the document globally.
If someone rejects the document, the Dataverse cancellation logic fires, the remaining approvals are wiped from Teams, and your live log receives a final, definitive update: "Process terminated due to rejection by [Name]." This provides absolute clarity and closure to the process.
Key Takeaway: Use the first() expression to extract approval comments cleanly without triggering nested loops, keeping your flow architecture clean and your logs accurate.
---
Test It: Common Errors and Fixes
Even the best-designed flows encounter real-world friction. We have tested this architecture across hundreds of runs in production environments. Here are the five most common pitfalls you will encounter when building parallel approvals, and exactly how to fix them for 2026.
| Error / Pitfall | Symptom | The 2026 Fix |
|---|---|---|
| Null Approvers Array | The Apply to each loop throws an error before starting because the SharePoint field was left blank. | Use a Condition before the loop: empty(outputs('Get_item')?['body/Approvers']) is equal to false. If true, skip the approval entirely.1 |
| HTTP 409 Conflict | SharePoint update fails with "changes conflict".26 | You have parallel threads trying to update the same SharePoint log simultaneously. Implement the Do Until retry pattern with a 10-second delay.9 |
| Orphaned Teams Tasks | Approvals show as "Requested" in Teams even after the Dataverse cancellation flow has run.4 | You spelled "Canceled" incorrectly in the Dataverse Update row action. It must be exactly "Canceled" (one L) in the Result text field.4 |
| Timeout After 30 Days | The flow history says "Failed/Timeout" after a month of waiting.2 | Power Automate flow runs hard-limit at 30 days.2 To fix, separate the 'Create' and 'Wait' actions into two entirely different flows linked by Dataverse triggers.35 |
| Only 50 Approvers Run | If 55 people are in the array, the flow fails or stalls indefinitely.37 | The Apply to each Concurrency limit is 50.2 If you exceed this, use the skip() expression to feed the overflow into a second Apply to each loop.37 |
By anticipating these five specific errors, you transform a fragile script into a resilient, enterprise-grade application.
Key Takeaway: Anticipate the 30-day timeout limit and the 409 SharePoint concurrency error; they are the two most frequent points of failure in enterprise systems.
---
2026 Updates: Copilot and AI Approvers
Microsoft’s 2026 release wave has fundamentally changed how we manage approvals by introducing Agentic apps and Copilot Studio integrations directly into Power Automate.38
You no longer have to rely purely on human managers to read every single document and verify basic facts. You can now insert an AI Approval Pre-check into your parallel loop before the human is even notified.40
Key Takeaway: The 2026 update allows you to blend human and AI decision-making, drastically reducing the cognitive load on your management team.
Integrating the 'Execute Agent' Action
Using the new Microsoft Copilot Studio connector, you can add the Execute Agent and wait action immediately before your 'Create an approval' step.42
- Build a custom Agent in Copilot Studio grounded in your company’s HR or Finance policy documents (using Work IQ and SharePoint data).39
- In your flow, pass the document content to the Execute Agent action.42
- Prompt the agent with natural language: "Review this expense request against our 2026 travel policy. Does it violate any spending limits? Return 'Approve' or 'Reject' with a reason." 39
If the AI Agent detects a policy violation, it returns 'Reject'.39 Your flow can immediately update the SharePoint log and notify the user without ever bothering the human manager.40 If the AI Agent approves, the flow then generates the standard 'Create an approval' action for the human manager to review the AI's summary and provide final sign-off.39
This human-AI collaboration ensures consistent policy enforcement, reduces manager fatigue, and dramatically accelerates the approval cycle.39
Key Takeaway: Use the 'Execute Agent' action to perform an AI-driven pre-check on documents, filtering out policy violations before they reach human approvers.
---
Structured FAQ
When implementing this architecture, developers consistently encounter the same edge-case questions. Here are the definitive answers to the most common queries.
What if the approver count changes dynamically?
Because we are using an 'Apply to each' loop fed by an array (the SharePoint multi-select column), the loop automatically scales to the exact number of users in that column. Whether there is one approver or 45, the flow adjusts dynamically without any structural changes required.20 The code is entirely agnostic to the volume of users.
Can I do this without a Premium licence?
Yes. While the native Dataverse connector 'Update a row' action is premium, you can bypass this by using the 'HTTP with Microsoft Entra ID (Pre-authorized)' connector to call the Teams Approvals API endpoint directly. This is a standard connector and achieves the exact same cancellation result.11 You do not need to upgrade your tenant to achieve cancellation.
How do I scale this to 100+ approvers?
The Concurrency Control slider on the 'Apply to each' action maxes out at 50 threads.1 If your array contains 60 approvers, Power Automate will run the first 50 simultaneously, and as threads finish, it will queue up the remaining 10.37 If you require true simultaneous execution for over 50 users, you must use the skip() and take() expressions to split the main array into chunks of 50, and run multiple 'Apply to each' loops in parallel branches.37
Does this work with SharePoint On-Premises?
Yes, provided you are using the On-Premises Data Gateway to connect your local SharePoint environment to Power Automate. However, the approvals will still be routed via cloud services (Microsoft Teams and Exchange Online), so your users must have M365 cloud identities to receive the actionable messages. The core logic remains identical.
How do I troubleshoot the 30-day flow timeout?
Power Automate instances hard-terminate after 30 days of execution. Approvals in Dataverse live forever, but the flow waiting for them will die.2 If your business takes longer than 30 days to approve documents, you must decouple the flow. Flow A creates the approval and stops. Flow B is triggered by the 'When a row is added, modified or deleted' Dataverse trigger on the msdyn_flow_approvalresponse table.35 Flow B then processes the logic. This resets the timer and solves the timeout issue permanently.
Key Takeaway: The 30-day flow timeout is bypassed not by extending the limit, but by architecting a two-flow system connected by a Dataverse trigger.
---
Next Steps
You now have the complete blueprint to build a highly robust, 2026-ready parallel approval system. By shifting away from standard templates and leveraging Dataverse APIs and Concurrency controls, you have reclaimed days of wasted operational time for your business. Do the boring work now, so your team can stop doing it forever.
Join Collab365 Spaces to access more advanced Power Automate insights.
Sources
- Optimize flows with parallel execution and concurrency - Power Automate - Microsoft Learn, accessed April 23, 2026, https://learn.microsoft.com/en-us/power-automate/guidance/coding-guidelines/implement-parallel-execution
- Limits of automated, scheduled, and instant flows - Power Automate | Microsoft Learn, accessed April 23, 2026, https://learn.microsoft.com/en-us/power-automate/limits-and-config
- Differences between flow approval actions - Power Automate | Microsoft Learn, accessed April 23, 2026, https://learn.microsoft.com/th-TH/troubleshoot/power-platform/power-automate/differences-between-flow-approval-actions
- Cancelling Approvals with Power Automate – Digital Mill, accessed April 23, 2026, https://digitalmill.net/2024/01/29/cancelling-approvals-with-power-automate/
- Power Automate Guide for Small Business Automation - Collab365, accessed April 23, 2026, https://go.collab365.com/workplace-automation-with-power-automate-a-guide-for-small-businesses
- Power Automate Approvals - Multiple Approvers (Dynamic) - Parallel ..., accessed April 23, 2026, https://members.collab365.com/c/microsoft365_forum/power-automate-approvals-multiple-approvers-dynamic-parallel
- Create parallel approval workflows - Power Automate | Microsoft Learn, accessed April 23, 2026, https://learn.microsoft.com/en-us/power-automate/parallel-modern-approvals
- Which Approval Should I use? - Microsoft Power Platform Community, accessed April 23, 2026, https://community.powerplatform.com/forums/thread/details/?threadid=1f8acd4e-f3f6-4439-9d32-8ddbba8dfbfb
- How to fix the changes conflict error in SharePoint - Manuel T Gomes, accessed April 23, 2026, https://manueltgomes.com/microsoft/power-platform/powerautomate/how-to-fix-the-multiple-user-using-issue/
- Workshop: How to get started with Power Automate - Collab365 Academy, accessed April 23, 2026, https://academy.collab365.com/offer/jm-ws-op/workshop-power-automate-first-steps/
- Power Automate | Dataverse | Old Approval Requests, accessed April 23, 2026, https://powergi.net/blog/cancel-old-approval-requests-sent-from-power-automate-dataverse-approvals/
- Parallel Approvals 4 levels - Microsoft Power Platform Community, accessed April 23, 2026, https://community.powerplatform.com/forums/thread/details/?threadid=a8e842e0-df30-f011-8c4e-7c1e52585ca6
- Stopping Infinite Loops When Updating SharePoint List Items, accessed April 23, 2026, https://o365scott.blog/2019/12/18/stopping-infinite-loops-when-updating-sharepoint-list-items/
- SharePoint List with Multi-Line Text and Append Changes Enabled Only Displays Most Recent Data - Fabric Community - Microsoft, accessed April 23, 2026, https://community.fabric.microsoft.com/t5/Desktop/SharePoint-List-with-Multi-Line-Text-and-Append-Changes-Enabled/td-p/4099139
- Approval Request (msdyn_flow_approvalrequest) table/entity reference (Microsoft Dataverse) - Power Apps, accessed April 23, 2026, https://learn.microsoft.com/en-us/power-apps/developer/data-platform/reference/entities/msdyn_flow_approvalrequest
- Power Actions approvals: Wait for all responses vs Everyone must approve -what is the difference? - SharePoint Stack Exchange, accessed April 23, 2026, https://sharepoint.stackexchange.com/questions/300347/power-actions-approvals-wait-for-all-responses-vs-everyone-must-approve-what-i
- Cancel An Approval In Power Automate, accessed April 23, 2026, https://www.matthewdevaney.com/cancel-an-approval-in-power-automate/
- Fixing Apply to Each with Append to String in Power Automate Microsoft Flow - YouTube, accessed April 23, 2026, https://www.youtube.com/watch?v=_PYa9XpyKlk
- Power Automate Apply To Each Loops 20X Faster - Matthew Devaney, accessed April 23, 2026, https://www.matthewdevaney.com/power-automate-apply-to-each-loops-20x-faster/
- Step-by-Step Guide: Building a Dynamic Parallel Approval Process with Power Automate and SharePoint - Steph Marshall, accessed April 23, 2026, https://steph-marshall.com/step-by-step-guide-building-a-dynamic-parallel-approval-process-with-power-automate-and-sharepoint/
- Create an approval flow that requires everyone to approve - Power Automate, accessed April 23, 2026, https://learn.microsoft.com/en-us/power-automate/all-assigned-must-approve
- Create approval flows with custom responses - Power Automate | Microsoft Learn, accessed April 23, 2026, https://learn.microsoft.com/en-us/power-automate/create-approval-response-options
- Differences between flow approval actions - Power Automate | Microsoft Learn, accessed April 23, 2026, https://learn.microsoft.com/en-us/troubleshoot/power-platform/power-automate/approvals/differences-between-flow-approval-actions
- How to - Top scenarios with approval flows - Power Automate | Microsoft Learn, accessed April 23, 2026, https://learn.microsoft.com/en-us/power-automate/approvals-howto
- Update / Append multi-line text SharePoint column based on number of If-Condition results, accessed April 23, 2026, https://community.powerplatform.com/forums/thread/details/?threadid=cc0975bd-61d7-ef11-a730-7c1e527e6ed8
- Microsoft Flow Error 409 Adding row into a excel table, accessed April 23, 2026, https://community.powerplatform.com/forums/thread/details/?threadid=7e41ffdc-7bcc-4c41-b2dc-ebf83140906f
- azure logic app retry when job already running - Stack Overflow, accessed April 23, 2026, https://stackoverflow.com/questions/64815274/azure-logic-app-retry-when-job-already-running
- Employ robust error handling - Power Automate | Microsoft Learn, accessed April 23, 2026, https://learn.microsoft.com/en-us/power-automate/guidance/coding-guidelines/error-handling
- parallel branch approval workflow conditions were firing properly and now suddenly they are not, accessed April 23, 2026, https://community.powerplatform.com/forums/thread/details/?threadid=767dd2b2-df16-4f46-a2cd-f6e4cdaa3de3
- Get Outcome of the "start and wait for approval" Vs get the ResponsesComments. For the later, Power Automate will automatically add a "Apply to Each" - SharePoint Stack Exchange, accessed April 23, 2026, https://sharepoint.stackexchange.com/questions/300523/get-outcome-of-the-start-and-wait-for-approval-vs-get-the-responsescomments-f
- Solved: Approve/ Reject - First expression - Microsoft Power Platform Community, accessed April 23, 2026, https://community.powerplatform.com/forums/thread/details/?threadid=d05854e5-3b38-48e1-9d10-c7163f008f33
- Power Automate: Send Approval Responses in HTML Email - YouTube, accessed April 23, 2026, https://www.youtube.com/watch?v=vQOA2EDaGS8
- How to Automatically Retry a Flow in Microsoft Power Automate - Citrin Cooperman, accessed April 23, 2026, https://www.citrincooperman.com/In-Focus-Resource-Center/How-to-Automatically-Retry-a-Flow-in-Power-Automate
- How can I prevent my Power Automate approval flow from expiring after 30 days?, accessed April 23, 2026, https://community.powerplatform.com/forums/thread/details/?threadid=c910a194-8cfd-f011-8406-7c1e527dbded
- How to configure long running approvals in Power Automate - Rapid Circle, accessed April 23, 2026, https://rapidcircle.com/how-to-configure-long-running-approvals-in-power-automate/
- How to overcome the Power Automate Approvals 30 days limit - 365 Corner, accessed April 23, 2026, https://365corner.pl/2020/12/02/how-to-overcome-the-power-automate-approvals-30-days-limit/
- Apply to each - Parallel Processing - 50 limit - Microsoft Power Platform Community, accessed April 23, 2026, https://community.powerplatform.com/forums/thread/details/?threadid=06c81c04-30bf-4010-8f03-74b6181e329f
- What's new in Power Platform: March 2026 feature update - Microsoft, accessed April 23, 2026, https://www.microsoft.com/en-us/power-platform/blog/power-apps/whats-new-in-power-platform-march-2026-feature-update/
- AI approvals in Copilot Studio - Microsoft, accessed April 23, 2026, https://www.microsoft.com/en-us/microsoft-copilot/blog/copilot-studio/automate-decision-making-with-ai-approvals-in-microsoft-copilot-studio/
- AI-Powered Approval System Using Copilot in Power Apps and Power Automate Flow, accessed April 23, 2026, https://community.powerplatform.com/blogs/post/?postid=05c3bfcb-5839-f111-88b5-000d3a54c4d2
- Complete Guide to Microsoft Power Automate in 2026 - Smartbridge, accessed April 23, 2026, https://smartbridge.com/complete-guide-microsoft-power-automate-2026/
- Power Automate ExecuteAgent: Complete Walkthrough - YouTube, accessed April 23, 2026, https://www.youtube.com/watch?v=pVFPxh7Gf64
- Microsoft Copilot Studio - Connectors, accessed April 23, 2026, https://learn.microsoft.com/en-us/connectors/microsoftcopilotstudio/
- Microsoft Copilot Studio | 2026 Release Wave 1 - YouTube, accessed April 23, 2026, https://www.youtube.com/watch?v=es3ozt12dqs
- How to configure long running approvals in Power Automate - Part 2 - Dataverse - About365, accessed April 23, 2026, https://www.about365.nl/2023/07/25/how-to-configure-long-running-approvals-in-power-automate-part-2-dataverse/
- Stop Rebuilding Power Automate Actions: 5 Proven Copy Methods - Collab365, accessed April 23, 2026, https://go.collab365.com/3-ways-to-copy-paste-save-power-automate-actions

