Migration playbook · Microsoft 365

How to migrate from Slack to Microsoft Teams

Export Slack, import channels and history with Microsoft's Slack to Teams Migration Tool, replace apps and webhooks, and get people working in Teams.

Updated 7 phases30 detailed steps9 official sources
Start here

How do you migrate from Slack to Microsoft Teams?

Short answer

This moves Slack channels and their history into Microsoft Teams. Microsoft's built-in Slack to Teams Migration Tool reads a Slack export (a ZIP file of your workspace data) that you place in Azure Blob Storage (Microsoft's cloud file storage, in an Azure subscription you own), then creates teams and channels and imports messages with their original authors and dates.

  • Recommended route: Microsoft Slack to Teams Migration Tool (in the Microsoft 365 admin center)
  • Order: Find out what your Slack plan lets you export first, because that limits everything else.
  • 7 phases: Assess Slack, Export from Slack, Stage the export in Azure, Map teams and people, Migrate the channels, Replace apps and webhooks and Switch over and clean up.
  • You're done when: The migration report shows every selected channel migrated, with only expected NOTMIGRATED items.

Your Slack plan decides what is in the export: Free and Pro exports hold public channels only. Direct messages, workflows and apps do not move with Microsoft's tool; some third-party tools move direct messages. The time depends on message volume: Microsoft quotes 2 to 3 messages per second per channel for its tool, with 20 channels running at once.

Recommended routeMicrosoft Slack to Teams Migration Tool (in the Microsoft 365 admin center)

First-party, keeps original authors, dates, threads, reactions and files, and deletes nothing from Slack.

Other options and when to use them
  • Third-party tool such as Cloudiway or AvePoint Fly: You need 1:1 direct messages moved, or want the tool to read Slack directly instead of staging an export in Azure.
  • Fresh start in Teams, with Slack kept read-only: You have many quiet channels, or the history has little ongoing value.
Order to migrate in, and why

Find out what your Slack plan lets you export first, because that limits everything else. Then set up the people and the place in Microsoft 365, prove the import on a few channels, get replacement apps ready, and do the main import once Slack stops changing.

  1. Slack plan check, and a full export request if you need private channelsFree and Pro exports hold public channels only, and a Business+ full export needs Slack's approval, which takes time.
  2. Channel triage and the full member listDecides which channels move or are archived, and gives you every person who must be mapped, including former staff.
  3. Microsoft 365 accounts, guests and the team structureMicrosoft's tool will not start until every Slack user is mapped to an account or to Unknown user, and each channel needs a team to land in.
  4. Azure storage and consent for the migration appMicrosoft's tool reads the export only from a storage container you own and have given it access to.
  5. Pilot: a handful of busy channelsShows how long a channel takes at 2 to 3 messages per second, and what does not come across, before the bulk run.
  6. Replacement apps, webhooks and workflowsAlerts and automations must post into Teams before people stop watching Slack, or they go missing.
  7. Read-only date, final export, then the main importMicrosoft's tool does not pick up edits, deletions or new replies to messages it already moved, so one main pass after Slack stops changing gives the cleanest result.
  8. Reports, disconnect, storage clean-up, then Slack closureDisconnecting the import loses its reports, and the export holds your whole message history, so download first and delete the copies 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 methodMicrosoft's tool imports only what is in the Slack export. Slack's export on Free and Pro holds public channels only. Private channels need Business+ (with an approved full export) or Enterprise.
    CloudiwayReads Slack through its API (Cloudiway recommends this) or from an export ZIP. Private channels are read only if the migration account is a member of each one.
    AvePoint FlyWhat it can read on each Slack plan: not stated in AvePoint's documentation: test it in your pilot.

    Tip: Apply for a Business+ full export from the Export tab weeks before you need it.

    Slack Help Center: Export your workspace data
  • How each tool handles it
    Built-in methodMicrosoft's tool: direct messages and group chats are not migrated on any Slack plan.
    CloudiwayMigrates 1:1 direct messages into Teams chats. Group DMs: not stated in Cloudiway's documentation: test it in your pilot.
    AvePoint FlyLists Slack, including Slack direct messages, as a supported migration source.

    Tip: Tell people early that DMs stay in Slack, and give a date until which Slack stays readable.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: moves public and private channels. Each Slack channel goes to its own Teams channel; channels cannot be merged. Microsoft recommends the shared channel type. It can use existing teams, but says it can only import into channels the tool creates. Archived channels and Slack Connect channels (shared with other companies) are not supported; unarchive a channel before the export to include it.
    CloudiwayMoves public and private channels. Archived and Slack Connect channels: not stated in Cloudiway's documentation: test it in your pilot.

    Tip: Plan the whole map in MigrationDestination.csv, and check no team goes over 1,000 channels.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: threads, standard emoji reactions, @mentions, GIPHY, images, links and text formatting come across. Custom emoji reactions and #channel links do not; unsupported items are flagged NOTMIGRATED or NOTSUPPORTED in the report.
    CloudiwayThreads are kept and reactions are migrated. Custom emojis become text. Pinned status and bookmarks are not kept, and app and bot messages may not be fully preserved.

    Tip: Share the pilot report with channel owners before the main import.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: each message keeps its Created by and Created date. File attachments lose their own system details (created at, created by, last edited at and by).
    CloudiwayMessage timestamps are migrated. Created-by and modified-by addresses are converted through the mapping table; an address not in the table is not converted.
    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: channel file attachments move. Characters SharePoint does not allow in file names are replaced with an underscore. Canvases arrive as HTML attachments and lists as JSON attachments. Slack's export holds links to files rather than the files, and a Free plan export links only files from the last 90 days.
    CloudiwayFiles and attachments are migrated. Where they are stored in Teams: not stated in Cloudiway's documentation: test it in your pilot.

    Tip: Keep the Slack subscription active until the migration report shows attachments copied for every channel.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: every Slack user, including deactivated ones, must be mapped to a Microsoft 365 user or to Unknown user before it starts. It auto-maps by matching email address, the name part of the email, or display name. Importing a mapping CSV overwrites all earlier mappings.
    CloudiwayDiscovery fills the mapping table for you to check. Any address not in the table is not converted to the target address.

    Tip: Run the identity pre-check script, and create guest accounts for outside people who still need access.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: the filter applies to root messages, in UTC. Replies come with their root message even if they are outside the range; replies whose root is outside the range do not move. A later pass cannot add older content.
    CloudiwayDate filters: not stated in Cloudiway's documentation: test it in your pilot.

    Tip: If you might run a second pass, choose Send all messages, or a range that includes future messages.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: re-run the same task with a new export from the same workspace. It moves only root messages newer than the last one it migrated, with their replies. It does not sync edits, deletions or new replies to messages already moved. Microsoft encourages one pass where possible.
    CloudiwayDelta passes copy only new messages since the last run. Moving DMs, and delta passes into channels, need MFA turned off on the target migration account.

    Tip: Make each channel read-only in Slack before its final pass.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: up to 20 channels run in parallel, at typically 2 to 3 messages per second per channel. A channel with 100,000 messages takes roughly 9 to 14 hours.
    CloudiwayThroughput: not stated in Cloudiway's documentation: test it in your pilot.

    Tip: Start the busiest channels first, so they finish with the rest of the batch.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: workflows and custom app integrations are not migrated.
    CloudiwayAutomated workflows are not migrated.

    Tip: Rebuild incoming webhooks with the Teams Workflows template Send webhook alerts to a channel, and have each owner send a test post.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
  • How each tool handles it
    Built-in methodMicrosoft's tool: the export sits in an Azure Blob Storage container in your own tenant (Microsoft's cloud file storage, paid from your Azure subscription). Microsoft suggests a US region outside Europe and a European region inside it. Nothing is deleted from Slack. Afterwards you can delete the container and revoke the migration app.

    Tip: If you have data residency rules, agree the region with your privacy owner before you upload.

    Microsoft Learn: Introduction to the Slack to Teams Migration Tool
The plan, phase by phase
  1. 1

    Assess Slack

    Several weeks before

    Watch out: Slack's export on Free and Pro holds public channels only, so Microsoft's tool cannot move private channel history.

    Ways around it

    • Upgrade to Business+ or Enterprise and get a full export approved, or tell private channel owners their history stays in Slack.

    Watch out: Microsoft's tool does not move direct messages or group chats on any plan.

    Ways around it

    • Give a date until which Slack stays readable, and export DMs for records on an eligible plan.

    Tools that can do it

    • CloudiwayMigrates Slack 1:1 direct messages into Teams chats. Confirm where group DMs land before you plan for them.
    • AvePoint FlyLists Slack, including Slack direct messages, as a supported migration source.
    Show the detailed steps (4) →
  2. 2

    Export from Slack

    Watch out: Slack's export holds links to files, not the files, and a Free plan export links only files from the last 90 days.

    Ways around it

    • Keep the Slack subscription active until the migration report shows attachments copied for every channel.
    Show the detailed steps (3) →
  3. 3

    Stage the export in Azure

    Show the detailed steps (5) →
  4. 4

    Map teams and people

    Watch out: Microsoft's tool cannot merge several Slack channels into one Teams channel, or import into a channel it did not create.

    Ways around it

    • Plan the whole map in the MigrationDestination.csv spreadsheet before you upload it.

    Watch out: Microsoft's tool will not start until every Slack user, including former staff, is mapped to an account or to Unknown user.

    Ways around it

    • Run the identity pre-check script, map former staff to Unknown user, and create guest accounts for guests who still need access.
    Show the detailed steps (5) →
  5. 5

    Migrate the channels

    Watch out: Microsoft's tool: a second pass (a top-up run from a newer export) brings new messages, but not edits, deletions or new replies to messages already moved.

    Ways around it

    • Plan one main pass after the read-only date. If you pilot early, send all messages so a later pass can add to it.

    Tools that can do it

    • CloudiwayDelta passes (top-up runs) add new Slack messages to channels already migrated, without starting again.

    Watch out: Microsoft's tool: custom emoji reactions and #channel links do not come across. Canvases and lists arrive as file attachments.

    Ways around it

    • Tell channel owners what to expect, using the migration report.
    Show the detailed steps (4) →
  6. 6

    Replace apps and webhooks

    Watch out: Slack workflows and custom apps do not migrate, and connector-based incoming webhooks in Teams were retired in May 2026.

    Ways around it

    • Rebuild with Teams Workflows or Power Automate, and have each owner test their flow.
    Show the detailed steps (3) →
  7. 7

    Switch over and clean up

    On the read-only date

    Watch out: Closing Slack, or choosing Complete disconnect in Microsoft's tool, cannot be undone: attachments not yet copied and the migration reports are lost.

    Ways around it

    • Download the reports first, and close Slack only after attachments have copied and any records are exported.

    Turn this phase into dated tasks with the cutover planner

    Show the detailed steps (3) →
You are finished when
  • The migration report shows every selected channel migrated, with only expected NOTMIGRATED items.
  • Each channel sits in its planned team with the right members, and attachments open.
  • Webhooks, replacement apps and rebuilt workflows post into Teams.
  • No new messages appear in migrated Slack channels after the read-only date.

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

Microsoft now has a first-party Slack to Teams Migration Tool. It reads a Slack export that you upload to Azure Blob Storage, maps Slack users to Microsoft 365 accounts, creates teams and channels, and imports channel history with the original author and date. Nothing is deleted from Slack.

What you can import depends on what you can export, and that depends on your Slack plan. Free and Pro workspaces can export public channels only. Private channels need Business+ or Enterprise and an approved full export. Direct messages are not imported by Microsoft's tool on any plan.

Native toolSlack to Teams Migration Tool in the Microsoft 365 admin center (Setup > Migration and imports > Slack to Teams)
InputA Slack export ZIP staged in your own Azure Blob Storage container
MigratedPublic and private channels, messages with threads and standard reactions, file attachments, canvases, lists, membership
Not migratedDirect messages, group chats, workflows, custom apps, Slack Connect channels, archived channels
Throughput20 channels in parallel; Microsoft quotes 2 to 3 messages per second per channel
1What you need before step one
NeedDetailsWhere to get it
Slack Workspace Owner or AdminTo export data, download the member list and view analytics. Enterprise: Org Owner, Org Admin or Export Admin.Your Slack workspace
Global AdministratorOnce, to grant consent to the M365 Teams Migration app.Microsoft 365 admin center, https://admin.cloud.microsoft
Migration operator roleMicrosoft 365 Migration Administrator (recommended), SharePoint Administrator or Global Administrator.Microsoft 365 admin center > Roles
Azure subscriptionOwner, Contributor or Storage Account Contributor to create storage, and User Access Administrator to assign the role.Azure portal, https://portal.azure.com
Azure CLI (optional)For the scripted storage set-up.Install the Azure CLI
Microsoft Graph PowerShell (optional)For the identity pre-check script.Install Microsoft Graph PowerShell
Teams licencesEvery mapped user needs a Teams licence.Assign licences
2Assess workspaces, channels, apps and users4 steps
  1. 1

    Check your Slack plan

    Where: Your Slack workspace's billing or plan details, viewed as a Workspace Owner (Admin in the desktop sidebar)

    Confirm the plan (Free, Pro, Business+ or Enterprise) and write it in your application inventory. It decides which export you can run (see the table in Step 2).

    You should see: You know the plan and therefore whether private channels can be exported.
  2. 2

    Pull channel statistics

    Where: Slack desktop app > Admin (in the sidebar) > Workspace analytics > Channels tab

    On Pro, Business+ and Enterprise, the Channels tab shows each channel's activity, last use and member count. Select Export CSV and use it to choose which channels to migrate. Many quiet channels are better archived than moved. The Free plan shows only the Overview tab.

    You should see: A CSV of channels with activity figures, marked migrate or archive.
  3. 3

    List apps and integrations

    Where: Slack desktop app > Admin (in the sidebar) > Apps and workflows (opens the Slack Marketplace management pages)

    Review the installed apps and how many configurations each has. For each one, write down what it does for the channel, because that outcome is what you rebuild in Teams. Record the result in your Application inventory and dependency map.

    You should see: Every installed app and webhook is listed with its purpose and owner.
  4. 4

    List members and guests

    Where: Slack desktop app > Admin (in the sidebar) > Manage members > Export full member list

    Export the member list with emails and account types (full member, single-channel guest, multi-channel guest). Every Slack user, including deactivated users, must map to a Microsoft 365 account or to Unknown user before the tool will migrate. Copy the list into your Identity and licence mapping sheet.

    You should see: A CSV of every member, ready to compare with Microsoft 365 accounts.
3Export Slack data (what your plan allows)3 steps
Slack planExport availableNotes from Slack's help centre
FreePublic channelsOnly links to files from the last 90 days
ProPublic channelsPrivate channels and DMs are not available
Business+Public channels; with approval, all channels and DMsFull export needs approval from the Workspace Primary Owner; scheduled exports available
EnterprisePublic channels; all conversations once enabledOrg Owners contact Slack to enable self-serve export; can export several workspaces into one file
  1. 1

    Unarchive channels you want

    Where: Slack desktop app > Home > Directories > Channels tab > Channel type: Archived channels

    Microsoft's tool does not migrate archived channels. Do this before you export. Select each archived channel you want to keep, click the channel name in the conversation header, then Settings > Unarchive this channel.

    You should see: The channels you need no longer show under Archived channels.
  2. 2

    Run the export

    Where: Slack desktop app > Admin (in the sidebar) > Workspace settings > Security > Import & export data > Export tab

    Choose an option under Export date range and select Start Export. On Business+, use the "submit an application" link on the same tab for a full export including private channels. On Enterprise, Org Owners, Org Admins and members with the Export Admin role can export. When Slack emails you, open "Visit your workspace's export page" and select Ready for download to get the ZIP.

    You should see: A ZIP file containing users.json, channels.json and one folder per channel.
  3. 3

    Treat the export as sensitive

    Where: Your admin PC and the migration storage account only

    The ZIP holds your organisation's message history. Store it only in the migration storage account and delete it when the migration is finished. Delete the local copy once it is uploaded.

    You should see: One copy of the export exists, in the storage container from Step 3.
Files in exports are links. Slack exports contain file links rather than the files. Microsoft's tool uses online access to your Slack workspace to fetch attachments, so keep the workspace active until the migration is done.
4Grant consent and stage the export in Azure5 steps
  1. 1

    Grant admin consent

    Where: A browser signed in as a Global Administrator, at the consent link on Microsoft's Slack to Teams Migration Tool page

    A Global Administrator grants one-time consent for the M365 Teams Migration app: open the consent link from Microsoft's introduction page and, at Permissions requested, select Accept. Microsoft recommends running the migration as a Microsoft 365 Migration Administrator. SharePoint Administrator or Global Administrator also work.

    You should see: The browser confirms consent was granted.
  2. 2

    Create the storage account

    Where: Azure portal (portal.azure.com) > Storage accounts > Create

    On Basics pick the subscription and resource group, a unique name, a region (Microsoft recommends East US or West US 2 outside Europe, North Europe or West Europe in Europe), Standard performance and LRS. On Advanced set Enable storage account key access to Disabled, Allow enabling anonymous access on individual containers to Disabled and Minimum TLS version to 1.2. On Data protection enable soft delete for blobs and containers. Select Review + create, then Create. The Azure CLI commands below do the same in Bash.

    # Sign in and create a storage account for the Slack export (names are examples)
    az login
    az group create --name rg-slack-migration --location eastus
    az storage account create --name contososlackexport --resource-group rg-slack-migration --location eastus --sku Standard_LRS --https-only true --min-tls-version TLS1_2 --allow-shared-key-access false
    
    # Give the migration service read access to blobs
    SP_ID=$(az ad sp list --display-name "Office 365 Mover" --query "[0].id" -o tsv)
    SA_ID=$(az storage account show --name contososlackexport --resource-group rg-slack-migration --query id -o tsv)
    az role assignment create --assignee-object-id "$SP_ID" --assignee-principal-type ServicePrincipal --role "Storage Blob Data Reader" --scope "$SA_ID"
    
    # Create a container, upload the export and print its URL
    # (your own account needs a data role such as Storage Blob Data Contributor to upload with --auth-mode login)
    az storage container create --name slackexport --account-name contososlackexport --auth-mode login
    az storage blob upload --account-name contososlackexport --container-name slackexport --name slack-export.zip --file ./slack-export.zip --auth-mode login
    az storage blob url --account-name contososlackexport --container-name slackexport --name slack-export.zip --auth-mode login -o tsv
    You should see: The storage account opens with status Available.
  3. 3

    Give the migration app read access

    Where: Azure portal > Storage accounts > your account > Access Control (IAM) > Add > Add role assignment

    Select Storage Blob Data Reader, then Next. Keep User, group, or service principal, select + Select members, search for Office 365 Mover, select it and select Select, then Next and Review + assign. You need User Access Administrator to do this.

    You should see: Role assignments lists Office 365 Mover with Storage Blob Data Reader on the account.
  4. 4

    Create the container, upload and copy the URL

    Where: Azure portal > your storage account > Storage browser > Blob containers

    Select Add container, enter a name and select Create. Open the container, select Upload > Browse for files, pick the Slack ZIP and select Upload. Select the uploaded file and copy the URL from its Overview tab.

    You should see: You have a URL like https://contososlackexport.blob.core.windows.net/slackexport/slack-export.zip.
  5. 5

    Connect the tool to the export

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Get started

    Paste the blob URL into Export file URL in Azure Blob Storage, select Upload file and then Complete setup. For Enterprise exports, choose the workspaces in Select workspaces for scan and migration and select Save.

    You should see: The Conversations tab lists your Slack channels.
Check data residency. Microsoft recommends East US or West US 2 for the storage account outside Europe. If your organisation has data residency obligations, check them before you choose a region.
5Map channels to teams and users to accounts5 steps

In Slack people join channels in a workspace. In Teams they join a team, and the team contains channels. Group related Slack channels into teams based on audience and ownership.

  1. 1

    Scan and select channels

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Conversations tab

    Tick channels, select Scan messages, and wait for Channel scan status to show Completed. Review the message counts and last message dates. Then tick the channels to move and select Send to migration, choosing Send all messages to migration or Only send messages from the selected date range (UTC, applied to root messages; replies follow their root).

    You should see: The selected channels appear on the Migrations tab.
  2. 2

    Check identity matches in advance (optional)

    Where: PowerShell on your admin PC, in the folder where you unzipped the export, connected with Connect-MgGraph

    This script checks which Slack members in the export's users.json have a matching Microsoft 365 account, so you can fix gaps before mapping.

    # Optional pre-check: which Slack members have a matching Microsoft 365 account?
    # Run from the folder where you unzipped the Slack export.
    Connect-MgGraph -Scopes 'User.Read.All'
    $slackUsers = Get-Content -Raw -Path .\users.json | ConvertFrom-Json
    
    $slackUsers | Where-Object { -not $_.is_bot -and $_.profile.email } | ForEach-Object {
        $email = $_.profile.email
        $safe  = $email -replace "'", "''"
        $match = Get-MgUser -Filter "mail eq '$safe' or userPrincipalName eq '$safe'" -Property Id,UserPrincipalName,AccountEnabled
        [pscustomobject]@{
            SlackId      = $_.id
            SlackName    = $_.real_name
            SlackEmail   = $email
            SlackDeleted = $_.deleted
            M365UPN      = ($match | Select-Object -First 1).UserPrincipalName
            Matched      = [bool]$match
        }
    } | Export-Csv -Path .\slack-identity-check.csv -NoTypeInformation -Encoding UTF8
    You should see: slack-identity-check.csv lists each Slack member with Matched True or False.
  3. 3

    Map identities

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Migrations tab > Map identities

    Select Auto-map (matches accounts with the same email address). Accounts still showing Mapping needed can be fixed one by one: select the row, type the user in Equivalent Microsoft 365 user or choose Unknown user, and select Save. For many users, select Export Identities, fill the Microsoft 365 Email ID (Enter unknown if user not present) column, then Import users > Select file and Save.

    You should see: No account shows Mapping needed.
  4. 4

    Map destinations

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Migrations tab > tick channels > Map destinations

    Choose Manually map to destination, then in Microsoft Teams name choose Create a new team or an existing team, and in Channel name choose Create a new channel and its type, then Add channel and Save changes. For many channels, choose Upload destinations and map, download MigrationDestination.csv, fill in team name, TeamID (or New), team type, channel name and channel type, and upload it. The tool can only migrate into channels it created. Microsoft recommends setting the destination channel type to shared. You cannot merge several Slack channels into one Teams channel.

    You should see: Every channel on the Migrations tab shows a destination team and channel.
  5. 5

    Stay inside Teams limits

    Where: Your channel mapping CSV

    A team supports up to 1,000 channels of any type, and deleted channels count for 30 days. Older Microsoft guidance quoting 200 channels per team is out of date. Count channels per team in the CSV before you upload it.

    You should see: No team in the mapping exceeds the documented channel limit.
6Run the migration4 steps
Slack contentMigrated by Microsoft's tool?
Public and private channel messages, threads, standard reactionsYes
Channel file attachmentsYes; restricted SharePoint filename characters become underscores
CanvasesYes, as HTML file attachments
ListsYes, as JSON file attachments
Channel owners and membersYes
Direct messages and group chatsNo
Workflows and custom app integrationsNo
Slack Connect and archived channelsNo
Custom emoji reactions and #channel linksNo
  1. 1

    Pilot a few channels

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Migrations tab, then the Teams client

    Migrate a handful of busy channels (tick them, Migrate, Start migration) and check threads, mentions, reactions, attachments and authors with the channel owners.

    You should see: Channel owners sign off the pilot channels in your pilot notes.
  2. 2

    Run the bulk migration

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Migrations tab

    Tick the channels, choose Migrate in the toolbar, check the Before you migrate pane confirms identities are mapped and consent is granted, then select Start migration. Twenty channels run in parallel and the rest queue.

    You should see: Channels move through queued and in-progress states to completed.
  3. 3

    Run an incremental pass if needed

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Conversations tab (shown as Channels in one part of Microsoft's article) > Specify export file, then the Migrations tab

    Microsoft prefers a single pass. If you need a second, upload a newer export from the same Slack workspace to Azure, provide it with Specify export file, then tick the earlier migration task and select Migrate > Start migration. Edits, deletions and new replies to already-migrated messages do not come across.

    You should see: New messages since the first export appear in the Teams channels.
  4. 4

    Download the reports

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Conversations tab and Migrations tab > Generate report, then Recent actions (clock icon)

    Tick the channels, select Generate report, wait, then open Recent actions and select the report link. Open SlackScanSummary.csv and SlackMigrationSummary.csv from the ZIP files.

    You should see: Both CSVs open, showing per-channel results including any NOTMIGRATED items.
7Replace apps, bots and webhooks3 steps
  1. 1

    Find Teams equivalents

    Where: Teams client > Apps (left rail) > search the store; Teams admin center for app permission policies

    Check whether each Slack app in your inventory has a Teams app in the Teams store. Many vendors publish both. Note which need admin approval in your organisation.

    You should see: Each Slack app in the inventory has a Teams replacement, a rebuild plan or a decision to retire it.
  2. 2

    Replace incoming webhooks with Workflows

    Where: Teams client > the destination channel > More options (...) > Workflows

    Office 365 Connectors in Teams, including connector-based incoming webhooks, were retired in May 2026. Search for the Send webhook alerts to a channel template (or build one with the When a Teams webhook request is received trigger), configure it and select Save. Copy the webhook link and point the sending system at the new URL. Use Adaptive Cards if you need interactive buttons.

    You should see: A test POST from the sending system appears as a post in the channel.
  3. 3

    Rebuild Slack workflows

    Where: Teams Workflows app or Power Automate (make.powerautomate.com)

    Slack Workflow Builder flows do not migrate. Rebuild the ones still needed in Workflows or Power Automate, and have each owner test them.

    You should see: Each needed workflow runs in Teams and the owner has signed it off.
8User adoption and cutover3 steps
  1. 1

    Explain the differences

    Where: Your Training plan and Quick-start guide for staff

    In Slack a channel often works like a quick chat. In Teams, short back-and-forth belongs in chats and channels suit topic-based threaded posts. Show people where each kind of conversation goes and how to set notifications.

    You should see: Training sessions are booked and the quick-start guide is published.
  2. 2

    Set a Slack end date

    Where: Your Communication plan

    Pick a date when Slack becomes read-only for each group, so you do not chase deltas. Tell people that DMs are not moving and how long Slack stays available for reference.

    You should see: Every group has a published read-only date.
  3. 3

    Train channel owners first

    Where: Teams, with each channel owner

    Owners set up tabs, pin key files and model good habits. Give everyone else a one-page quick-start guide.

    You should see: Each team has an owner who has completed training.
9Clean up after migration3 steps
  1. 1

    Disconnect the import

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams

    Select the Complete disconnect from Slack Import button at the top of the page, then Delete in the Delete data to complete disconnect dialog. Download the reports first.

    You should see: The Slack to Teams page returns to its starting state.
  2. 2

    Delete the export and revoke access

    Where: Azure portal > Storage accounts (or Azure CLI), then Microsoft Entra admin center (entra.microsoft.com) > Entra ID > Enterprise apps

    Delete the blob container and export file, or the storage account. In the Microsoft Entra admin center find the M365 Teams Migration app under Enterprise apps and revoke its permissions or delete it.

    az storage account delete --name contososlackexport --resource-group rg-slack-migration --yes
    You should see: The storage account no longer exists and the app no longer has permissions in your tenant.
  3. 3

    Close Slack

    Where: Your Slack workspace admin settings, following Slack's help centre

    Keep Slack for as long as your retention policy needs, export anything you must keep, then downgrade or close the workspace.

    You should see: Slack is downgraded or closed on the date in your communication plan.
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

Microsoft's Slack to Teams Migration Tool

Medium effort

Best for: Moving public and private channel history into Teams from a Slack export

  • First-party, in the Microsoft 365 admin center
  • Imports messages with original authors and dates, threads, reactions, files and membership
  • Nothing is deleted from Slack
  • Does not import direct messages, group chats, workflows, apps, Slack Connect or archived channels
  • Private channels need a full export on Business+ or Enterprise
  • You stage the export in your own Azure Blob Storage
Read more →

Third-party migration tool

Medium effort

Best for: Organisations that need content the Microsoft tool does not import

  • May cover more content types, depending on the vendor
  • Vendor support during the move
  • Vendor licence; check current pricing
  • Still limited by what your Slack plan lets you export

Fresh start in Teams, Slack kept read-only

Low effort

Best for: Workspaces with many quiet channels, or where history has little ongoing value

  • No export staging or mapping
  • Users start in a clean Teams structure
  • History stays in Slack, so you keep access or an export for records
  • Users must look in two places for a while
Our advice

Start with what your Slack plan can export, because that limits every route. For most organisations the Microsoft tool covers active channels well; archive quiet channels instead of moving them. If records rules require direct messages, export them on an eligible plan for archive, or evaluate a third-party tool.

Check your Slack plan before you promise private channelsReduces risk

Free and Pro exports contain public channels only. Private channels and DMs need Business+ with an approved full export, or Enterprise with export enabled, and approval takes time.

What to do

Confirm the plan and, on Business+, submit the full export application from the Export tab weeks before the migration. If you stay on Free or Pro, tell private channel owners now that their history will not move.

Slack Help Center: Export your workspace data
Archive quiet channels instead of moving themSaves time

Migration time follows message count. Microsoft quotes 2 to 3 messages per second per channel with 20 channels in parallel, so years of bot chatter in dead channels can add days to the run.

What to do

Use workspace analytics (Channels tab, Export CSV) and the tool's Scan messages results to rank channels by last activity. Skip channels nobody has posted in for a long time, and consider a date range on very busy channels.

Microsoft Learn: Introduction to the Slack to Teams Migration Tool
Tell people that DMs and group chats stay in SlackUser impact

Microsoft's tool does not move direct messages or group chats on any plan. For many teams that is where most day-to-day conversation lives, and users expect it to arrive.

What to do

Say so in the first announcement. Give a date until which Slack stays readable, and if records rules require DMs, export them on an eligible plan for archive or evaluate a third-party tool.

Tools that can get around this

Some third-party tools read Slack through its API and move direct messages into Microsoft Teams, which Microsoft's Slack import does not do.

  • CloudiwayMigrates Slack 1:1 direct messages into Teams chats. Its guide does not say where group DMs land, so confirm that before you plan for them.
  • AvePoint FlyLists Slack, including Slack direct messages, as a supported migration source.
Third-party tools, not endorsed by the platform vendor. Confirm in the tool's documentation and run a pilot first.
Microsoft Learn: Introduction to the Slack to Teams Migration Tool
Keep Slack active until attachments have copiedReduces risk

Slack exports contain links to files rather than the files. Microsoft's tool fetches attachments online from your workspace, so downgrading or closing Slack early leaves migrated messages without their files. Free plan exports only link files from the last 90 days.

What to do

Do not change the Slack subscription until the migration report shows attachments copied for every channel, and set the Slack renewal date with that in mind.

Slack Help Center: Export your workspace data
Map deactivated users and guests before you startSaves time

The tool will not migrate until every Slack user, including deactivated ones, is mapped to a Microsoft 365 account or to Unknown user. Large workspaces often have hundreds of former staff and guests.

What to do

Download the full member list from Slack, run the pre-check script in Step 4, and decide in advance which former staff map to Unknown user and which guests need a guest account in Microsoft 365.

Slack Help Center: Download a list of members in your workspace
Design teams first, because channels cannot be mergedUser impact

The tool migrates only into channels it creates and cannot merge several Slack channels into one Teams channel. A flat list of 300 Slack channels mapped one-to-one makes Teams hard to use.

What to do

Group Slack channels into teams by audience before mapping. Use the MigrationDestination.csv template to plan the whole map in a spreadsheet, and follow Microsoft's tip to use shared channels where you are unsure.

Microsoft Learn: Introduction to the Slack to Teams Migration Tool
Plan one main pass, not repeated deltasSaves time

Microsoft prefers a single pass. A second pass with a newer export brings new messages but not edits, deletions or new replies to messages already migrated.

What to do

Set a Slack read-only date per group and export after it. If you must run a pilot early, use Send all messages to migration or a date range that includes future messages so a later pass can add to it.

Tools that can get around this

Cloudiway supports delta passes: you restart the migration on the same channels and it detects what has already moved, so you can run an early pass and top it up before cutover. Its guide does not say whether edits or deletions made in Slack after the first pass are updated.

  • CloudiwayDelta passes add new Slack messages to channels already migrated, without starting again.
Third-party tools, not endorsed by the platform vendor. Confirm in the tool's documentation and run a pilot first.
Microsoft Learn: Introduction to the Slack to Teams Migration Tool
Treat the export and storage account as sensitive dataCompliance

The ZIP is your organisation's message history in one file. Microsoft also points out region choice affects performance and Azure bandwidth cost, and data residency rules may decide it for you.

What to do

Create a dedicated storage account with key access off and TLS 1.2, choose the region with your privacy owner, and delete the container (or the account) as soon as the migration report is signed off.

Microsoft Learn: Introduction to the Slack to Teams Migration Tool
Replace incoming webhooks with Workflows, not connectorsReduces risk

Office 365 Connectors in Teams, including connector-based incoming webhooks, were retired in May 2026. Guides that tell you to add an Incoming Webhook connector no longer work.

What to do

For each Slack incoming webhook, create a Teams workflow from the Send webhook alerts to a channel template and give the sending system the new URL.

Microsoft Learn: Create incoming webhooks with Workflows for Microsoft Teams
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
Message counts per channel match the scan

In the Slack to Teams tool (Setup > Migration and imports > Slack to Teams) select the channels, choose Generate report, and compare SlackScanSummary.csv with SlackMigrationSummary.csv.

Every selected channel shows as migrated, and NOTMIGRATED or NOTSUPPORTED items are only content types you already listed as not moving.
Every channel landed in the planned team

Compare the Migrations tab destinations with your channel mapping CSV, then open each team in the Teams client.

Each Slack channel appears as the planned channel in the planned team, and no team exceeds the documented channel limit.
Threads, authors, reactions and attachments came across

With the channel owners, open the busiest channels and check a sample of threads, mentions, standard reactions, attachments and message authors.

Threads keep their replies, messages show the mapped authors, and attachments open from the channel Files tab.
Membership and guest access are right

In the Teams client open Manage team > Members for each migrated team, and compare with the Slack member list you exported.

Members and owners match the Slack channel membership, guests have guest accounts, and former staff map to Unknown user as planned.
Users can sign in on desktop and mobile

Ask a pilot group from each team to sign in to the Teams desktop app and mobile app and open their migrated channels.

Every pilot user sees their teams and channels on both devices without an access request.
Webhooks and replacement apps post to Teams

Send a test POST from each system that used a Slack incoming webhook, and test each replacement app from your app inventory.

Each test appears as a post in the right channel, and every app on the list is replaced, rebuilt or retired.
Rebuilt workflows run

Have each workflow owner trigger their workflow in the Teams Workflows app or Power Automate (https://make.powerautomate.com).

Each needed workflow runs and its owner signs it off.
Slack is read-only for migrated groups

Check the Slack read-only date in your communication plan, and look at recent activity in the migrated channels in Slack.

No new messages appear in migrated Slack channels after the read-only date, apart from DMs you told people stay in Slack.
Rollback planIf it goes wrong

Roll back if

  • The migration will not start or fails for many channels (for example unmapped users or an unreadable export) and the fix will not fit before the Slack read-only date
  • The pilot shows missing threads, attachments or authors that channel owners will not accept
  • Channels were mapped to the wrong teams and the content cannot be used where it landed
  • Critical alerts from webhooks or apps do not arrive in Teams and there is no tested replacement

Point of no return

The tool copies from the Slack export and leaves Slack as it is, so while Slack stays active you can keep people working there. Messages posted in Teams after go-live exist only in Teams. Channels cannot be merged and the tool cannot migrate into an existing Teams channel, so content mapped to the wrong place means removing those teams and migrating again. The true points of no return are on the Slack side: downgrading or closing the workspace (attachments are fetched from Slack online, and your plan decides what you can export), and selecting Complete disconnect from Slack Import, which deletes the import data, so download the reports first.

  1. 1

    Hold the remaining migrations

    Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams

    Do not start migrations for further channels. Generate and download the reports for the channels already migrated.

    You should see: No new channels start migrating, and SlackScanSummary.csv and SlackMigrationSummary.csv are saved.
  2. 2

    Keep people working in Slack

    Where: Your Communication plan, and your Slack workspace admin settings

    Move the Slack read-only date for the affected groups and tell them to keep posting in Slack. Keep the Slack subscription active so attachments can still be fetched later.

    You should see: Users confirm they are back in Slack, and the Slack renewal date is past your new migration date.
  3. 3

    Point webhooks and integrations back at Slack

    Where: Each sending system you changed, using the app and webhook inventory from Step 1

    Restore the Slack incoming webhook URLs and app settings in each system you moved to Teams Workflows.

    You should see: A test alert from each system appears in the Slack channel again.
  4. 4

    Remove teams that were mapped wrongly

    Where: Teams admin center (https://admin.teams.microsoft.com) > Teams > Manage teams

    Select the teams the migration created in the wrong place and choose Archive to freeze them, or delete them if you will migrate those channels again. Deleting a team also removes its group, files and conversations, so confirm with the owners first.

    You should see: The wrongly mapped teams no longer appear as active teams.
  5. 5

    Fix the map and run again

    Where: Your channel mapping CSV, then the Slack to Teams tool

    Correct the destinations or identity mapping, upload a newer export from the same Slack workspace if you need one, and pilot a few channels before the bulk run.

    You should see: The pilot channels pass owner checks and the bulk run completes.

Agree the triggers and who decides before the go / no-go meeting. Use the rollback plan template.

Common problems and fixes6 errors
Private channels missing from the export

Cause: The workspace is on Free or Pro, or a full export was not approved.

Fix: Upgrade to a plan that supports full exports and apply for approval, or migrate public channels only.

Migration will not start: unmapped users

Cause: Every Slack user, including deactivated users, must be mapped before migration.

Fix: Map remaining users manually, via CSV import, or to Unknown user.

Content flagged NOTMIGRATED or NOTSUPPORTED

Cause: The message contains something the tool does not support, such as #channel links or custom emoji reactions.

Fix: Check the migration report and tell channel owners what to expect.

Cannot migrate into an existing Teams channel

Cause: The tool can only migrate into channels it created.

Fix: Map the Slack channel to a new channel created by the tool, in a new or existing team.

Tool cannot read the export file

Cause: The Office 365 Mover application does not have Storage Blob Data Reader on the storage account, or the URL is wrong.

Fix: Assign the role at the storage account scope and copy the blob URL again.

Incoming webhook posts stop arriving in Teams

Cause: Office 365 Connectors, including connector-based incoming webhooks, were retired in May 2026.

Fix: Create a workflow with the "When a Teams webhook request is received" trigger and update the sender with the new URL.

Search the full error library →

FAQ

Frequently asked questions

Can Slack direct messages be moved to Teams?

Not with Microsoft's Slack to Teams Migration Tool. Direct messages and group chats are not migrated. Export them for records or look at third-party tools.

Which Slack plan do I need to migrate private channels?

Business+ or Enterprise. Free and Pro exports include public channels only.

Does the migration keep original authors and dates?

Yes. Microsoft's tool keeps Created by and Created date on migrated messages.

Is anything deleted from Slack?

No. Microsoft states that no data is deleted from Slack during the migration.

How long will it take?

It depends on message volume. Microsoft quotes typical throughput of 2 to 3 messages per second per channel, with 20 channels in parallel.

Do I need Azure?

Yes. The export is staged in an Azure Blob Storage account that you own, and you delete it afterwards.

Sources

Official sources

9 official pages this guide is based on