Home » Blog » SharePoint Online » 4+ Ways to Migrate SharePoint List to Another Site

4+ Ways to Migrate SharePoint List to Another Site

author
Published By Raj Kumar
Anuraag Singh
Approved By Anuraag Singh
Published On October 9th, 2024
Reading Time 10 Minutes Reading

Organizations that rely on Microsoft 365 often find themselves stuck whenever they have to migrate SharePoint list to another site. This scenario is a common occurrence whenever there is a need to merge workflows or share an assignment between employees Moreover, creating a new list from scratch is too time-consuming. So we have come up with a guide to help you out. Let us look at what options admins have at their disposal.

Methods to Move Items from One SharePoint List to Another

On the whole, we have three different ways in which we can duplicate an existing SharePoint list. Manual copy is the basic method that almost all users know of. Another more technical option is creating a Flow via Power Automate or making use of PowerShell scripts. And lastly, we have the easiest and most professional solution.

The manual method is only preferred when you have a small list that is a marginal improvement over new list creation. However, as the number of contents in a list increases so does the chance of failure while copying. That’s when admins decide to move on to Power Automate. Nevertheless, the complexities involved in setting up a Flow prove too much even for experienced personnel. PowerShell scripts are also error-prone.

That’s why the majority trust the tool and include it in their SharePoint Online migration checklist as well. Regardless of the situation, we can only fully grasp the limitations of the manual methods by looking at them firsthand. So let us start by discussing manual copying to know how to move SharePoint list to another site.

Default Way to Send List Items Across Sites

Even the copy mechanism has its sub-divisions. However, don’t confuse it with a copy document library from one site to another task as both are entirely different. Choose the path you want to take depending on how much resemblance the target list has to have with the source. Although Microsoft itself has no such definition based on our interaction with the lists app we found that users can either perform a soft copy or a hard duplication to migrate SharePoint list to another site. So let’s get straight to it.

Steps to Copy List Structure 

Lists can be part of SharePoint or exist as a separate application on Microsoft 365. Due to it being a low-use or more accurately a specific-use app you won’t see it in the default apps menu.

  • Step 1. To see the List toggle the More Apps >Select SharePoint > Open A Site > Open a Site > Click on New > Pick Lists from the Drop Down.
  • Step 2. Once you are on the Create a List window select From Existing List.
  • Step 3. Select the list that you want to copy and hit Next.
  • Step 4. Type a unique name and select a location. (Note other options like color and icon are optional and can be set afterward.)
  • Step 5. Click on Create.
  • Step 6. The copied list structure opens on your screen.

Now the reason to call it a soft copy must be clear. As users can see only the overall structure is duplicated while all the items themselves are missing. In case you are not satisfied with this type of result there is another way to make a one-on-one copy. For that steps vary a bit so much so that you have to revisit the original list.

Make a Complete Copy of the List Items to Another List in SharePoint

  • On the Source list click on the Export button.
  • From the Dropdown select Export to CSV.
  • Don’t Choose Excel as instead of an XLSX file you are given a query.iqy file. Moreover, you won’t be able to use this file in its current state as neither does SharePoint provide an option to load it nor does accept it with Excel or CSV type.
  • So first users will have to open this file in Excel and save it with the default “.xlsx” extension. Additionally, you have to log in to Excel with the same account that you got the list from. Otherwise, it won’t open.
  • Then create a new list in the same way as before. This time when you are on the Create a List window select “From CSV” or “Excel File”.
  • Click on Upload file and Browse for the recently available .csv/.xlsx file.
  • Select it and Click on Upload.
  • A preview of the rows appears, toggle the items you do not want to import, and Click Next to move SharePoint list to another site.
  • Follow from Step 4 onwards of the previous section.

Even the hard copy mechanism has its flaws like the automatic addition of new columns like Item Type and Path if you forget to remove it. Manual removal ends up extending the duration of the task resulting in productivity losses. Moreover, users should not go with CSV options as in our testing SharePoint Lists outright refused to accept them as valid source files.

This was despite being exported out of the same SharePoint account a few minutes earlier. So inter-user list comping is guaranteed to introduce issues. For those who are unfamiliar with Power Automate and Wish to try our flow creation can check out the next section.

Move List Item to Another List in SharePoint Using Power Automate

Go with the below steps.

  • Select Trigger: Choose “When an item is created or modified” and select the “Express Pickup Hold Rack” list from the SharePoint site using Power Automate triggers.
  • Add Condition: Check if the “Collected” column value is “YES”.
  • Create Item in Archive: In the “If yes” branch, add the “Create item” action, select the “Express Pickup Hold Rack Archive” list, and map the fields from the original item to the archive list.
  • Delete Original Item: Further, add the “Delete item” action to remove the item from the “Express Pickup Hold Rack” list after archiving.

This might sound simple but has possible points of failure in each of its steps. Moreover, in case of any non-apparent mistakes this flow can result in Power Automate depositing the SharePoint list items in an entirely different target.

PowerShell Script to Migrate SharePoint List to Another Site

To copy the SharePoint list to another site, you can opt for this free method. But also remembered, this method will only give the correct result if all of the commands are executed properly. Before going to perform this method also make sure that,

  1. You have administrator rights.
  2. You have created a separate list with the same column.
Install-Module -Name PnP.PowerShell

#Connecting to the Source SharePoint Site
Connect-PnPOnline -Url https://[entertenantname].sharepoint.com/sites/[source site] -Interactive

#Create the Template
Get-PnPSiteTemplate -Out C:\Temp\Lists.xml -ListsToExtract “List Y”, “List Z” -Handlers Lists

Get the List Data
Add-PnPDataRowsToSiteTemplate -Path C:\Temp\Lists.xml -List “List Y”
Add-PnPDataRowsToSiteTemplate -Path C:\Temp\Lists.xml -List “List Z”

#Connect to Target Site
Connect-PnPOnline -Url https://[entertenantname].sharepoint.com/sites/[destination SharePoint site] -Interactive

#Apply the Template
Invoke-PnPSiteTemplate -Path “C:\Temp\Lists.xml”

If the list contains attachments, then use the below PowerShell script to move items from one SharePoint list to another. But be careful while running this lengthy script.

#Function to copy attachments between list items
Function Copy-SPListAttachments()
{
param
(
[Parameter(Mandatory=$true)] [Microsoft.SharePoint.Client.ListItem] $SourceItem,
[Parameter(Mandatory=$true)] [Microsoft.SharePoint.Client.ListItem] $DestinationItem
)
Try {
#Get All Attachments from Source list items
$AllAttachments = Get-PnPProperty -ClientObject $SourceItem -Property “AttachmentFiles”
$AllAttachments | ForEach-Object {
#Download the Attachment to Temp
$File = Get-PnPFile -Connection $SourceConn -Url $_.ServerRelativeUrl -FileName $_.FileName -Path $Env:TEMP -AsFile -force
#Add Attachment to Destination List Item
$FileStream = New-Object IO.FileStream(($Env:TEMP+”\”+$_.FileName),[System.IO.FileMode]::Open)
$AttachmentDetails = New-Object -TypeName Microsoft.SharePoint.Client.AttachmentCreationInformation
$AttachmentDetails.FileName = $_.FileName
$AttachmentDetails.ContentStream = $FileStream
$AttachedFile = $DestinationItem.AttachmentFiles.Add($AttachmentDetails)
Invoke-PnPQuery -Connection $DestinationConn
#Delete the Temporary File
Remove-Item -Path $Env:TEMP\$($_.FileName) -Force
}}

Catch {
write-host -f Red “Error Copying Attachments:” $_.Exception.Message
}
}


Function Copy-SPAllListItems()
{
param
(
[Parameter(Mandatory=$true)] [Microsoft.SharePoint.Client.List] $SourceList,
[Parameter(Mandatory=$true)] [Microsoft.SharePoint.Client.List] $DestinationList
)
Try {

Write-Progress -Activity “Reading Source…” -Status “Getting Items from Source List. Please wait…”
$SrcListItems = Get-PnPListItem -List $SourceList -PageSize 500 -Connection $SourceConn
$SrcListItemsCount= $SrcListItems.count
Write-host “Total Number of List Items Found are:”$SrcListItemsCount

#Get fields to Update from the Source List – Skip Read only, hidden fields, content type and attachments
$SourceListFields = Get-PnPField -List $SourceList -Connection $SourceConn | Where { (-Not ($_.ReadOnlyField)) -and (-Not ($_.Hidden)) -and ($_.InternalName -ne “ContentType”) -and ($_.InternalName -ne “Attachments”) }


[int]$Count = 1
ForEach($SourceItem in $SrcListItems)
{
$ValueofItems = @{}

Foreach($SourceField in $SourceListFields)
{

If($SourceItem[$SourceField.InternalName] -ne $Null)
{
#Handle Special Fields
$FieldsType = $SourceField.TypeAsString

If($FieldsType -eq “User” -or $FieldsType -eq “UserMulti”) 
{
$PeoplePickerValues = $SourceItem[$SourceField.InternalName] | ForEach-Object { $_.Email}
$ValueofItems.add($SourceField.InternalName,$PeoplePickerValues)
}
ElseIf($FieldsType -eq “Lookup” -or $FieldsType -eq “LookupMulti”) # Lookup Field
{
$LookupIDs = $SourceItem[$SourceField.InternalName] | ForEach-Object { $_.LookupID.ToString()}
$ValueofItems.add($SourceField.InternalName,$LookupIDs)
}
ElseIf($FieldsType -eq “URL”) #Hyperlink
{
$URL = $SourceItem[$SourceField.InternalName].URL
$Description = $SourceItem[$SourceField.InternalName].Description
$ValueofItems.add($SourceField.InternalName,”$URL, $Description”)
}
ElseIf($FieldsType -eq “TaxonomyFieldsType” -or $FieldsType -eq “TaxonomyFieldsTypeMulti”)
{
$TermGUIDs = $SourceItem[$SourceField.InternalName] | ForEach-Object { $_.TermGuid.ToString()}
$ValueofItems.add($SourceField.InternalName,$TermGUIDs)
}
Else
{

$ValueofItems.add($SourceField.InternalName,$SourceItem[$SourceField.InternalName])
}}}

#Copy Created by, Modified by, Created, Modified Metadata values
$ValueofItems.add(“Created”, $SourceItem[“Created”]);
$ValueofItems.add(“Modified”, $SourceItem[“Modified”]);
$ValueofItems.add(“Author”, $SourceItem[“Author”].Email);
$ValueofItems.add(“Editor”, $SourceItem[“Editor”].Email);

Write-Progress -Activity “ List Items starts copying:” -Status “Copying Item ID ‘$($SourceItem.Id)’ from Source List ($($Count) of $($SrcListItemsCount))” -PercentComplete (($Count / $SrcListItemsCount) * 100)

#Copy column value from Source to Destination
$NewItem = Add-PnPListItem -List $DestinationList -Values $ValueofItems

#Copy Attachments
Copy-SPListAttachments -SourceItem $SourceItem -DestinationItem $NewItem

Write-Host “Copied Item ID from Source to Destination List:$($SourceItem.Id) ($($Count) of $($SrcListItemsCount))”
$Count++
}
}
Catch {
Write-host -f Red “Error:” $_.Exception.Message
}
}

#Set Parameters
$SourceSiteURL = “https://[tenantnamehere].sharepoint.com/sites/[sitenamehere]”
$SourceListName = “[listnamehere]”

$DestinationSiteURL = “https://[tenantnamehere].sharepoint.com/sites/[sitenamehere]”
$DestinationListName = “[listnamehere]”

#Connect to Source and destination sites
$SourceConn = Connect-PnPOnline -Url $SourceSiteURL -Interactive -ReturnConnection
$SourceList = Get-PnPList -Identity $SourceListName -Connection $SourceConn

$DestinationConn = Connect-PnPOnline -Url $DestinationSiteURL -Interactive -ReturnConnection
$DestinationList = Get-PnPList -Identity $DestinationListName -Connection $DestinationConn


Copy-SPAllListItems -SourceList $SourceList -DestinationList $DestinationList

Automated Way to Migrate SharePoint List to Another Site

The solution is the Most Reliable SharePoint Migration Tool. This is the first choice for all situations where a data transfer between two SharePoint locations is required. In addition, with an easy-to-use interface and the ability to copy every SharePoint list on a Site, this is the best solution so let’s see how it works.

Download Now Purchase Now

In a few simple steps, any admin can conduct a mass movement of SharePoint links in both inter and intra-tenant situations.

  • Launch the utility on your workstation and select Office 365 (As SharePoint is part of this Cloud Suite) as both your source and destination.
  • In the workload scroll down till you find the SharePoint Sites option. There mark the box next to lists. If you want there is also the ability to setup a Date filter as well.
    Select Workload & Apply Filters
  • Next comes Source Validation which uses the admin-level credentials and application ID. Press Next to continue.
  • Likewise, Validate the Target as well and move on to the next screen.
    Validate Credentials
  • On the user/Site mapping page, you have three options. Fetch, Import CSV, or Download edit, and upload template.
    Compete Mapping
  • Wait for the results to appear on the preview screen. Validate and Start Migration to migrate SharePoint list to another site.
    Start migration

This tool makes it possible to replicate the site lists and if you want even perform a complete SharePoint Tenant to Tenant Migration for your organization.

Conclusion

In this write-up, we taught users how to migrate SharePoint list to another site. Among all the manual methods which included soft copy, hard copy, PowerShell script, and Power Automate flow one issue or the other popped up. So as an alternative, it is better to rely on a tried and tested professional solution.


Connect With Us

+9111-28084986