An HR team I worked with kept an Employee Records list in SharePoint. Whenever someone changed an employee’s End of Contract date, the Employee Status had to switch to Inactive, and nothing else in the record could change.
It sounds simple, but there are two traps: the flow can run again on its own update, and the Update item action asks for more than one field. In this tutorial, I’ll show you how to update only one field, only when another column changes, and three ways to do the update itself.
Quick answer: Turn on versioning, use the When an item or a file is modified trigger, and add Get changes for an item or a file (properties only) with Since set to Trigger Window Start Token. If ColumnHasChanged is true for your column, update the other column with Update item, or with a Send an HTTP request to SharePoint MERGE request if you want to send only that one field.
The example list
My Employee Records list has several columns. The two that matter here are:
| Column | Type | Internal name |
|---|---|---|
| Employee Status | Choice (Active, Inactive) | EmployeeStatus |
| End of Contract | Date and time | EndofContract |
The rule: when someone edits the End of Contract date, set Employee Status to Inactive. Edits to any other column shouldn’t touch the status.
Employee Status is a Choice column, so the flow sets it by its value. See how to get SharePoint choice values in Power Automate if you work with choices a lot.

Step 1: Turn on versioning
Power Automate can only tell which columns changed by comparing versions of the item. In the list, select Settings > List settings > Versioning settings, and set Create a version each time you edit an item to Yes. New lists in SharePoint Online usually have it on already.
Step 2: Create the flow
In Power Automate, select Create > Automated cloud flow and choose the SharePoint trigger When an item or a file is modified. Select your site and the Employee Records list.
I use this trigger rather than “When an item is created or modified” for one reason: it gives you the Trigger Window Start Token and Trigger Window End Token, which the next step needs.
Step 3: Find out what changed
Add Get changes for an item or a file (properties only) and set:
| Field | Value |
|---|---|
| Site Address | Your SharePoint site |
| List or Library Name | Employee Records |
| Id | ID from the trigger |
| Since | Trigger Window Start Token from the trigger |
| Until | Trigger Window End Token from the trigger |
The original version of this post used the item’s Created date for Since. That compares the item with its very first version, so once the End of Contract date has changed even once, every later edit looks like a change, and the flow keeps updating the item. The trigger window tokens compare only with the version just before this edit.
Step 4: Check the End of Contract column
Add a Condition. On the left, enter this expression, choose is equal to, and on the right enter the expression true:
outputs('Get_changes_for_an_item_or_a_file_(properties_only)')?['body/ColumnHasChanged/EndofContract']

You can also pick Has Column Changed: End of Contract from the dynamic content instead of typing it. If your column has a different internal name, use that name after ColumnHasChanged/.
You can add more checks in the same Condition, for example the employee’s department. See how to update SharePoint list items based on a condition.
Step 5: Update the Employee Status
Method 1: Update item
In the True branch, add the SharePoint Update item action:
- Site Address and List Name: the same as above.
- Id: the ID from the trigger.
- Title: the Title from the trigger. Update item needs a value for every required column, so pass the current value back.
- Employee Status Value: choose Inactive.

Leave the other optional columns empty. If your list has many columns, set Limit Columns by View to a view that contains only the columns you need, which keeps the action short and avoids column threshold issues.
For more Update item examples, such as several fields at once, see how to update SharePoint list items using Power Automate.
Because Update item still sends the required columns, it isn’t strictly a one-field update. If you need to send only Employee Status, use one of the next two methods instead.
Method 2: Update one field with an HTTP request
The SharePoint REST API can update just the fields you send, using a MERGE request. Add Send an HTTP request to SharePoint in the True branch:
- Method: POST
- Uri:
_api/web/lists/GetByTitle('Employee Records')/items(@{triggerOutputs()?['body/ID']}) - Headers: the four headers below
- Body: the JSON below
Accept: application/json;odata=verbose
Content-Type: application/json;odata=verbose
IF-MATCH: *
X-HTTP-Method: MERGE
{
"__metadata": { "type": "SP.Data.Employee_x0020_RecordsListItem" },
"EmployeeStatus": "Inactive"
}
The type must match your list. If the list name has a space, it’s encoded as _x0020_, as above. To find the exact value, run a GET request once with this Uri and copy ListItemEntityTypeFullName from the output:
_api/web/lists/GetByTitle('Employee Records')?$select=ListItemEntityTypeFullName
IF-MATCH: * updates the item whatever its current version is. You don’t need an authorization or request digest header, because the connector adds them for you.
Method 3: ValidateUpdateListItem
Another REST option is ValidateUpdateListItem. It takes field names and values as text, so you don’t need the list’s type name. Use POST with the Uri _api/web/lists/GetByTitle('Employee Records')/items(ID)/ValidateUpdateListItem, replacing ID with the trigger’s ID, and this body:
{
"formValues": [
{ "FieldName": "EmployeeStatus", "FieldValue": "Inactive" }
],
"bNewDocumentUpdate": false
}
The response lists each field with HasException and ErrorMessage, so you can check in the flow that the update worked. In my own flows, setting bNewDocumentUpdate to true has updated the item without adding a new version, which is handy for system fields. Test it in your list before you rely on it.
Why this flow doesn’t loop
Updating the item is itself a modification, so the trigger fires again. On that second run, Get changes compares the new version with the one before it. Only Employee Status changed, so ColumnHasChanged/EndofContract is false, the condition takes the False branch, and the flow stops.
To skip that extra run completely, add a trigger condition in the trigger’s Settings, for example to run only when Employee Status isn’t already Inactive. Test it with your own column names. See Power Automate trigger conditions examples.
Test the flow
Save the flow, go to the list and change an employee’s End of Contract date, for example to December 31, 2026.

After the flow runs, Employee Status shows Inactive. Open the item’s Version history to confirm that only Employee Status changed in the flow’s version. Now edit another column, such as the phone number: the flow runs, the condition is false, and the status stays as it was.
If the new value should come from another list, for example an HR master list, see how to update a SharePoint list item from another list.

These tutorials cover other ways to update SharePoint list items:
Frequently Asked Questions
How do I update only one column in a SharePoint list with Power Automate?
Use Update item with only that column and the required columns filled in, or send a MERGE request with Send an HTTP request to SharePoint that contains just that one field.
How do I know which column changed in Power Automate?
Use Get changes for an item or a file (properties only) with the trigger window tokens and check ColumnHasChanged for your column. Microsoft explains it in its SharePoint triggers and actions guide.
Why does Get changes say a column changed when it didn’t?
Since is probably set to the Created date or a fixed version. Set it to Trigger Window Start Token so the flow compares only with the previous version.
Does Update item clear the columns I leave empty?
In my testing, empty optional fields are left as they are, but required columns must have a value. To be sure, use the HTTP MERGE request, which only sends the fields you include.

I have worked with Microsoft technologies for more than 18 years, including SharePoint, Microsoft 365 and the Power Platform (Power Apps, Power Automate and Power BI), at companies like HP, TCS and KPIT. I started EnjoySharePoint in 2011 to share the solutions I build in real projects with readers in the United States, Canada, the United Kingdom, Australia, New Zealand and beyond. Microsoft has recognized this work with the Microsoft MVP award 13 times since 2014.