How to migrate Microsoft 365 Groups and Planner plans to another tenant
Microsoft has no native tool that moves a Microsoft 365 group or its Planner plans between tenants. This guide shows how to inventory them, recreate each group with its owners, members and settings, and rebuild plans with the Microsoft Graph Planner API.
How do you migrate Microsoft 365 Groups and Planner plans to another tenant?
Microsoft has no built-in tool that moves a Microsoft 365 group (a shared inbox, calendar, site and plans for a team) or its Planner plans to another Microsoft 365 tenant (your organisation's own Microsoft 365 setup). In a Microsoft 365 tenant-to-tenant move you recreate each group in the new tenant with its owners, members and settings, move its SharePoint site separately, and rebuild plans with a script, by hand or with a third-party tool.
- Recommended route: Recreate groups and rebuild plans with Microsoft Graph PowerShell
- Order: People first, then the group itself, then everything that hangs off it: site, conversations and plans.
- 7 phases: Take stock, Prepare the new tenant, Recreate the groups, Move connected content, Rebuild the plans, Cut over and Retire the old groups.
- You're done when: Every kept group is in the new tenant with matching owners, members, settings and its original address.
Group conversations and the group calendar need a tool or stay behind. The time depends on how many groups and plans you keep, so retire what nobody uses first.
No third-party licence, repeatable from your inventory, and you can test it on a pilot group and run it again.
Other options and when to use them
- Export to Excel and rebuild by hand: A few groups, or small and finished plans. The export is a record only: it cannot be imported back into Planner.
- Third-party migration tool such as BitTitan MigrationWiz, ShareGate Migrate or AvePoint Fly: You need group conversations, task comments or attachments moved, or you have a large estate.
People first, then the group itself, then everything that hangs off it: site, conversations and plans. Each later step points at a person or a group that must already exist in the new tenant.
- Inventory, with owners marking each group and plan Keep, Archive or RetireEvery kept group costs the same effort, so retiring first shrinks the whole project.
- Owners, members and task assignees in the new tenantMemberships and Planner assignments point at the new accounts' IDs, so the accounts must exist first.
- Groups recreated on a temporary address, with welcome emails offYour real domain is still in the old tenant, and members should not get surprise welcome emails.
- Each group's SharePoint sitePlans link to files on the site, so the site moves before the plans are rebuilt.
- Conversations and calendar, where a group needs themOnly a tool can copy them, and it needs the new group to exist.
- Planner plans, after every plan is exported to ExcelPlans live inside groups and need the migration account as a group member. The export is your record of what a rebuild loses.
- Cutover: source frozen, real addresses set, owners sign offGroups can only take their real addresses once the domain is verified in the new tenant.
- Source groups retiredDeleting a group deletes all its plans, so it goes last.
Built-in and third-party tools treat these differently. Tick each one off once you have decided.
Download this checklist (Excel)How each tool handles it
Built-in methodNo built-in move. Microsoft Graph creates a group with at most 20 owners and members combined in one call, so you add the rest afterwards. Cross-tenant sync copies Microsoft 365 groups only as security groups, which are not the same thing.BitTitan MigrationWizIn a Teams migration, copies static memberships in the final pass. Dynamic memberships arrive as static and must be recreated.Tip: Create each group with a few owners, then add everyone else by script from the mapping sheet.
Microsoft Learn: Create group (Microsoft Graph)How each tool handles it
Built-in methodAdding members to a new group can send each one a welcome email, unless UnifiedGroupWelcomeMessageEnabled is set to false first.BitTitan MigrationWizIn a Teams migration, adds memberships in the final pass to limit notifications.Tip: Run Set-UnifiedGroup -UnifiedGroupWelcomeMessageEnabled:$false on every new group before adding members.
Microsoft Learn: Set-UnifiedGroupHow each tool handles it
Built-in methodNo built-in move. A group cannot use an address on a domain still verified in the old tenant, so it starts on the new tenant's onmicrosoft.com or another verified domain and gets its real address after the domain moves.Tip: Keep each group's original addresses in the inventory and set them in one Set-UnifiedGroup pass straight after the domain is verified.
Microsoft Learn: Set-UnifiedGroupHow each tool handles it
Built-in methodNo built-in move. Read settings with Get-UnifiedGroup in the old tenant and set them with Set-UnifiedGroup in the new one.Tip: Export settings and aliases together, so one CSV drives both.
Microsoft Learn: Set-UnifiedGroupHow each tool handles it
Built-in methodMicrosoft's built-in tenant-to-tenant site move (cross-tenant SharePoint migration) can move it once the new group exists, but that group must be created with the special ProvisionSiteOnDemand method. A group created the generic way gets its own new site, and the site move then fails. The built-in site move also needs the Cross-Tenant Shared Data Migration licence, sold only under an Enterprise Agreement (a volume licensing contract Microsoft signs directly with large organisations).ShareGate MigrateCopy teams creates the new group and its connected site itself. Destination users must already exist.Tip: Flag every group whose site is moving and create those as the SharePoint guide describes, not with the generic script.
Microsoft Learn: Cross-tenant migration (FastTrack)How each tool handles it
Built-in methodMicrosoft documents no way to move group conversations or the group calendar between tenants.BitTitan MigrationWizCopies the group Inbox and Primary Calendar once, with no sync, and some conversations may not stay nested. It uses EWS (an older Exchange connection), which Exchange Online turns off by default since 1 October 2026, so allow the app's ID first.AvePoint FlyLists Microsoft 365 group mailboxes among the mailbox types it migrates across tenants.Tip: Only license a tool if enough groups need history. Record the decision per group.
Microsoft Learn: Cross-tenant migration (FastTrack)How each tool handles it
Built-in methodNo built-in move. A Graph script can recreate the buckets, tasks, assignees, dates, labels and checklists it reads from the source. Export to Excel gives a record only; it cannot be imported back.BitTitan MigrationWizCopies plans, buckets and tasks with assignees, labels, dates, checklists, notes and comments.ShareGate MigrateCopies Planner plans with the team when you migrate it.Tip: Export every plan to Excel first, whatever method you choose.
Microsoft Learn: Use the Planner REST APIHow each tool handles it
Built-in methodWith a script, the new tenant records your migration account and the run date as the creator and created date. Completion history stays only in the Excel export, and the script steps here do not copy comments.BitTitan MigrationWizCreated-by, created, last-modified and completed dates are not migrated.Tip: Store each plan's export with the group's records in the new tenant, and tell owners in advance.
Microsoft Support: Export a plan to ExcelHow each tool handles it
Built-in methodWith a script, task references keep the old site addresses unless you replace them. They break once the old site is locked or deleted.BitTitan MigrationWizRemaps files uploaded to a task and links to files in the team's site. External links are not remapped.Tip: Rebuild plans after the group site has moved, and swap old site addresses for new ones as you write task details.
How each tool handles it
Built-in methodMicrosoft says premium plans and tasks are not available in the Planner API, so inventory and rebuild scripts cannot see or copy them.BitTitan MigrationWizNot stated in BitTitan's documentation: test it in your pilot.Tip: Ask owners directly, because premium plans are missing from your script inventory.
Microsoft Learn: Use the Planner REST APIHow each tool handles it
Built-in methodRecreating the group does not create its team. Channels, channel conversations and tabs are planned with the Teams work.ShareGate MigrateCopies a team with its channels, files, Planner plans and connected group. Shared channels are skipped.BitTitan MigrationWizCopies public and private channels, 60 conversations per team by default (up to 1,000), and Planner. Shared channels are not migrated.Tip: Decide Teams and Planner together for each group, so the same tool or method covers both.
How each tool handles it
Built-in methodNot part of mailbox data migration. Microsoft says to pre-create them in the new tenant.Tip: Handle them in the same batch as your groups, with the same temporary address rule.
Microsoft Learn: Cross-tenant migration (FastTrack)How each tool handles it
Built-in methodThe new tenant's group naming policy can add prefixes or suffixes and block words, but Microsoft says it does not apply to Global Administrator or User Administrator. Group creation may be restricted to some people.Tip: Run the scripts as one of those roles, and check the migration account is allowed to create groups.
How each tool handles it
Built-in methodDeleting a group deletes all the plans it contains. Restoring the group restores its plans.Tip: Make "Excel export filed" and "owner sign-off" required columns in your decommission checklist.
Microsoft Learn: Use the Planner REST API
- 1
Take stock
Before you build anythingShow the detailed steps (5) →Watch out: With a script: premium plans are not available to the Planner API, so the inventory and rebuild scripts cannot see them.
Ways around it
- Rebuild premium plans by hand from the Excel export, or budget a vendor tool that supports them.
- 2
Prepare the new tenant
Show the detailed steps (3) →Watch out: A domain can be in only one tenant, so groups cannot take their real addresses until cutover.
Ways around it
- Create groups on a temporary address and set the original one straight after the domain moves.
- 3
Recreate the groups
Watch out: With Microsoft Graph: one create call takes at most 20 owners and members combined.
Ways around it
- Create the group with a few owners, then add everyone else afterwards.
Show the detailed steps (5) →Watch out: Microsoft's built-in site move: a site-connected group created the generic way gets a new site of its own, and the site move then fails.
Ways around it
- Flag every group whose site is moving and create those as the SharePoint guide describes.
- 4
Move connected content
Show the detailed steps (4) →Watch out: Microsoft documents no way to move group conversations or the group calendar.
Ways around it
- Keep the old group read-only for reference, and only buy a tool if enough groups need history.
Tools that can do it
- BitTitan MigrationWizCopies the group Inbox and Primary Calendar once, with no sync. It uses EWS, which Exchange Online turns off by default since 1 October 2026, so allow the app's ID first.
- AvePoint FlyLists Microsoft 365 Group mailboxes among the mailbox types it migrates across tenants.
- 5
Rebuild the plans
After the group site has movedWatch out: With a script: original creators, created dates, completion history and comments do not carry over.
Ways around it
- Store the Excel exports with the group's records and tell owners in advance.
Tools that can do it
- BitTitan MigrationWizCopies plans with assignees, dates, checklists and comments. Created-by and created dates still do not move.
- ShareGate MigrateCopies Planner plans with the team when you migrate it.
Show the detailed steps (6) →Watch out: Excel exports cannot be imported back into Planner.
Ways around it
- Use the export as a record and rebuild small plans by hand.
- 6
Cut over
Watch out: With a script or by hand, changes made in the old tenant after your export do not reach the new tenant.
Ways around it
- Freeze the old groups on a set date, and remind owners again on the day.
Turn this phase into dated tasks with the cutover planner
Show the detailed steps (4) → - 7
Retire the old groups
After the agreed retention periodShow the detailed steps (2) →Watch out: Deleting a group also deletes all its plans.
Ways around it
- Restore it from Deleted groups if needed: restoring the group restores its plans.
- Every kept group is in the new tenant with matching owners, members, settings and its original address.
- Every rebuilt plan has the same bucket and task counts as the inventory.
- Mail to each group arrives in the new tenant, and members got no surprise welcome emails.
- Every owner has signed off, and the migration account is removed.
Tools named in this plan are independent third-party products, not endorsed by the platform vendor and not paid placements. Check the tool's own documentation and run a pilot first.
What does each step involve?
Open a part when you reach it in the plan. Each step says where to go, what to do and what you should see.
About this migrationWhat it covers, limits at a glance
A Microsoft 365 group is more than a membership list. It owns a shared mailbox and calendar, a SharePoint site, Planner plans and often a team. Microsoft's FastTrack cross-tenant migration documentation lists Microsoft 365 Groups and Microsoft Planner among the products it does not support, and asks customers to pre-create groups in the target tenant. You therefore rebuild the group object yourself, then move each connected workload with the right tool.
Run this work as part of the wider Microsoft 365 tenant-to-tenant migration. Target users must exist before you start, because owners, members and Planner assignments all point at target user IDs.
1What you need before step one
| Need | Details | Where to get it |
|---|---|---|
| Admin roles | Groups Administrator (or User Administrator) in both tenants to read and create groups; Exchange Administrator for Set-UnifiedGroup. The account that rebuilds plans must be a member of each target group. | Microsoft Entra admin center, https://entra.microsoft.com |
| Target users | Every owner, member and task assignee already created (and licensed) in the target. | Entra ID cross-tenant guide |
| Microsoft Graph PowerShell | For inventory, group creation and the Planner rebuild. Scopes used: Group.Read.All, Group.ReadWrite.All, User.Read.All, Tasks.Read, Tasks.ReadWrite. | Install Microsoft Graph PowerShell and connect with scopes |
| Exchange Online PowerShell | For group addresses, privacy and delivery settings. | Connect to Exchange Online PowerShell |
| A working folder | The scripts write to C:\migration. Create it first. | Your admin PC |
| A mapping spreadsheet | Source UPN, target UPN, source object ID and target object ID for every person. | Identity and licence mapping sheet template |
2Understand what moves and what you rebuild
Decide the route for each part of a group before you touch the target tenant.
| Group component | Native cross-tenant move? | Route |
|---|---|---|
| Group object, owners, members | No | Recreate with Microsoft Graph PowerShell |
| Email addresses and aliases | No | Add with Set-UnifiedGroup after the domain is verified in the target |
| Group settings (privacy, external senders, subscriptions) | No | Read with Get-UnifiedGroup, set with Set-UnifiedGroup |
| Group-connected SharePoint site | Yes, with SharePoint cross-tenant migration | Pre-create the group in the target first |
| Group mailbox conversations and calendar | Not documented by Microsoft | Third-party migration tool, or archive and start fresh |
| Planner plans, buckets and tasks | No | Export to Excel, script with the Graph Planner API, or use a third-party tool |
| Teams chats and channels | Partly | See the Teams chat migration guide |
3Inventory groups, owners, settings and plans5 steps
- 1
List every Microsoft 365 group
Where: PowerShell 7 on your admin PC, connected to the source tenant with Connect-MgGraphInstall the module if needed (how-to), sign in to the source tenant in the browser window that opens and accept the scopes, then export each group with its mail nickname and visibility.
Install-Module Microsoft.Graph -Scope CurrentUser Connect-MgGraph -Scopes "Group.Read.All","Tasks.Read" Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -All | Select-Object Id,DisplayName,MailNickname,Mail,Visibility | Export-Csv C:\migration\groups.csv -NoTypeInformationYou should see: C:\migration\groups.csv has one row per Microsoft 365 group with Id, DisplayName, MailNickname, Mail and Visibility. - 2
Export owners and members
Where: Same PowerShell session (source tenant)Record owners and members by user principal name so you can map them to target accounts.
$groups = Import-Csv C:\migration\groups.csv foreach ($g in $groups) { Get-MgGroupOwner -GroupId $g.Id -All | ForEach-Object { [pscustomobject]@{Group=$g.MailNickname; Role="Owner"; UPN=$_.AdditionalProperties.userPrincipalName} } Get-MgGroupMember -GroupId $g.Id -All | ForEach-Object { [pscustomobject]@{Group=$g.MailNickname; Role="Member"; UPN=$_.AdditionalProperties.userPrincipalName} } } | Export-Csv C:\migration\group-membership.csv -NoTypeInformationYou should see: C:\migration\group-membership.csv has columns Group, Role and UPN, with at least one Owner row per group. - 3
Export Exchange settings and aliases
Where: Exchange Online PowerShell on your admin PC, connected to the source with Connect-ExchangeOnlineGraph does not show every mail setting. Use Exchange Online PowerShell for addresses, privacy and delivery settings. To install and connect, see Connect to Exchange Online PowerShell.
Connect-ExchangeOnline Get-UnifiedGroup -ResultSize Unlimited -IncludeAllProperties | Select-Object DisplayName,PrimarySmtpAddress,@{n="EmailAddresses";e={$_.EmailAddresses -join ";"}},AccessType,HiddenFromAddressListsEnabled,HiddenFromExchangeClientsEnabled,RequireSenderAuthenticationEnabled,AutoSubscribeNewMembers | Export-Csv C:\migration\group-settings.csv -NoTypeInformationYou should see: C:\migration\group-settings.csv lists each group's addresses and settings. - 4
List Planner plans per group
Where: Microsoft Graph PowerShell session from the first step (source tenant)Plans live inside groups. Record each plan with its bucket and task count so you can check the rebuild later.
foreach ($g in $groups) { Get-MgGroupPlannerPlan -GroupId $g.Id | ForEach-Object { [pscustomobject]@{ Group = $g.MailNickname Plan = $_.Title PlanId = $_.Id Buckets = (Get-MgPlannerPlanBucket -PlannerPlanId $_.Id).Count Tasks = (Get-MgPlannerPlanTask -PlannerPlanId $_.Id -All).Count } } } | Export-Csv C:\migration\plans.csv -NoTypeInformationYou should see: C:\migration\plans.csv lists every basic plan with its PlanId, bucket count and task count. - 5
Agree what to retire
Where: Your inventory spreadsheet (Mailbox and data inventory template), with a "Keep / Archive / Retire" columnSend each owner their rows from
groups.csvandplans.csvand ask which groups and plans are still used. Archive completed plans as Excel exports (Step 6) instead of rebuilding them.You should see: Every group and plan row has an owner decision of Keep, Archive or Retire.
4Prepare the target tenant3 steps
- 1
Create and license target users
Where: Microsoft 365 admin center (target) > Users > Active users, or the Entra ID cross-tenant guideOwners, members and task assignees must exist in the target. Create them with Bulk create users in Microsoft 365 or the Entra ID cross-tenant guide. Then add target UPN and target object ID columns to your mapping sheet and save it as
C:\migration\group-membership-mapped.csvwith columns Group, Role and TargetUPN.# Target tenant: object IDs for the mapping sheet Connect-MgGraph -Scopes "User.Read.All" Get-MgUser -All | Select-Object Id,UserPrincipalName | Export-Csv C:\migration\target-users.csv -NoTypeInformationYou should see: Every UPN in group-membership.csv has a matching TargetUPN and target object ID. - 2
Plan the domain move
Where: Microsoft 365 admin center (target) > Settings > DomainsA group cannot use an address on a domain that is still verified in the source tenant. Until the domain moves, create groups with an address on the target's initial or another verified domain, then add the final address at cutover. See moving a domain between tenants.
You should see: You know which verified target domain the groups will use until cutover. - 3
Check group creation policy and naming
Where: Microsoft Entra admin center (target) > Microsoft Entra ID > All groups > Groups > Naming policy, and Microsoft Graph PowerShell (beta) for creation settingsOpen Naming policy and note any prefix, suffix or blocked words. Microsoft says the naming policy does not apply to Global Administrator or User Administrator, so run the scripts as one of those if you want names unchanged. Check whether group creation is restricted with the
Group.Unifieddirectory setting (EnableGroupCreationandGroupCreationAllowedGroupId) and make sure the migration account is allowed.Connect-MgGraph -Scopes "Directory.Read.All" (Get-MgBetaDirectorySetting | Where-Object { $_.DisplayName -eq "Group.Unified" }).ValuesYou should see: Either no Group.Unified setting is returned (defaults apply) or EnableGroupCreation is True, or the migration account is in the allowed group.
5Recreate groups, owners and members5 steps
- 1
Create each group with Microsoft Graph
Where: PowerShell 7 on your admin PC, connected to the target tenant with Connect-MgGraphSet
groupTypestoUnifiedwithmailEnabledtrue andsecurityEnabledfalse. Microsoft allows up to 20 relationships, such as owners and members combined, in the create call. Add owners at creation and members afterwards. If the group's SharePoint site will move with Microsoft's cross-tenant SharePoint migration, create it the way the SharePoint guide describes instead.Connect-MgGraph -Scopes "Group.ReadWrite.All","User.Read.All" $params = @{ displayName = "Marketing" description = "Marketing team" groupTypes = @("Unified") mailEnabled = $true mailNickname = "marketing" securityEnabled = $false visibility = "Private" "owners@odata.bind" = @( "https://graph.microsoft.com/v1.0/users/<targetOwnerObjectId>" ) } $group = New-MgGroup -BodyParameter $paramsYou should see: $group.Id holds the new group ID, and the group appears in the Microsoft Entra admin center under Groups > All groups. - 2
Turn off welcome messages
Where: Exchange Online PowerShell connected to the target with Connect-ExchangeOnlineBulk-adding members to a new group can send each one a welcome email. Switch it off before adding members.
Connect-ExchangeOnline Set-UnifiedGroup -Identity "Marketing" -UnifiedGroupWelcomeMessageEnabled:$falseYou should see: The command returns with no error. - 3
Add owners and members in bulk
Where: Microsoft Graph PowerShell session connected to the targetUse the mapping sheet to resolve each target user, then add them by reference.
$map = Import-Csv C:\migration\group-membership-mapped.csv # Group,Role,TargetUPN foreach ($row in $map | Where-Object Group -eq "marketing") { $user = Get-MgUser -UserId $row.TargetUPN $ref = @{ "@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$($user.Id)" } if ($row.Role -eq "Owner") { New-MgGroupOwnerByRef -GroupId $group.Id -BodyParameter $ref } else { New-MgGroupMemberByRef -GroupId $group.Id -BodyParameter $ref } }You should see: (Get-MgGroupMember -GroupId $group.Id -All).Count matches the member count in your mapping sheet. - 4
Add the migration account as a member
Where: Same Microsoft Graph PowerShell session (target)Creating a group with Graph does not add you as a member, and Microsoft requires the account creating a Planner plan to be a member of the group. Add the migration account now and remove it after the Planner rebuild.
$me = Get-MgUser -UserId "migration@fabrikam.onmicrosoft.com" New-MgGroupMemberByRef -GroupId $group.Id -BodyParameter @{ "@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$($me.Id)" }You should see: The migration account is listed by Get-MgGroupMember for the group. - 5
Apply settings and aliases
Where: Exchange Online PowerShell connected to the targetReapply the settings you exported to
group-settings.csv. Lower-casesmtp:adds a secondary address; upper-caseSMTP:sets the primary. You cannot use-EmailAddressesand-PrimarySmtpAddressin the same command.Set-UnifiedGroup -Identity "Marketing" -AccessType Private Set-UnifiedGroup -Identity "Marketing" -RequireSenderAuthenticationEnabled $false Set-UnifiedGroup -Identity "Marketing" -HiddenFromAddressListsEnabled $true Set-UnifiedGroup -Identity "Marketing" -EmailAddresses @{Add="smtp:mktg@fabrikam.com"}You should see: Get-UnifiedGroup -Identity "Marketing" | Format-List AccessType,EmailAddresses shows the values from the source export.
6Move group-connected resources4 steps
- 1
SharePoint site
Where: SharePoint Online Management Shell in both tenants (see the SharePoint guide)Microsoft's FastTrack cross-tenant documentation lists Microsoft 365 group-connected sites among the SharePoint content that migrates, and asks you to pre-create the Microsoft 365 groups connected to those sites in the target. Follow the SharePoint cross-tenant migration guide after Step 4. To install the shell, see Install SharePoint Online Management Shell.
You should see: The group's site content appears in the target group's site after the SharePoint migration completes. - 2
Group mailbox and calendar
Where: Your migration design document, and the chosen vendor tool's console if you buy oneMicrosoft does not document a native way to move group conversations or the group calendar between tenants. Choose a third-party tool that lists Microsoft 365 group mailboxes as a supported source, or keep the source group read-only for reference and start fresh in the target. Record the decision per group.
You should see: Each group row in your inventory says "tool", "archive" or "start fresh" for conversations and calendar. - 3
Teams
Where: Your migration design document (see the Teams chat migration guide)If the group has a team, plan the team, channels and chat history together. See Teams chat migration.
You should see: Teams-enabled groups are flagged in the inventory and scheduled with the Teams work. - 4
Distribution lists and contacts
Where: Exchange Online PowerShell connected to the targetMicrosoft says distribution lists and mail contacts are not part of mailbox data migration and must be pre-created in the target. Handle them in the same batch as your groups.
New-DistributionGroup -Name "All Sales" -Alias allsales -PrimarySmtpAddress allsales@fabrikam.onmicrosoft.com New-MailContact -Name "Supplier Accounts" -ExternalEmailAddress accounts@supplier.exampleYou should see: Get-DistributionGroup and Get-MailContact list the recreated objects.
7Choose a Planner migration method2 steps
| Method | Keeps | Loses | Best for |
|---|---|---|---|
| Export to Excel, rebuild by hand | A full snapshot for records | Everything in the live plan; manual effort | Small or finished plans |
| Microsoft Graph Planner API script | Buckets, titles, assignments, dates, labels, checklists you script | Original creator and created dates; premium plans | Many basic plans with in-house scripting skills |
| Third-party migration tool | Depends on the vendor | Check the vendor's documented limits | Large estates or when you also migrate mailboxes and sites |
- 1
Export every plan to Excel first
Where: Planner (source tenant), open the plan > ... menu in the plan headerWhatever method you choose, open each plan, select the ... menu in the plan header and choose Export as Excel. Microsoft lists plan name and ID, task ID, title, description, bucket, status, start and due dates, assignments, priority and labels. Microsoft notes these steps are being updated for the new Planner experience. Store each file with your migration records.
You should see: An Excel file named after the plan arrives in your Downloads folder. - 2
Check for premium plans
Where: Your plans.csv and the Planner app (source tenant)Microsoft says premium plans and tasks are not available in the Planner API, so they are missing from
plans.csv. Ask owners for any plans they use that are not in the list, and mark them for a vendor tool or a manual rebuild.You should see: Every plan an owner names is either in plans.csv or flagged as premium.
8Rebuild plans, buckets and tasks with Graph PowerShell6 steps
Read each source plan, then write it into the target group. Run the read in the source tenant and the write in the target tenant, mapping user IDs with your mapping sheet.
- 1
Read the source plan
Where: PowerShell 7 on your admin PC, connected to the source tenant with Connect-MgGraphSave buckets and tasks to JSON so the write step can run in a separate session. Take the PlanId from
plans.csv.Connect-MgGraph -Scopes "Tasks.Read","Group.Read.All" # source tenant $planId = "<sourcePlanId>" Get-MgPlannerPlanBucket -PlannerPlanId $planId | ConvertTo-Json -Depth 5 | Out-File C:\migration\buckets.json Get-MgPlannerPlanTask -PlannerPlanId $planId -All | ConvertTo-Json -Depth 10 | Out-File C:\migration\tasks.jsonYou should see: buckets.json and tasks.json exist in C:\migration and contain the expected number of items. - 2
Create the plan in the target group
Where: Same PowerShell window, now signed in to the target tenantDisconnect, sign in to the target as the migration account (a member of the group), and create the plan. The plan's container is the target group and cannot be changed after it is set.
Disconnect-MgGraph Connect-MgGraph -Scopes "Tasks.ReadWrite","Group.ReadWrite.All" # target tenant $params = @{ container = @{ url = "https://graph.microsoft.com/v1.0/groups/<targetGroupId>" } title = "Marketing campaigns" } $plan = New-MgPlannerPlan -BodyParameter $paramsYou should see: $plan.Id holds the new plan ID, and the plan appears in Planner under the target group. - 3
Create buckets
Where: Same PowerShell session (target)Use
" !"as the order hint for new items. Microsoft warns that an order hint copied directly from a response causes a 400 error.$bucketMap = @{} foreach ($b in (Get-Content C:\migration\buckets.json | ConvertFrom-Json)) { $new = New-MgPlannerBucket -BodyParameter @{ name = $b.Name; planId = $plan.Id; orderHint = " !" } $bucketMap[$b.Id] = $new.Id }You should see: $bucketMap.Count equals the number of source buckets. - 4
Create tasks with mapped assignees
Where: Same PowerShell session (target)Assignments are keyed by the target user's object ID. Each entry needs
@odata.typeand anorderHint. Fill$userMapfrom your mapping sheet (source object ID to target object ID).$userMap = @{} # sourceUserId -> targetUserId, loaded from your mapping sheet foreach ($t in (Get-Content C:\migration\tasks.json | ConvertFrom-Json)) { $assign = @{} foreach ($uid in $t.Assignments.PSObject.Properties.Name) { if ($userMap[$uid]) { $assign[$userMap[$uid]] = @{ "@odata.type" = "#microsoft.graph.plannerAssignment"; orderHint = " !" } } } $params = @{ planId = $plan.Id bucketId = $bucketMap[$t.BucketId] title = $t.Title assignments = $assign } if ($t.DueDateTime) { $params.dueDateTime = $t.DueDateTime } if ($t.StartDateTime) { $params.startDateTime = $t.StartDateTime } New-MgPlannerTask -BodyParameter $params | Out-Null }You should see: No errors, and (Get-MgPlannerPlanTask -PlannerPlanId $plan.Id -All).Count matches the source task count. - 5
Add descriptions, checklists and progress
Where: Same PowerShell session (target), using Get-MgPlannerTaskDetail and Update-MgPlannerTaskDetailDescriptions, checklists and references live on the task details object. Planner versions every object with an etag: updates must send the last known etag in an
If-Matchheader (the-IfMatchparameter), or Planner returns 412. Read the details first, then update with the etag you received.You should see: Spot-checked tasks in the target show the description and checklist from the source. - 6
Compare counts
Where: Your data validation report, plans.csv and the Excel exportCompare bucket and task counts in the target with
plans.csv, and spot-check assignments and dates against the Excel export. Record the result per plan.You should see: Every rebuilt plan has matching bucket and task counts in the validation report.
9Cut over and validate with owners4 steps
- 1
Freeze the source
Where: Your user communications (User communication pack) and the source groupsTell owners when source plans become read-only. Changes made after your export will not reach the target. Send the date at least a week ahead and again on the day.
You should see: Owners have acknowledged the freeze date. - 2
Add final addresses after the domain moves
Where: Exchange Online PowerShell connected to the targetOnce the domain is verified in the target, set the primary address on each group and add any remaining aliases.
Set-UnifiedGroup -Identity "Marketing" -PrimarySmtpAddress marketing@contoso.comYou should see: Get-UnifiedGroup -Identity "Marketing" | Format-List PrimarySmtpAddress shows the original address. - 3
Remove the migration account
Where: Microsoft Graph PowerShell connected to the targetRemove the account you added as a member in Step 4 from every target group.
Remove-MgGroupMemberDirectoryObjectByRef -GroupId $group.Id -DirectoryObjectId $me.IdYou should see: The migration account no longer appears in Get-MgGroupMember for the group. - 4
Owner sign-off
Where: Your hypercare issue log and data validation reportEach group owner confirms membership, site access, plans and task assignments. Log gaps in the hypercare issue log.
You should see: Every kept group has an owner sign-off date.
10Decommission source groups2 steps
- 1
Keep the source for a defined period
Where: Your decommission checklistAgree a retention period with owners and your compliance team before deleting anything, and record it in the checklist.
You should see: The checklist shows an agreed delete date for the source groups. - 2
Delete source groups last
Where: Microsoft Entra admin center (source) > Entra ID > Groups > All groups, or Microsoft Graph PowerShell connected to the sourceMicrosoft says deleting a group automatically deletes all plans it contains, and restoring the group restores them. Delete source groups only after the Excel exports are filed and owners have signed off.
Remove-MgGroup -GroupId <sourceGroupId>You should see: The group moves to Deleted groups in the source.
What can go wrong, and how do you avoid it?
The detail behind the plan: options compared, and what experienced engineers check first. Tap any item.
Compare all the ways to do this3 options
Script with Microsoft Graph PowerShell
Medium effortBest for: Many groups and basic plans, with in-house scripting skills
- Recreates groups, owners, members, settings, buckets and tasks from your inventory
- Repeatable, so you can test in a pilot and rerun
- No third-party licence
- Loses original creators and created dates
- Premium plans are not available in the Planner API
- Group conversations and calendar items are not moved
Export to Excel and rebuild by hand
Low effortBest for: A few groups, or small and finished plans
- No scripting
- Gives a full snapshot of every plan for your records
- Manual effort for every bucket and task
- There is no import back into Planner
Third-party migration tool
Medium effortBest for: Large estates, or when you also migrate mailboxes and sites with the same tool
- Can move more group content than the APIs you script yourself, depending on the vendor
- One mapping for groups, mail and sites
- Vendor licence; check current pricing
- Check the vendor's documented limits for premium plans and conversations
Whichever route you pick, export every plan to Excel first and pre-create each group in the target before its SharePoint site moves. Script with Graph when you have many basic plans, rebuild by hand when you have a few, and use a tool when you need group conversations or premium plans moved as well.
Retire before you rebuildSaves time
Every group you recreate needs owners, members, settings, a site move and often a plan rebuild. Old project groups and finished plans are common and cost the same effort as live ones.
Send owners their rows from groups.csv and plans.csv with a Keep, Archive or Retire choice and a deadline. Export finished plans to Excel and do not rebuild them.
Create site-connected groups the way SharePoint migration expectsReduces risk
Microsoft asks you to pre-create the Microsoft 365 groups connected to sites before a cross-tenant SharePoint move. A group created the wrong way gets its own new site and the site move fails.
Flag every group whose site is moving and create those with the method in the SharePoint guide, not with the generic script in Step 4.
Stop welcome emails before bulk addsUser impact
Adding hundreds of members to new groups can send each person a welcome email per group, which confuses users and floods help desks before cutover.
Run Set-UnifiedGroup -UnifiedGroupWelcomeMessageEnabled:$false on every target group before adding members, and decide whether to turn it back on afterwards.
Use temporary addresses until the domain movesSaves time
A domain can be verified in only one tenant, so groups cannot take their real addresses until cutover. Scripts that assume the final address fail.
Create groups on the target's initial or another verified domain, keep the original address in your inventory, and run a Set-UnifiedGroup -PrimarySmtpAddress pass straight after the domain is verified in the target.
Find premium plans earlyReduces risk
Microsoft says premium plans and tasks are not available in the Planner API, so your inventory script does not list them and your rebuild script cannot copy them.
Ask owners directly which plans use premium features, and budget a vendor tool or a manual rebuild for those before you set the timeline.
Accept what Planner history you loseCompliance
Created-by, created dates and completion history are recorded when your script creates each task, and comments are not covered by the steps here.
Export every plan to Excel before the rebuild, store the files with the group's records in the target, and tell owners in advance which history only lives in the export.
Planner migration tools copy task comments, checklists and attachments that a script rebuild leaves behind. Created-by, created dates and completion history still do not carry over.
- BitTitan MigrationWizMigrates plans, buckets and tasks with assignees, labels, dates, notes, checklists and comments. Created-by, created and completed dates are not migrated, and Planner needs delegated authentication on both sides.
- ShareGate MigrateCopies Planner plans with the team when you migrate it to another tenant.
Decide about group conversations and calendars per groupCost lever
Microsoft does not document a native way to move group mailbox conversations or the group calendar between tenants. A tool for a few groups may be worth it; for most groups it is not.
Mark each group: tool, read-only archive in the source, or start fresh. Only license a third-party tool if enough groups need history.
Mailbox migration tools can copy a group's Inbox (where conversations live) and its calendar into the matching group in the target, which Microsoft's native tools do not.
- BitTitan MigrationWizMigrates the group Inbox and Primary Calendar only. Some conversations may not stay nested, and it is a one-time copy with no sync. For Exchange Online, add your MigrationWiz app ID to the tenant's EWS allow list first: since 1 October 2026 Microsoft blocks EWS for apps not on it.
- AvePoint FlyLists Microsoft 365 Group mailboxes among the mailbox types it migrates across tenants.
Fix task links after the site movesUser impact
Task references and attachments point at source SharePoint URLs. Once the source is locked or deleted, those links break even if the files moved.
Rebuild plans after the group site has moved, and replace the source site URL with the target URL when you write task details.
Never delete a source group before its plans are archivedCompliance
Microsoft says deleting a group automatically deletes all plans it contains.
Make "Excel export filed" and "owner sign-off" required columns in your decommission checklist, and delete source groups only when both are filled.
How do you check it worked, or roll back?
Full validation checklist8 checks
Run these before you declare the migration complete. Record the results in the data validation report.
| Check | How to check | What good looks like |
|---|---|---|
| Every kept group exists in the target | Connected to the target with Connect-MgGraph, run | Every group marked Keep is in the target with the same mail nickname and visibility. |
| Owner and member counts match | For each target group run | Counts match the mapping sheet, every group has at least one owner, and the migration account has been removed. |
| Settings and addresses are reapplied | In target Exchange Online PowerShell run | Privacy, delivery settings and aliases match the source, and the primary address is the original one after the domain moves. |
| Plans have the same buckets and tasks | For each rebuilt plan run | Bucket and task counts match plans.csv for every plan, and premium plans are handled by the method you chose. |
| Assignments, dates and details are right | Open a sample of tasks in Planner in the target and compare with the Excel export of the source plan: assignee, due date, progress, description and checklist. | Spot-checked tasks match the export, and every assignee is a target user. |
| Mail to the group reaches the target | From an external mailbox, send to the group address, then check the target Exchange admin center > Mail flow > Message trace and the group's inbox in Outlook on the web. | The message shows Delivered and appears in the target group's conversations; no welcome emails went to members during the bulk add. |
| Owners can work in the site, team and plan | Ask each owner to open the group's SharePoint site, Teams team (if any) and plan in the target, then sign off in your hypercare issue log. | Every kept group has an owner sign-off date and no open access issues. |
| The source groups are frozen | Ask owners to confirm they no longer change source plans, and check a sample of source plans in Planner for tasks modified after the freeze date. | No source plan has changes after the freeze date that are missing from the target. |
Rollback planIf it goes wrong
Roll back if
- Task counts or assignments in rebuilt plans do not match the source export and cannot be fixed before the freeze
- Group-connected SharePoint sites failed to move or landed in the wrong group
- Owners report missing members or broken access after cutover and cannot work
- The domain move is delayed so groups cannot take their original addresses
Point of no return
This migration copies groups and plans, so the source keeps working until you delete it. The point of no return is deleting the source groups: Microsoft says deleting a group deletes all of its plans. Until then, rolling back means sending owners back to the source. Work done in the target after cutover (new tasks, comments, completed items) does not flow back to the source and has to be re-entered by hand. Original task creators and creation dates are not kept in the target, so they cannot be recovered there.
- 1
Lift the freeze on the source
Where: Your user communications (User communication pack) and the source groupsTell owners of the affected groups to go back to the source plans and sites, and give them the date of the export so they know which target changes to copy back.
You should see: Owners confirm they are working in the source again. - 2
Capture work done in the target
Where: Planner (target tenant), open the plan > ... menu in the plan headerChoose Export as Excel for each target plan that people used after cutover, and send it to the owner so they can re-enter new or changed tasks in the source.
You should see: An Excel file per used target plan is with its owner. - 3
Put the address back on the source group
Where: Exchange Online PowerShell connected to the tenant that holds the domainIf the original address already moved, set it back on the group in the tenant that holds the domain with
Set-UnifiedGroup -Identity "Marketing" -PrimarySmtpAddress marketing@contoso.com. If the domain has moved to the target, roll back the domain first using move a domain between tenants.You should see: Mail to the group address arrives in the group you are rolling back to. - 4
Remove the target copies
Where: Microsoft Graph PowerShell connected to the target with Connect-MgGraphOnce owners have what they need, delete the target groups you are backing out with
Remove-MgGroup -GroupId <targetGroupId>, which also deletes their plans. Keep them instead if you plan to retry soon.You should see: The groups move to Deleted groups in the target. - 5
Restore a source group deleted by mistake
Where: Microsoft Entra admin center (source) > Entra ID > Groups > Deleted groupsSelect the group and choose Restore group while it is still in Deleted groups. Microsoft says restoring the group restores its plans.
You should see: The group and its plans are back in the source.
Agree the triggers and who decides before the go / no-go meeting. Use the rollback plan template.
Common problems and fixes7 errors
403 Forbidden when creating a plan in the new groupCause: The account creating the plan is not a member of the group. Creating a group does not add the creator as a member.
Fix: Add the migration account as a member with New-MgGroupMemberByRef, then create the plan again.
400 Bad Request when creating a bucket or taskCause: The orderHint is not in the correct format, often because it was copied directly from a source response, or the start date is later than the due date.
Fix: Use " !" as the order hint for new items and check date fields before sending.
412 Precondition Failed when updating task detailsCause: The If-Match header is missing or the etag is stale.
Fix: Read the object again, take its current @odata.etag and send it in If-Match on the update.
403 with code MaximumTasksInProject or MaximumBucketsInProjectCause: A Planner service limit was exceeded in the target plan.
Fix: Split the plan into several plans or archive completed tasks to Excel instead of migrating them.
New-MgGroup fails when many owners and members are includedCause: Microsoft allows a maximum of 20 relationships, such as owners and members, in the create call.
Fix: Create the group with a few owners, then add the remaining members with New-MgGroupMemberByRef.
Premium plan is missing from Get-MgGroupPlannerPlan resultsCause: Premium plans and tasks are not available in the Planner API.
Fix: Use a vendor tool that supports premium plans or rebuild them by hand from the Excel export.
Set-UnifiedGroup rejects the old email addressCause: The domain is still verified in the source tenant, so the target cannot use it yet.
Fix: Use a target domain now and add the original address after the domain move.
Frequently asked questions
Can I move a Microsoft 365 group to another tenant?
Not natively. Recreate the group in the target with Microsoft Graph or the admin centre, then move its site, mailbox content and plans separately.
Can I import a Planner Excel export into another tenant?
Microsoft does not document an import from Excel back into Planner. Use the export as a record, then rebuild with the Graph Planner API, a third-party tool or by hand.
Do Planner comments and attachments move?
Not with the steps in this guide. Attachments in the group site move with the SharePoint migration, but links in task references point to source URLs and need updating.
Does the group SharePoint site move automatically when I recreate the group?
No. Recreating the group gives you a new empty site. Use SharePoint cross-tenant migration to move content into it.
Can I keep the same group email address?
Yes, after the domain is removed from the source tenant and verified in the target. Until then, use a temporary address.
Will members get welcome emails when I add them?
They can. Set UnifiedGroupWelcomeMessageEnabled to false on the target group before you bulk-add members.
Official sources
13 official pages this guide is based on
Vendors change limits and features, so confirm details on the source before you rely on them. Last checked 4 Nov 2026.