An infinite loop in a Power Automate flow tied to a SharePoint list or library can cause thousands of unwanted runs, fill up your audit log, and slow down site performance. The loop happens when a flow triggers on a change, makes another change, and that second change triggers the same flow again, creating a self-perpetuating cycle. This article explains the three most common trigger patterns that cause loops and provides a practical checklist you can apply to any flow you own or maintain.
Key Takeaways: Three Checklist Items to Prevent Infinite Loops
- Trigger condition filter on the SharePoint trigger: Add a condition that checks a status column so the flow runs only when the item is in a specific state, not on every update.
- Update only the required column, not the whole item: Use the “Update item” action with a single column value instead of the “Update file properties” action that modifies the entire item.
- Configure a concurrency control and run history limit: Set the concurrency degree to 1 and enable a row-level locking mechanism to prevent overlapping runs that can escalate into a loop.
Why Power Automate Flows Get Trapped in Infinite Loops
Every SharePoint-triggered flow in Power Automate starts when an item is created or modified. The trigger fires, the flow runs one or more actions, and one of those actions updates the same item that started the flow. That update looks like a new change to SharePoint, so the trigger fires again. The cycle repeats until the flow reaches its run limit or you manually stop it.
The root cause is almost always an action that writes back to the triggering item. Common examples include updating a status column after approval, setting a timestamp, or copying a value from another column. If the flow does not distinguish between the original user change and its own change, the loop continues.
Power Automate does not have a built-in loop breaker. You must design the flow to detect and stop its own updates. The checklist below gives you three concrete mechanisms to achieve that.
Practical Checklist to Design a Loop-Free Flow
Apply each of the following three items to every new or existing flow that triggers on a SharePoint list or library. Test each item in a development environment before moving the flow to production.
1. Add a Trigger Condition That Checks a Status Column
A trigger condition is a filter that runs before the flow starts. If the condition evaluates to false, the flow does not run at all. This is the most effective way to stop a loop because the trigger never fires for changes made by the flow itself.
- Add a status column to your SharePoint list
Create a choice column named “FlowStatus” with values such as “Pending”, “Processing”, and “Completed”. Set the default value to “Pending”. - Open the trigger settings in Power Automate
In the flow designer, select the “When an item is created or modified” trigger. Click the ellipsis (…) and choose “Settings”. - Write the trigger condition expression
In the “Trigger Conditions” field, enter:@equals(triggerOutputs()?['body/FlowStatus'], 'Pending'). This ensures the flow runs only when the item is in the “Pending” state. - Set the status column in the flow action
In the first action after the trigger, use the “Update item” action to change “FlowStatus” from “Pending” to “Processing”. When the flow finishes, update it to “Completed”. Because the trigger condition now filters for “Pending”, the flow will not run again when the status changes to “Processing” or “Completed”.
2. Update Only the Columns That Need to Change
Many infinite loops start because the flow uses the “Update file properties” action, which sends every column value back to SharePoint. Even columns that did not change are sent, and SharePoint treats that as a modification. The trigger fires again even if no real data changed.
- Use “Update item” instead of “Update file properties”
In Power Automate, the “Update item” action lets you specify only the columns you want to change. Leave all other columns blank. SharePoint will not register a change on those columns. - Remove dynamic content for unchanged columns
If you used the “Get item” action earlier in the flow to retrieve all fields, do not pass those values into the update action. Pass only the single column value you intend to change. - Test with a single-column update
Run the flow manually on one item. Check the SharePoint item history. You should see only one update entry, not a series of updates caused by the loop.
3. Enable Concurrency Control and Row-Level Locking
Concurrency control limits how many instances of the same flow can run at the same time. When combined with a status column, it prevents two overlapping runs from both trying to update the same item.
- Set concurrency degree to 1
In the trigger settings, expand “Concurrency Control”. Turn the toggle to “On”. Set the “Degree of Parallelism” to 1. This forces Power Automate to process one trigger event at a time for this flow. - Enable row-level locking in SharePoint
Row-level locking is a SharePoint list setting that prevents two requests from modifying the same item simultaneously. Go to List Settings > Advanced Settings and set “Allow items from this list to be downloaded to offline clients?” to “No”. This forces all updates to go through the server, which applies write locks. - Combine with the status column
When concurrency is 1 and the status column is set to “Processing” at the start of the flow, any subsequent trigger that fires during the run will see the status as “Processing” and will be blocked by the trigger condition.
What to Do If a Flow Is Already in a Loop
If a flow is running hundreds or thousands of times and you cannot stop it from the Power Automate portal, use the following emergency steps.
Stop the flow immediately
Open the flow in Power Automate and turn the toggle to “Off”. This stops all new runs. Existing runs in the queue will still complete, but no new ones will start.
Delete queued runs
Go to the flow’s run history. Select all queued runs that have not started yet and click “Cancel”. This clears the backlog.
Restore the SharePoint list to a clean state
If the loop changed many items, use the SharePoint “Version History” feature to restore items to their state before the loop started. Select the item, click “Version History”, and restore the version that predates the first loop run.
Apply the checklist before turning the flow back on
Do not re-enable the flow until you have added a trigger condition, changed to single-column updates, and enabled concurrency control. Test with one item first.
Trigger Pattern That Causes Loops vs Safe Pattern
| Item | Loop-Causing Pattern | Safe Pattern |
|---|---|---|
| Trigger condition | No trigger condition; flow runs on any change | Trigger condition checks a status column value |
| Update action | “Update file properties” with all columns | “Update item” with only the changed column |
| Concurrency | Default (unlimited parallel runs) | Concurrency degree set to 1 |
| Status column handling | No status column; flow updates the item directly | Status column set before and after the main action |
By applying the three checklist items and understanding the difference between the loop-causing pattern and the safe pattern, you can design flows that run reliably without creating unwanted cycles. Start by adding a status column with a trigger condition on every new flow you create. For existing flows, audit the update actions and replace any “Update file properties” action with a targeted “Update item” action. Test each change in a sandbox environment before promoting the flow to production.