Skip to main content

How to Check an Item Hasn't Changed During an Approval in Power Automate

· 7 min read
Jagdish Kumawat
Founder @ Dewiride

An approval can wait for hours, and the item it's about can change in the meantime. After Start and wait for an approval, read the item again, compare its version number with the one the flow started with, and stop the run if they differ. An approver's answer then only ever decides the version they saw.

The example is the approval flow of the Overtime Timesheet app. Staff can correct an overtime entry while its approval waits; each save starts a new run and a new request, and the old request mustn't decide the new entry.

Prerequisites​

Why the Version Number​

Every edit to an item gives it a new version number, and the trigger's outputs include the version that started the run, {VersionNumber}. If the item's version after the approval is the same, nobody changed it while the approval waited.

Step 1: Read the Item Again After the Approval​

After Start and wait for an approval, add a Get item on the same list with the trigger's ID. I named it Get the entry now (How to Get a SharePoint List Item by ID in Power Automate).

Step 2: Compare the Versions​

Add a Condition, Check the entry is unchanged (How to Add a Condition in Power Automate): the version from Get the entry now is equal to the trigger's:

LeftOperatorRight
outputs('Get_the_entry_now')?['body/{VersionNumber}']is equal totriggerBody()?['{VersionNumber}']

The Check the entry is unchanged pane with the condition: And, then the token body/VersionN… from SharePoint, with VersionNumber in braces, is equal to, and the token VersionNumber from SharePoint

Step 3: Act Only on an Unchanged Item​

The Test​

Maya Patel corrected her rejected entry in SharePoint, adding the detail her approver had asked for, and set Status back to Pending:

The SharePoint edit form with Reason Saturday MRI backlog list in Radiology. Daniel asked me to stay until 12:00., EmployeeName Maya Patel, EmployeeEmail maya.patel@example.com, Status Pending, and the Save and Cancel buttons

A request reached Daniel Brooks at 17:06. Before he answered, Maya edited the entry again, adding the number of scans, and a second request arrived at 17:08:

Daniel's inbox with two emails from Microsoft Power Automate, both Overtime for Maya Patel, Saturday…, at 17:08 and 17:06, each with Requested for Maya Patel

Daniel approved the older request first. That run's trigger had version 4.0 of the entry, and Get the entry now read version 5.0:

The trigger's body row VersionNumber 4.0

Get the entry now's body row VersionNumber 5.0

So the condition was false, the run stopped, and nothing was recorded:

The run view: Ask for approval succeeded after 3m 8s, Get the entry now succeeded, Check the entry is unchanged marked Terminated; under True, Record the decision, Set the approval status and Tell the employee skipped; under False, Stop: the entry changed succeeded

Then he approved the newer request, whose run found the version unchanged and recorded the approval:

The OvertimeEntries row with Reason Saturday MRI backlog list in Radiology, 8 scans. Daniel asked me to stay until 12:00., Status Approved, ApproverComment Approved. Thanks for clearing the backlog., DecisionBy Daniel Brooks, DecisionOn 08/11/2026 17:11 and Approval Status Approved

What the Approver Sees​

Nothing tells the approver that their answer to the old request was ignored: in Outlook, it showed as approved like any other. The newer request is the one that counts, so approvers should answer the latest request for an item. The flow's run history shows the cancelled run (How to See a Flow's Run History in Power Automate).

Common Mistakes​

MistakeWhat happensDo this instead
Recording the decision with the trigger's valuesChanges made during the wait are overwrittenRead the item again first
Comparing Modified datesWorks, but versions are simpler to compare{VersionNumber}
No check at allAn old answer decides the new versionCompare versions before recording

Troubleshooting​

SymptomLikely causeFix
Every run is cancelledThe flow updates the item before the checkCheck before any update
The check never fails, even after editsComparing the trigger's version with itselfThe left side must come from Get the entry now
An approver's answer had no effectThe item changed after their requestExpected; they answer the newer request

FAQ​

Isn't the ETag the same idea?​

Yes, for SharePoint's approval itself: Set content approval status takes the item's ETag (How to Approve or Reject a SharePoint Item in Power Automate). The version check covers the whole decision, including the columns the flow writes.

What if two approvers answer two requests at once?​

Each run checks its own version. Only the run whose version is still the item's current one records a decision.

Conclusion​

After an approval, read the item again and compare its {VersionNumber} with the trigger's. Equal: record the decision. Different: stop the run with Terminate, and let the newer request decide.

Additional Resources​