SharePoint list owners often need to track who changed what and when in a list. The built-in version history stores this data but does not make it easy to review changes across multiple items or send alerts for specific edits. You may want to log all changes to a separate list so you can run reports or set up Power Automate flows on the audit trail. This article explains how to use Power Automate to automatically log list changes to another list and provides a practical checklist for setting up the system correctly.
Key Takeaways: Logging SharePoint List Changes to Another List
- Power Automate > When an item is created or modified: Triggers the flow for each new or edited list item.
- Power Automate > Get changes for an item or a file (properties only): Retrieves the specific property that was changed and the old and new values.
- Audit log list columns: Use columns for Item ID, Change Type, Changed Field, Old Value, New Value, Changed By, and Timestamp to store a complete audit trail.
How the Change Logging System Works
SharePoint does not have a native feature that logs list changes to a separate list automatically. The version history for each item records changes, but you cannot query version history across multiple items in a single view or trigger workflows based on specific field changes. Power Automate solves this limitation by watching the source list and writing a record to a destination audit list every time an item is created or modified.
The core trigger is the When an item is created or modified trigger in Power Automate. After the trigger fires, you need to use the Get changes for an item or a file (properties only) action to identify which field changed and capture the old and new values. This action returns a JSON object that lists all changed properties. You then parse this JSON and write the relevant data into the audit list.
Before building the flow, you must create the destination audit list. This list needs columns to store each piece of audit information. A typical audit list includes the following columns:
- ItemID (Number) – the ID of the item in the source list
- ChangeType (Choice) – values: Created, Modified
- ChangedField (Single line of text) – the display name of the field that changed
- OldValue (Multiple lines of text) – the previous value
- NewValue (Multiple lines of text) – the current value
- ChangedBy (Single line of text) – the user who made the change
- Timestamp (Date and Time) – when the change occurred
Steps to Set Up the Change Logging Flow
- Create the audit list
Go to the SharePoint site where you want to store the audit log. Create a new custom list named AuditLog. Add the columns listed above. Set ItemID to a number, ChangeType to a choice with Created and Modified, and the rest as specified. - Open Power Automate and create an automated flow
Go to make.powerautomate.com. Select Create and then Automated cloud flow. Give the flow a name such as Log List Changes to Audit. - Add the SharePoint trigger
Search for the SharePoint connector and select the trigger When an item is created or modified. Provide the site address and the list name of the source list you want to monitor. - Initialize a variable to store change data
Add an action Initialize variable. Name it ChangesJSON, set Type to String, and leave the Value empty. This variable will hold the raw JSON from the get-changes action. - Get changes for the item
Add the SharePoint action Get changes for an item or a file (properties only). Provide the site address and list name. In the Id field, select ID from the dynamic content list. Set Since to @addHours(utcNow(), -24) to capture changes in the last 24 hours. Set ItemDeleted to No. - Parse the JSON response
Add a Parse JSON action. In the Content field, select the Value output from the Get changes action. Use the following schema to parse the array of changes:{ "type": "array", "items": { "type": "object", "properties": { "PropertyName": {"type": "string"}, "OldValue": {"type": "string"}, "NewValue": {"type": "string"} }, "required": ["PropertyName"] } } - Apply to each change
Add an Apply to each action. In the Select an output from previous steps field, select the Body output from the Parse JSON action. Inside the loop, add a Create item action for the SharePoint connector. Point it to your audit list site and list name. - Map the audit columns
In the Create item action, map the dynamic content as follows:- Title – leave blank or use a concatenation of ChangeType and ItemID
- ItemID – select ID from the trigger outputs
- ChangeType – use a condition: if the trigger output Modified equals the current item, use Modified; otherwise use Created
- ChangedField – select PropertyName from the Parse JSON output
- OldValue – select OldValue from the Parse JSON output
- NewValue – select NewValue from the Parse JSON output
- ChangedBy – select Modified By DisplayName from the trigger outputs
- Timestamp – select Modified from the trigger outputs
- Save and test the flow
Save the flow. Add or modify an item in the source list. Wait a few minutes and check the AuditLog list for a new entry. If no entry appears, review the flow run history by going to the flow details page and selecting the failed run.
Common Issues When Logging List Changes
Flow Does Not Trigger for Bulk Edits
The When an item is created or modified trigger fires once per item, not once per change. When you edit multiple items at once using Quick Edit or a Power Apps form, the trigger may miss some updates. To capture all changes, ensure the flow runs for each individual item. If you use a bulk edit, consider using a scheduled flow that checks for changes periodically instead of relying on the real-time trigger.
Get Changes Action Returns No Data
The Get changes for an item or a file (properties only) action requires the Since parameter to be set correctly. If you set it to a time before the item was created, it may return all properties. If you set it to a time too far in the past, the action may time out. Set Since to @addHours(utcNow(), -24) to capture changes within the last 24 hours. For new items, the action returns all properties as changes.
Audit List Grows Too Fast
If your source list is large or frequently edited, the audit list can accumulate thousands of rows quickly. To manage growth, add a cleanup flow that deletes records older than 90 days. Alternatively, use a retention policy in the SharePoint list settings to automatically delete items after a set period.
Power Automate Trigger vs SharePoint Change Logging: Key Differences
| Item | Power Automate Flow | SharePoint Version History |
|---|---|---|
| Storage location | Separate audit list you control | Stored per item in the same list |
| Query across items | Yes – view all changes in one list | No – must open each item individually |
| Field-level detail | Captures old and new values per field | Shows version differences per field |
| Automation trigger | Can start other flows or send emails | No built-in trigger on version creation |
| Retention control | Manual or flow-based cleanup | Set version count limit in list settings |
Now you can set up a Power Automate flow to log every change from a SharePoint list to a dedicated audit list. This gives you a single view of all edits across items and allows you to build reports or alerts on the audit data. Start by creating the audit list with the required columns, then build the flow using the trigger and the Get changes action. For large lists, add a scheduled cleanup flow to keep the audit list manageable. Test the flow with a single item first before enabling it on a production list.