The process of building custom applications and tools that interact with Microsoft SharePoint, including SharePoint Online in Microsoft 365.
Dear John,
From my research, there are three routes, and the right one depends on scope.
Cross tenant SharePoint migration is the best native option and preserves content, metadata, versions and timestamps. Worth noting it operates at site level rather than per library, so it suits you if the library can move as part of its whole site. It also requires your organization to meet the licensing and eligibility requirements, and the target site must not already exist, as the move cannot merge into one.
Reference: Cross-tenant SharePoint site migration overview
PnP PowerShell or Graph has no single command for this. You would be building a custom migration tool: connect to both tenants, recreate content types, site columns and views, rebuild the folder hierarchy, stream each file across, then reapply metadata. Simple text, number, date, choice and URL fields are straightforward. Person, Managed Metadata, Lookup, Content Type and Document Set fields all need explicit mapping, since the identities and term IDs differ between tenants. Workable for a controlled library, but it needs real validation and error handling.
Rather than starting from scratch, there is a community sample in the PnP script samples repository that does exactly this scenario: Copy a library across tenants. It is a good base to adapt, though as a community sample it is not officially supported, so please review how it handles your specific column types and test it against a copy of the library first.
Power Automate can hold separate connections to each tenant and copy files with their metadata, but I would not use it as a primary migration method. Throttling, timeouts, file size limits, folder recursion and duplicate creation on retry all become problems at scale, and preserving Created, Created By, Modified and Modified By is difficult. It is fine for a small, controlled set of files.
In short, use cross tenant migration if you qualify and can move at site level. Otherwise a PnP PowerShell script is your best native option, with a third party tool being the pragmatic choice if versions and system properties must be preserved exactly.
I hope this information helps clarify the situation and provides you with workable solutions. Should you have any further questions or need additional assistance, please don't hesitate to reach out. I'm always happy to help. Have a wonderful day!
If the answer is helpful, please click "Yes" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in the forum documentation to enable e-mail notifications if you want to receive the related email notification for this thread.