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.
How do you migrate from Slack to Microsoft Teams?
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.
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.
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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Replacement apps, webhooks and workflowsAlerts and automations must post into Teams before people stop watching Slack, or they go missing.
- 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.
- 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.
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 dataHow 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 ToolHow 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 ToolHow 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 ToolHow 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 ToolHow 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 ToolHow 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 ToolHow 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 ToolHow 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 ToolHow 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 ToolHow 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 ToolHow 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
- 1
Assess Slack
Several weeks beforeWatch 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.
Show the detailed steps (4) →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.
- 2
Export from Slack
Show the detailed steps (3) →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.
- 3
- 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.
Show the detailed steps (5) →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.
- 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.
Show the detailed steps (4) →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.
- 6
Replace apps and webhooks
Show the detailed steps (3) →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.
- 7
Switch over and clean up
On the read-only dateWatch 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) →
- 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.
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.
1What you need before step one
| Need | Details | Where to get it |
|---|---|---|
| Slack Workspace Owner or Admin | To export data, download the member list and view analytics. Enterprise: Org Owner, Org Admin or Export Admin. | Your Slack workspace |
| Global Administrator | Once, to grant consent to the M365 Teams Migration app. | Microsoft 365 admin center, https://admin.cloud.microsoft |
| Migration operator role | Microsoft 365 Migration Administrator (recommended), SharePoint Administrator or Global Administrator. | Microsoft 365 admin center > Roles |
| Azure subscription | Owner, 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 licences | Every mapped user needs a Teams licence. | Assign licences |
2Assess workspaces, channels, apps and users4 steps
- 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
Pull channel statistics
Where: Slack desktop app > Admin (in the sidebar) > Workspace analytics > Channels tabOn 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
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
List members and guests
Where: Slack desktop app > Admin (in the sidebar) > Manage members > Export full member listExport 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 plan | Export available | Notes from Slack's help centre |
|---|---|---|
| Free | Public channels | Only links to files from the last 90 days |
| Pro | Public channels | Private channels and DMs are not available |
| Business+ | Public channels; with approval, all channels and DMs | Full export needs approval from the Workspace Primary Owner; scheduled exports available |
| Enterprise | Public channels; all conversations once enabled | Org Owners contact Slack to enable self-serve export; can export several workspaces into one file |
- 1
Unarchive channels you want
Where: Slack desktop app > Home > Directories > Channels tab > Channel type: Archived channelsMicrosoft'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
Run the export
Where: Slack desktop app > Admin (in the sidebar) > Workspace settings > Security > Import & export data > Export tabChoose 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
Treat the export as sensitive
Where: Your admin PC and the migration storage account onlyThe 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.
4Grant consent and stage the export in Azure5 steps
- 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 pageA 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
Create the storage account
Where: Azure portal (portal.azure.com) > Storage accounts > CreateOn 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 tsvYou should see: The storage account opens with status Available. - 3
Give the migration app read access
Where: Azure portal > Storage accounts > your account > Access Control (IAM) > Add > Add role assignmentSelect 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
Create the container, upload and copy the URL
Where: Azure portal > your storage account > Storage browser > Blob containersSelect 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
Connect the tool to the export
Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Get startedPaste 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.
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
Scan and select channels
Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Conversations tabTick 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
Check identity matches in advance (optional)
Where: PowerShell on your admin PC, in the folder where you unzipped the export, connected with Connect-MgGraphThis script checks which Slack members in the export's
users.jsonhave 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 UTF8You should see: slack-identity-check.csv lists each Slack member with Matched True or False. - 3
Map identities
Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Migrations tab > Map identitiesSelect 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
Map destinations
Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Migrations tab > tick channels > Map destinationsChoose 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
Stay inside Teams limits
Where: Your channel mapping CSVA 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 content | Migrated by Microsoft's tool? |
|---|---|
| Public and private channel messages, threads, standard reactions | Yes |
| Channel file attachments | Yes; restricted SharePoint filename characters become underscores |
| Canvases | Yes, as HTML file attachments |
| Lists | Yes, as JSON file attachments |
| Channel owners and members | Yes |
| Direct messages and group chats | No |
| Workflows and custom app integrations | No |
| Slack Connect and archived channels | No |
| Custom emoji reactions and #channel links | No |
- 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 clientMigrate 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
Run the bulk migration
Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to Teams > Migrations tabTick 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
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 tabMicrosoft 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
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.csvandSlackMigrationSummary.csvfrom the ZIP files.You should see: Both CSVs open, showing per-channel results including any NOTMIGRATED items.
7Replace apps, bots and webhooks3 steps
- 1
Find Teams equivalents
Where: Teams client > Apps (left rail) > search the store; Teams admin center for app permission policiesCheck 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
Replace incoming webhooks with Workflows
Where: Teams client > the destination channel > More options (...) > WorkflowsOffice 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
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
Explain the differences
Where: Your Training plan and Quick-start guide for staffIn 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
Set a Slack end date
Where: Your Communication planPick 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
Train channel owners first
Where: Teams, with each channel ownerOwners 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
Disconnect the import
Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to TeamsSelect 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
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 appsDelete 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 --yesYou should see: The storage account no longer exists and the app no longer has permissions in your tenant. - 3
Close Slack
Where: Your Slack workspace admin settings, following Slack's help centreKeep 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.
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 effortBest 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
Third-party migration tool
Medium effortBest 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 effortBest 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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
How do you check it worked, or roll back?
Full validation checklist8 checks
Run these before you declare the migration complete. Record the results in the data validation report.
| Check | How to check | What good looks like |
|---|---|---|
| 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
Hold the remaining migrations
Where: Microsoft 365 admin center (admin.cloud.microsoft) > Setup > Migration and imports > Slack to TeamsDo 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
Keep people working in Slack
Where: Your Communication plan, and your Slack workspace admin settingsMove 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
Point webhooks and integrations back at Slack
Where: Each sending system you changed, using the app and webhook inventory from Step 1Restore 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
Remove teams that were mapped wrongly
Where: Teams admin center (https://admin.teams.microsoft.com) > Teams > Manage teamsSelect 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
Fix the map and run again
Where: Your channel mapping CSV, then the Slack to Teams toolCorrect 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 exportCause: 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 usersCause: 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 NOTSUPPORTEDCause: 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 channelCause: 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 fileCause: 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 TeamsCause: 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.
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.
Official sources
9 official pages this guide is based on
Vendors change limits and features, so confirm details on the source before you rely on them. Last checked 4 Nov 2026.