Let's POWER Automate

From no-code to low-code

Menu
  • Expressions
  • Filters
  • General
  • Application specific solutions
    • Dataverse
    • Excel
    • Forms
    • Outlook
    • Planner
    • Power Apps
    • SharePoint
    • Teams
  • Triggers
  • Ready to use solutions
    • Approval Process Template
    • Task Delegation App
    • The Ultimate Power Automate expressions cheat sheet
    • Power Automate HTTP requests to SharePoint cheat sheet
    • Power Automate HTTP requests to Graph API cheat sheet
  • ABOUT ME
  • Get help with your flow
  • POWER PLATFORM SERVICES
Menu

How to synchronise two SharePoint lists with Power Automate

Posted on April 27, 2022April 27, 2022 by Tom

“I’d like to synchronise all the changes in a SharePoint lists listA in a listB, what would such Power Automate flow look like?”


One of the missing features of SharePoint is that it’s impossible to set permissions on a column. You can set a unique permission on each item, but not on a specific column in that item. If you need to do that, e.g. to keep basic user information available while restricting access to his salary, you’ll need a workaround. A solution that often consists of two SharePoint lists. One list with all the public data, and another list with restricted access that extends the data by the extra columns.

But to make it work you’ll need also a flow. A flow that would synchronise all the changes from the first list in the second list. If there’s a new item, create a new item, if there’s an update, update the corresponding item, and if an item is deleted, mark it as deleted in the second list (or delete it). What such flows would look like will be the topic of this post.

Prerequisite: the second list should have a column called ‘OriginalID’ to easily connect the items.

Create or update existing item

The solution consists of two flows, one for the new/updated items, and one for the deleted items.

The flow to process new items and update the existing ones will be the same flow as when checking if SharePoint item already exists. Take the ID of the item that triggered the flow, and do a lookup on the second list. This is the place where you’ll use the ‘OriginalID’ to connect the items. If there’s no item with such id, create new item. Otherwise use the returned ID to update the existing one.

OriginalID eq '<current item ID>'

Note: < … > is a placeholder, replace it including the < and >.

Power Automate SharePoint list synchronise

Don’t forget to set the ‘OriginalID’ column when creating the new item (with the ID from the trigger output)!

Delete or mark deleted items

The first flow took care of the new/update items, now it’s time to process also the deleted ones. This will need another flow with the trigger ‘When an item is deleted’. It’ll be very similar to the first one, just with a different trigger. Once an item is deleted, search for the corresponding item in the second list as before. If it finds the item (and it should always find the item if the flows work), you can either delete it, or update some column, e.g. status to DELETED to keep the information.

Power Automate SharePoint list synchronise

Summary

When you synchronise two SharePoint lists, you should consider using two Power Automate flows. One flow to handle the new and updated items, and a second one, often forgotten, to handle also the deleted ones. The flows themselves are then very simple as you could see in this article.


πŸš€ Master Power Automate

Join 2,000+ professionals getting actionable Power Automate tutorials, solutions, cheat sheets & tips every week.

No spam. Unsubscribe anytime.

22 thoughts on “How to synchronise two SharePoint lists with Power Automate”

  1. J R Abella says:
    May 2, 2022 at 1:22 am

    Excelent! Thansk for sharing this!

    Reply
  2. Srilaxmi says:
    June 8, 2022 at 8:44 am

    How to achieve these things using scheduled flows? When I try that, one ‘apply to each’ action is getting created in the other ‘apply to each’ action which is creating duplicate items in the target list. I recently started learning power automate. Could anyone help me please? Thanks in advance! πŸ™‚

    Reply
    1. Tom says:
      June 12, 2022 at 8:47 pm

      Hello Srilaxmi,
      my guess would be that you’re having some multiple selection column in the list, e.g. people picker, choice, lookup… If you have a multiple selection column then flow wants to process each selection separately in a loop = it’s adding an extra loop. Such columns must be preprocessed, e.g. https://tomriha.com/how-to-update-multiple-people-or-group-column-in-power-automate/ or https://tomriha.com/what-value-to-use-to-input-entire-array-in-power-automate/.

      Reply
    2. Pradeep Khanna says:
      April 6, 2023 at 11:35 am

      @Srilaxmi, unless there is a desperate Need to keep the two lists Synchronous in Real-Time, you can think of a time-based trigger: run the task every day or twice a day or so on (you can choose the periodicity). Compare each item on modified date, and whichever one has a more recent update date-time stamp, feed that into the other list. Alternately (Slower performance, and depending on number of columns in metadata), you compare field-on-field, using “Get Changes of an Item or a File (properties only)”. This should work for most cases, unless you have two lists popular enough to have Many-many changes every minute.

      Reply
  3. Vinay says:
    August 3, 2022 at 5:28 pm

    I’m trying to sync files and folders from a Teams/ Sharepoint folder in one organisation, where I am an owner, to a Sharepoint folder belonging to another organisation, where I am a guest.

    Basically it refuses to take the latter site address. Asks me to pick one “from the dropdown”. Is this not possible at all?

    Reply
    1. Tom says:
      August 9, 2022 at 6:16 pm

      Hello Vinay,
      I believe that the standard M365 actions are restricted to the tenant where the Power Platform environment is located. To connect to another tenant you’d need an Azure registered application and the general HTTP request action to do the operations using HTTP requests through the application.

      Reply
  4. Jake says:
    September 16, 2022 at 12:12 am

    I’m looking to simply copy items over from one list to another when they’re added or modified, so I only followed the first half of the instructions. My flow triggers as expected and shows as running successfully, but the data never appears in the new list. In the create and update actions, I’ve tried adding dynamic content from both the source and the target and neither seems to work. It always runs successfully but no data appears in the second list.

    Reply
    1. Tom says:
      September 18, 2022 at 7:27 pm

      Hello Jake,
      that’s something you’ll have to check in the flow run history.
      – how is the ‘Condition’ evaluated, is it correct? Does it go into the ‘Create item’ or ‘Update item’ branch?
      – does the action happen or is it grey/light green?
      – do you have some multiple selection field in the lists (is there an extra ‘Apply to each’)? Does it have any value?

      Reply
      1. Patricia A Malloy says:
        March 29, 2023 at 9:45 pm

        Hello Tom,

        I’m having the same issue has Jake. For me the Action “Create item” is light green. I can’t view the contents of it.

        Trish

        Reply
        1. Tom says:
          April 9, 2023 at 1:12 pm

          Hello Patricia,
          light green means that the action was skipped, in your case it probably went into the If No branch of the condition.

          Reply
  5. Alex says:
    October 13, 2022 at 12:05 am

    I had the same issue as Jake, trying to troubleshoot but no look so far. Appears to succeed in run history but no data beyond the ID from the original new item is transferred.

    Reply
    1. Alex says:
      October 13, 2022 at 12:05 am

      *luck

      Reply
      1. Tom says:
        October 23, 2022 at 4:14 pm

        Hello Alex,
        try to debug the flow – add a few ‘Compose’ actions in it, enter the dynamic contents you want to track in these ‘Compose’ actions, and then you can track in the flow run history what’s happening and if some of these actions contains a different value than you’d expect.

        Reply
  6. Helen says:
    February 10, 2023 at 3:52 am

    Hi, thanks for sharing this great tips. However, I have followed the steps in my flow but couldn’t save the flow as it turned me with “Flow save failed with code ‘InvalidTemplate’ and message ‘The template validation failed: ‘The action(s) ‘Get items’ referenced by ‘inputs’ in action ‘Condition’ are not defined in the template.’.’.”

    Could you please help me to fix this? Thanks in advance!

    Reply
    1. Tom says:
      February 22, 2023 at 7:13 pm

      Hello Helen,
      the action is telling you that you’re using output of action ‘Get items’ but such action doesn’t exist in your flow. This often happens when you build an expression, use the ‘Get items’ output, and then rename the action. You should either return to the original name or check where you’re using the output and rename it according to the new action name.

      Reply
  7. Brandon says:
    June 8, 2023 at 2:54 pm

    Hi Tom, my flow is forcing “If yes -> Create item” into an “Apply to each” loop once I’ve added “OriginalID,” “Title,” or any other value from “Get items”; I have yet to complete/see effect of this, but how does yours not force this?

    Reply
    1. corner says:
      July 19, 2023 at 11:34 am

      I was struggling as well and then I realized that under “Create Item” I was using dynamic content from “Get Items” step instead of “When an item is created or modified”!

      Reply
  8. Brandon says:
    June 8, 2023 at 3:26 pm

    RE: forced “Apply to each loop”,

    “`
    The execution of template action ‘Apply_to_each’ failed: the result of the evaluation of ‘foreach’ expression ‘@triggerOutputs()?[‘body/ID’]’ is of type ‘Integer’. The result must be a valid array.
    “`
    –in setting the original trigger’s “ID” field to the “Apply to each,” as I don’t know what else would be logical to go in this forced-field, flow fails upon test trigger

    Reply
    1. Tom says:
      August 12, 2023 at 10:47 pm

      Hello Brandon,
      as already said in the comments, you must reference the flow trigger when creating the item, you use output from ‘Get items’ only for updates.

      Reply
  9. Thomas says:
    July 6, 2023 at 6:24 pm

    Thanks for sharing this!

    Would appreciate some troubleshooting pn the implementation; the Update and Delete functions are working great, but my Create function doesn’t work. Any thoughts on what I did wrong?

    Thanks!

    Reply
    1. Thomas says:
      July 6, 2023 at 7:34 pm

      I figured it out.. I had created an apply to each loop just before the create list item function.. working now!

      Reply
  10. Tandy says:
    August 29, 2023 at 5:18 pm

    Thanks Tom for the suggestion. I had a request to have items that were added to the out-of-the-box special Event list on a SharePoint site, and have those items flood over and stay updated in a regular SharePoint List. So it’s not just a simple list to list sync. But amazingly I was able to model a process after this one to get it to work. Thank you for sharing your expertise!

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

πŸš€ Master Power Automate

Join 2,000+ professionals getting actionable Power Automate tutorials, solutions, cheat sheets & tips every week.

No spam. Unsubscribe anytime.

Still exchanging emails to get things approved?

Use the Approval Process Template and the Task Delegation App to skip the hard part and deploy an automated, fully functional approval solution on a SharePoint list in minutes! And then the next one, and the next one...

Approval Template Preview ✨ Learn more ✨

Turn ideas into flows with ease!

Grab the complete Power Automate Cheat Sheet Bundleβ€”everything you need to master expressions, SharePoint HTTP calls, and Graph API in Power Automate.

Cheat Sheet Bundle Preview ✨ Get the Cheat Sheets

Didn't find what you were looking for?
Need to adjust a solution to fit your needs?
Or would you just like to get an assistance from somebody with thousands of hours of experience with Power Automate?

Power Automate blogs worth visiting

Damien Bird
Dennis (Expiscornovus)
Paul Murana

©2025 Let's POWER Automate | Theme by SuperbThemes