Migration playbook · Microsoft 365

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.

Updated 7 phases31 detailed steps13 official sources
Start here

How do you migrate Microsoft 365 Groups and Planner plans to another tenant?

Short answer

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.

Recommended routeRecreate groups and rebuild plans with Microsoft Graph PowerShell

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.
Order to migrate in, and why

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.

  1. 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.
  2. Owners, members and task assignees in the new tenantMemberships and Planner assignments point at the new accounts' IDs, so the accounts must exist first.
  3. 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.
  4. Each group's SharePoint sitePlans link to files on the site, so the site moves before the plans are rebuilt.
  5. Conversations and calendar, where a group needs themOnly a tool can copy them, and it needs the new group to exist.
  6. 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.
  7. Cutover: source frozen, real addresses set, owners sign offGroups can only take their real addresses once the domain is verified in the new tenant.
  8. Source groups retiredDeleting a group deletes all its plans, so it goes last.
Settings checklist: decide these before you copy

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-UnifiedGroup
  • How 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-UnifiedGroup
  • How 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-UnifiedGroup
  • How 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 API
  • How 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 Excel
  • How 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 API
  • How 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
The plan, phase by phase
  1. 1

    Take stock

    Before you build anything

    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.
    Show the detailed steps (5) →
  2. 2

    Prepare the new tenant

    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.
    Show the detailed steps (3) →
  3. 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.

    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.
    Show the detailed steps (5) →
  4. 4

    Move connected content

    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.
    Show the detailed steps (4) →
  5. 5

    Rebuild the plans

    After the group site has moved

    Watch 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.

    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.
    Show the detailed steps (6) →
  6. 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. 7

    Retire the old groups

    After the agreed retention period

    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.
    Show the detailed steps (2) →
You are finished when
  • 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.

Click by click

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.

Native group moveNone. Pre-create groups in the target tenant
Owners and members at creationUp to 20 relationships per create call; add the rest afterwards
Planner exportExport to Excel gives a snapshot; there is no import back
Planner API scopeBasic plans only; premium plans are not available in the API
Group-connected siteMoves with SharePoint cross-tenant tools once the group exists in the target
1What you need before step one
NeedDetailsWhere to get it
Admin rolesGroups 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 usersEvery owner, member and task assignee already created (and licensed) in the target.Entra ID cross-tenant guide
Microsoft Graph PowerShellFor 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 PowerShellFor group addresses, privacy and delivery settings.Connect to Exchange Online PowerShell
A working folderThe scripts write to C:\migration. Create it first.Your admin PC
A mapping spreadsheetSource 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 componentNative cross-tenant move?Route
Group object, owners, membersNoRecreate with Microsoft Graph PowerShell
Email addresses and aliasesNoAdd with Set-UnifiedGroup after the domain is verified in the target
Group settings (privacy, external senders, subscriptions)NoRead with Get-UnifiedGroup, set with Set-UnifiedGroup
Group-connected SharePoint siteYes, with SharePoint cross-tenant migrationPre-create the group in the target first
Group mailbox conversations and calendarNot documented by MicrosoftThird-party migration tool, or archive and start fresh
Planner plans, buckets and tasksNoExport to Excel, script with the Graph Planner API, or use a third-party tool
Teams chats and channelsPartlySee the Teams chat migration guide
Cross-tenant user data tools skip shared data. Microsoft says its Cross-Tenant User Data Migration does not migrate shared data such as Teams, channels or SharePoint sites. Group content is shared data.
3Inventory groups, owners, settings and plans5 steps
  1. 1

    List every Microsoft 365 group

    Where: PowerShell 7 on your admin PC, connected to the source tenant with Connect-MgGraph

    Install 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 -NoTypeInformation
    You should see: C:\migration\groups.csv has one row per Microsoft 365 group with Id, DisplayName, MailNickname, Mail and Visibility.
  2. 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 -NoTypeInformation
    You should see: C:\migration\group-membership.csv has columns Group, Role and UPN, with at least one Owner row per group.
  3. 3

    Export Exchange settings and aliases

    Where: Exchange Online PowerShell on your admin PC, connected to the source with Connect-ExchangeOnline

    Graph 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 -NoTypeInformation
    You should see: C:\migration\group-settings.csv lists each group's addresses and settings.
  4. 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 -NoTypeInformation
    You should see: C:\migration\plans.csv lists every basic plan with its PlanId, bucket count and task count.
  5. 5

    Agree what to retire

    Where: Your inventory spreadsheet (Mailbox and data inventory template), with a "Keep / Archive / Retire" column

    Send each owner their rows from groups.csv and plans.csv and 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. 1

    Create and license target users

    Where: Microsoft 365 admin center (target) > Users > Active users, or the Entra ID cross-tenant guide

    Owners, 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.csv with 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 -NoTypeInformation
    You should see: Every UPN in group-membership.csv has a matching TargetUPN and target object ID.
  2. 2

    Plan the domain move

    Where: Microsoft 365 admin center (target) > Settings > Domains

    A 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. 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 settings

    Open 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.Unified directory setting (EnableGroupCreation and GroupCreationAllowedGroupId) and make sure the migration account is allowed.

    Connect-MgGraph -Scopes "Directory.Read.All"
    (Get-MgBetaDirectorySetting | Where-Object { $_.DisplayName -eq "Group.Unified" }).Values
    You 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. 1

    Create each group with Microsoft Graph

    Where: PowerShell 7 on your admin PC, connected to the target tenant with Connect-MgGraph

    Set groupTypes to Unified with mailEnabled true and securityEnabled false. 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 $params
    You should see: $group.Id holds the new group ID, and the group appears in the Microsoft Entra admin center under Groups > All groups.
  2. 2

    Turn off welcome messages

    Where: Exchange Online PowerShell connected to the target with Connect-ExchangeOnline

    Bulk-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:$false
    You should see: The command returns with no error.
  3. 3

    Add owners and members in bulk

    Where: Microsoft Graph PowerShell session connected to the target

    Use 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. 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. 5

    Apply settings and aliases

    Where: Exchange Online PowerShell connected to the target

    Reapply the settings you exported to group-settings.csv. Lower-case smtp: adds a secondary address; upper-case SMTP: sets the primary. You cannot use -EmailAddresses and -PrimarySmtpAddress in 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.
Turn off welcome messages before adding members. Bulk-adding members to a new group can send each one a welcome email. Set UnifiedGroupWelcomeMessageEnabled to false first if you do not want that.
6Move group-connected resources4 steps
  1. 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. 2

    Group mailbox and calendar

    Where: Your migration design document, and the chosen vendor tool's console if you buy one

    Microsoft 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. 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. 4

    Distribution lists and contacts

    Where: Exchange Online PowerShell connected to the target

    Microsoft 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.example
    You should see: Get-DistributionGroup and Get-MailContact list the recreated objects.
7Choose a Planner migration method2 steps
MethodKeepsLosesBest for
Export to Excel, rebuild by handA full snapshot for recordsEverything in the live plan; manual effortSmall or finished plans
Microsoft Graph Planner API scriptBuckets, titles, assignments, dates, labels, checklists you scriptOriginal creator and created dates; premium plansMany basic plans with in-house scripting skills
Third-party migration toolDepends on the vendorCheck the vendor's documented limitsLarge estates or when you also migrate mailboxes and sites
  1. 1

    Export every plan to Excel first

    Where: Planner (source tenant), open the plan > ... menu in the plan header

    Whatever 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. 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. 1

    Read the source plan

    Where: PowerShell 7 on your admin PC, connected to the source tenant with Connect-MgGraph

    Save 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.json
    You should see: buckets.json and tasks.json exist in C:\migration and contain the expected number of items.
  2. 2

    Create the plan in the target group

    Where: Same PowerShell window, now signed in to the target tenant

    Disconnect, 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 $params
    You should see: $plan.Id holds the new plan ID, and the plan appears in Planner under the target group.
  3. 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. 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.type and an orderHint. Fill $userMap from 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. 5

    Add descriptions, checklists and progress

    Where: Same PowerShell session (target), using Get-MgPlannerTaskDetail and Update-MgPlannerTaskDetail

    Descriptions, 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-Match header (the -IfMatch parameter), 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. 6

    Compare counts

    Where: Your data validation report, plans.csv and the Excel export

    Compare 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.
Some history cannot be kept. The service records who created a task and when it was created at the moment your script creates it. Original creators, creation dates and completion history stay only in the Excel export.
9Cut over and validate with owners4 steps
  1. 1

    Freeze the source

    Where: Your user communications (User communication pack) and the source groups

    Tell 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. 2

    Add final addresses after the domain moves

    Where: Exchange Online PowerShell connected to the target

    Once 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.com
    You should see: Get-UnifiedGroup -Identity "Marketing" | Format-List PrimarySmtpAddress shows the original address.
  3. 3

    Remove the migration account

    Where: Microsoft Graph PowerShell connected to the target

    Remove the account you added as a member in Step 4 from every target group.

    Remove-MgGroupMemberDirectoryObjectByRef -GroupId $group.Id -DirectoryObjectId $me.Id
    You should see: The migration account no longer appears in Get-MgGroupMember for the group.
  4. 4

    Owner sign-off

    Where: Your hypercare issue log and data validation report

    Each 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. 1

    Keep the source for a defined period

    Where: Your decommission checklist

    Agree 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. 2

    Delete source groups last

    Where: Microsoft Entra admin center (source) > Entra ID > Groups > All groups, or Microsoft Graph PowerShell connected to the source

    Microsoft 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.
Worth knowing

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 effort

Best 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
Read more →

Export to Excel and rebuild by hand

Low effort

Best 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 effort

Best 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
Our advice

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.

What to do

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.

What to do

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.

Microsoft Learn: Cross-tenant migration (FastTrack)
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.

What to do

Run Set-UnifiedGroup -UnifiedGroupWelcomeMessageEnabled:$false on every target group before adding members, and decide whether to turn it back on afterwards.

Microsoft Learn: Set-UnifiedGroup
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.

What to do

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.

Microsoft Learn: Set-UnifiedGroup
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.

What to do

Ask owners directly which plans use premium features, and budget a vendor tool or a manual rebuild for those before you set the timeline.

Microsoft Learn: Use the Planner REST API
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.

What to do

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.

Tools that can get around this

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.
Third-party tools, not endorsed by the platform vendor. Confirm in the tool's documentation and run a pilot first.
Microsoft Support: Export a plan to Excel
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.

What to do

Mark each group: tool, read-only archive in the source, or start fresh. Only license a third-party tool if enough groups need history.

Tools that can get around this

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.
Third-party tools, not endorsed by the platform vendor. Confirm in the tool's documentation and run a pilot first.
Microsoft Learn: Cross-tenant migration (FastTrack)
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.

What to do

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.

What to do

Make "Excel export filed" and "owner sign-off" required columns in your decommission checklist, and delete source groups only when both are filled.

Microsoft Learn: Use the Planner REST API
Finish safely

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.

CheckHow to checkWhat good looks like
Every kept group exists in the target

Connected to the target with Connect-MgGraph, run Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -All | Select-Object DisplayName,MailNickname,Mail,Visibility and compare with the Keep rows in C:\migration\groups.csv.

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 (Get-MgGroupOwner -GroupId <id> -All).Count and (Get-MgGroupMember -GroupId <id> -All).Count and compare with C:\migration\group-membership.csv, allowing for the migration account until you remove it.

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 Get-UnifiedGroup -Identity "Marketing" | Format-List PrimarySmtpAddress,EmailAddresses,AccessType,HiddenFromAddressListsEnabled,RequireSenderAuthenticationEnabled and compare with C:\migration\group-settings.csv.

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 (Get-MgPlannerPlanBucket -PlannerPlanId <id>).Count and (Get-MgPlannerPlanTask -PlannerPlanId <id> -All).Count in the target and record them beside plans.csv in your data validation report.

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. 1

    Lift the freeze on the source

    Where: Your user communications (User communication pack) and the source groups

    Tell 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. 2

    Capture work done in the target

    Where: Planner (target tenant), open the plan > ... menu in the plan header

    Choose 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. 3

    Put the address back on the source group

    Where: Exchange Online PowerShell connected to the tenant that holds the domain

    If 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. 4

    Remove the target copies

    Where: Microsoft Graph PowerShell connected to the target with Connect-MgGraph

    Once 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. 5

    Restore a source group deleted by mistake

    Where: Microsoft Entra admin center (source) > Entra ID > Groups > Deleted groups

    Select 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 group

Cause: 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 task

Cause: 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 details

Cause: 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 MaximumBucketsInProject

Cause: 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 included

Cause: 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 results

Cause: 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 address

Cause: 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.

Search the full error library →

FAQ

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.

Sources

Official sources

13 official pages this guide is based on