PLATFORM
Slack Migration Tool
MigrationFox migrates Slack workspaces to Microsoft Teams with full message history and threaded replies. Channel rosters are enumerated and reported for cutover (Microsoft's Teams migration mode prevents direct member writes during import). File references in messages are preserved in the post-migration export so you can manually attach them in Teams during cutover — direct file-to-channel attachment carry during message import is in our roadmap as Microsoft's migration API matures. Whether you're consolidating on Microsoft 365 or retiring a Slack Free workspace before the 90-day message limit kicks in, MigrationFox handles the conversation data in a single job.
Channel Migration
Every public channel in your Slack workspace is enumerated during discovery. Private channels are included when the bot token has the required scopes. You can select individual channels or migrate the entire workspace in one pass.
For each Slack channel, MigrationFox creates a matching channel in the target Microsoft Teams team. Channel names are sanitized to fit Teams' naming rules (no slashes, no leading dots, max 50 characters) and collisions are resolved by appending a numeric suffix.
Message History with Threads
Slack messages are paginated using the conversations.history API with cursor-based iteration, so MigrationFox handles workspaces with millions of messages without hitting rate limits. Threaded replies are fetched per parent message using conversations.replies and attached beneath the parent in the destination.
Message formatting — bold, italics, code blocks, mentions, and emoji — is translated from Slack's mrkdwn syntax to Teams' HTML message format. User mentions are mapped using email address matching against the target tenant.
Attachments and Files
Files uploaded to Slack channels are downloaded using the Slack file API and re-uploaded to the corresponding Teams channel's SharePoint-backed file store. Each file is linked from the original message so the conversation context is preserved.
Large files use chunked upload sessions against Microsoft Graph. Files that exceed the Teams per-file size limit are logged to the skipped-items report with their original Slack URL so you can handle them manually.
Member Roster Export
Channel membership is read from the Slack conversations.members endpoint and mapped to the target tenant using email matching. The matched roster is included in the post-migration export so you can add users to the destination Teams channel during cutover — the Microsoft Teams migration API does not allow direct member writes while a channel is in migration mode, so member assignment is a deliberate post-migration step. Users without a Microsoft 365 match are logged separately so you can invite or skip them.
Authentication
MigrationFox authenticates with Slack using a bot token from a custom Slack app that you install into your workspace. The required OAuth scopes are documented in the job setup screen and include channels:read, channels:history, groups:read, groups:history, files:read, and users:read.
The bot token is encrypted at rest with AES-256 and is only used for the duration of the migration job. You can revoke it in the Slack admin console the moment the job completes.
Supported Migration Paths
Slack to Microsoft Teams
The primary supported path. Channels, messages, threads, and files are imported end-to-end during a single job; the channel roster is exported alongside for post-migration member assignment.
Pricing
Slack migrations are billed at $0.50 per GB transferred (measured by the total size of message JSON plus attachments). Your account starts with 2 GB free — no credit card required. Discovery scans are always free and unlimited.