When automating SharePoint processes with Power Automate, it is common to encounter scenarios where a flow needs to pause until a specific field value changes — for example, waiting until a document is approved or a status column changes to “Completed.”


Power Automate: How to Wait Until a SharePoint Field Changes Its State

1. Introduction

When automating SharePoint processes with Power Automate, it is common to encounter scenarios where a flow needs to pause until a specific field value changes — for example, waiting until a document is approved or a status column changes to “Completed.”

However, if implemented incorrectly, this logic can cause infinite loops or excessive flow runs. This article explains the correct and safe way to make a Power Automate flow “wait” for a SharePoint field to change state, without using “When an item is modified” triggers.


2. The Problem with Using “When an item is modified”

A frequent mistake is to design flows that are triggered both when an item is created and when it is modified, while also including “Update item” actions inside the same flow.
This leads to recursive self-triggering, where each update causes the flow to start again indefinitely.

Example of a bad design

  • Trigger: When an item is created or modified
  • Actions:
    • Update the same item (e.g., change the status or a timestamp)

Result: The update triggers the flow again, creating an infinite loop.

To avoid this, you should:

  1. Use the trigger “When an item is created” only.
  2. Implement a waiting logic using “Do Until” and “Get item”.

3. Correct Design Pattern: “Do Until” Loop with “Get item”

This approach allows the flow to periodically check whether the SharePoint field has changed, without triggering new runs.

3.1 Step-by-Step Implementation

Step 1 – Trigger

  • Use “When an item is created”.
  • Store the ID, Site Address, and List Name from the trigger output.

Step 2 – Get the Item

Add the “Get item” action:

  • Site Address: same as trigger
  • List Name: same as trigger
  • Id: use ID from trigger

This retrieves the item to monitor.

Step 3 – Do Until Loop

Add a “Do until” action and set the condition:

@equals(items('Get_item')?['Status'], 'Approved')

Replace 'Status' and 'Approved' with your column name and target value.

Step 4 – Add Delay and Recheck

Inside the loop:

  • Add a “Delay” action (e.g., 5 minutes).
  • Add another “Get item” action to re-fetch the latest value.

This loop will pause, wait, and re-check periodically until the field meets the condition.

Step 5 – Configure Loop Settings

In the Settings of the “Do until” action:

  • Count: set a maximum number of iterations (e.g., 60)
  • Delay: set to 5 minutes
    This means the flow will wait up to 5 hours before timing out.

Step 6 – Continue the Process

After the “Do until” block, place any actions that should execute once the field reaches the desired state (e.g., send email, update status, call another flow, etc.).


4. Example Flow Structure

StepActionPurpose
1When an item is createdStart the flow once per item
2Initialize variable (optional)Store ItemID for reuse
3Get itemRead current field value
4Do untilWait until Status = “Approved”
5├ DelayPause before next check
6└ Get itemRefresh the field value
7Continue with next actionsExecute after condition met

5. Technical Considerations

AspectRecommendation
TriggerAlways use “When an item is created” to avoid recursion
Field typeUse simple text or choice fields for comparisons
Loop interval5–10 minutes is ideal for near-real-time waiting
Maximum iterationsDefine limits to prevent endless waiting
Timeout handlingAdd conditions after the loop to handle “not reached” scenarios
PerformanceAvoid overly frequent “Get item” calls — they count toward API limits
Calculated fieldsAvoid using them in conditions — Power Automate doesn’t detect real updates

6. Optional: “Wait for an approval” Action

If the field changes as a result of an approval process, Power Automate provides the “Start and wait for an approval” action.
This built-in action suspends the flow until the approval response is received — eliminating the need for a custom loop.
However, for general field monitoring, the Do Until + Get item pattern is the best option.


7. Example Expression

To compare a SharePoint Choice field:

@equals(items('Get_item')?['Status']?['Value'], 'Approved')

To compare a Text field:

@equals(items('Get_item')?['Status'], 'Approved')


8. Common Mistakes and How to Avoid Them

MistakeImpactSolution
Using “When an item is modified” + “Update item”Infinite loopUse “When created” only
Missing delay in loopAPI throttlingAlways add “Delay”
Unbounded loopFlow never endsConfigure iteration limits
Checking calculated fieldCondition never metUse text or choice fields only
Complex filter logicWrong comparisonSimplify to a single field check

9. Testing and Monitoring

During testing:

  • Create a new item manually.
  • Let the flow start and monitor in Power Automate Run History.
  • Change the SharePoint field manually.
  • Observe that the flow resumes automatically after the next “Get item” cycle.

Use “Peek code” in each step to debug the expressions if needed.


10. References


11. Summary Table

ConceptDescription
Pattern“Do until” + “Get item” + “Delay”
TriggerWhen an item is created
PurposeWait until a SharePoint field changes
AdvantagesPrevents recursion, provides controlled waiting
Typical Use CaseStatus field transitions (“Pending” → “Approved”)
Alternative“Wait for an approval” (if applicable)

12. Conclusion

Using “Do Until” loops with “Get item” actions provides a safe and controlled way to make Power Automate wait until a SharePoint field changes its state.
This pattern avoids the dangerous recursion that occurs with “When an item is modified” triggers and ensures that your automation logic remains predictable, efficient, and compliant with Microsoft’s best practices.

Edvaldo Guimrães Filho Avatar

Published by