How to Migrate from Slack to Mattermost in One Weekend
Complete step-by-step guide to migrating your team from Slack to Mattermost. Export data, import channels, and save thousands annually without losing history.
How to Migrate from Slack to Mattermost in One Weekend
Slack just increased prices again. Your 50-person team now pays $22,500 annually for Business+ tier. Meanwhile, Mattermost runs on a $40/month VPS serving unlimited users.
The migration seems daunting. You have 3 years of conversation history, 47 channels, custom integrations, and a team that resists change. But companies complete this migration every weekend with zero data loss.
This guide walks you through the entire process, from Friday afternoon planning to Monday morning launch.
Why Teams Are Leaving Slack for Mattermost
Before diving into logistics, understand what you're gaining:
Cost savings:
- Slack Business+: $15/user/month × 50 users = $9,000/year
- Mattermost self-hosted: $480/year (VPS) + $120/year (backup storage) = $600/year
- Annual savings: $8,400 (93% reduction)
Data sovereignty:
- All messages stored on your infrastructure
- No third-party AI training on your conversations
- GDPR/HIPAA compliance simplified
- Full audit trail control
Feature parity:
- Channels, threads, direct messages
- File sharing and search
- Custom integrations and webhooks
- Mobile apps (iOS/Android)
- SSO and LDAP support
The only thing you lose is Slack's vendor lock-in.
Friday Afternoon: Pre-Migration Setup (3-4 hours)
Step 1: Export Slack Data (30 minutes)
For Slack Standard/Plus plans:
- Go to https://my.slack.com/services/export
- Select date range (typically "All time")
- Click "Start Export"
- Download the ZIP file when ready (5-30 minutes depending on size)
For Slack Free tier: Slack doesn't provide full export. Use third-party tools:
slack-export-viewer(open source)- Manual export of critical channels
- Accept that recent 90-day history limitation exists
Export contains:
- Channel messages and threads
- Direct messages
- File attachments (up to storage limits)
- User profiles
- Custom emoji
Step 2: Deploy Mattermost (45 minutes)
Option A: Quick VPS Deployment
# SSH into your Ubuntu 22.04 VPS
ssh root@your-server-ip
# Install Docker
apt update && apt upgrade -y
apt install -y docker.io docker-compose
# Clone Mattermost Docker deployment
cd /opt
git clone https://github.com/mattermost/docker
cd docker
# Configure environment
cp env.example .env
nano .env
Critical .env settings:
DOMAIN=chat.yourcompany.com
MATTERMOST_HTTPS_PORT=443
MATTERMOST_ENABLE_SSL=true
TZ=America/New_York
Launch Mattermost:
docker-compose up -d
Option B: Managed Deployment
[AFFILIATE_CALLOUT_HERE]
Setting up SSL certificates, configuring reverse proxies, and managing database backups adds complexity. If you want Mattermost deployed with automated SSL, monitoring, and daily backups already configured, managed platforms handle the infrastructure.
Step 3: DNS and SSL Configuration (20 minutes)
Set DNS A record:
chat.yourcompany.com → your-server-ip
Install SSL certificate (if not using managed hosting):
apt install -y certbot python3-certbot-nginx
certbot --nginx -d chat.yourcompany.com
Visit https://chat.yourcompany.com and complete initial setup:
- Admin email: admin@yourcompany.com
- Team name: Your Company
- Create first team
Step 4: Install Slack Import Plugin (15 minutes)
Enable plugin uploads:
- System Console → Plugins → Plugin Management
- Enable "Upload Plugin"
- Download Slack import tool: https://github.com/mattermost/mattermost-plugin-bulk-import
- Upload via System Console → Plugins → Management
Configure Mattermost for import:
# Increase max file upload size
docker exec -it mattermost-docker_app_1 mattermost config set FileSettings.MaxFileSize 104857600
Saturday Morning: Data Migration (2-3 hours)
Step 5: Convert Slack Export to Mattermost Format (45 minutes)
Slack and Mattermost use different data structures. Use the official converter:
# Install mmetl (Mattermost Migration Tool)
wget https://github.com/mattermost/mmetl/releases/download/v1.0.0/mmetl
chmod +x mmetl
# Convert Slack export
./mmetl transform slack --team yourteam --file slack-export.zip --output mattermost-import.jsonl
What gets converted:
- Channels → Mattermost channels
- Users → Automatically created/matched
- Messages → Preserves timestamps and threading
- Reactions → Emoji reactions maintained
- Files → Uploaded to Mattermost storage
What requires manual handling:
- Custom Slack apps/bots (rebuild as webhooks)
- Zapier integrations (use n8n or native webhooks)
- Third-party apps (check Mattermost marketplace)
Step 6: Import Data into Mattermost (60 minutes)
Run bulk import:
# Copy import file to Mattermost container
docker cp mattermost-import.jsonl mattermost-docker_app_1:/tmp/
# Execute import
docker exec -it mattermost-docker_app_1 mattermost import bulk /tmp/mattermost-import.jsonl --apply --workers 4
Monitor import progress:
# Watch logs
docker logs -f mattermost-docker_app_1
Typical import times:
- Small workspace (< 10K messages): 5-10 minutes
- Medium workspace (10K-100K messages): 30-60 minutes
- Large workspace (100K+ messages): 2-4 hours
Common import errors:
- File size limits → Increase in System Console
- Memory issues → Adjust Docker memory limits
- User email conflicts → Pre-create user accounts
Step 7: Verify Data Integrity (30 minutes)
Check channel import:
# Compare channel counts
# Slack channels: Count from export
# Mattermost: System Console → Reporting → Site Statistics
Verify message history:
- Open random channels in Mattermost
- Search for known messages
- Check file attachments load correctly
- Verify @mentions and threading work
Test user accounts:
- All Slack users should appear in Mattermost
- Profile pictures imported (if available)
- User statuses preserved
Saturday Afternoon: Integration Migration (2-3 hours)
Step 8: Recreate Critical Integrations
GitHub notifications:
# In Mattermost
/settings → Integrations → Incoming Webhooks → Add
Copy webhook URL
# In GitHub repository settings
Settings → Webhooks → Add webhook
Paste Mattermost webhook URL
CI/CD notifications: Replace Slack webhook URLs in your CI config:
# .github/workflows/deploy.yml
- name: Notify Mattermost
uses: mattermost/action-mattermost-notify@master
with:
MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK }}
TEXT: "Deployment completed successfully"
Custom bots: Port Slack bot logic to Mattermost:
// Example: Simple notification bot
const axios = require("axios");
async function sendMattermost(message) {
await axios.post("https://chat.yourcompany.com/hooks/xxx", {
text: message,
channel: "deployments",
});
}
Step 9: Configure SSO (Optional, 45 minutes)
Connect to existing auth provider:
- System Console → Authentication → SAML 2.0
- Configure with Google Workspace, Okta, or Azure AD
- Test with personal account before company-wide rollout
Benefits:
- Single sign-on for all users
- Automatic user provisioning
- Centralized access control
Sunday: Team Preparation (1-2 hours)
Step 10: Create Migration Guide for Team
Send email 2 days before migration:
Subject: We're moving from Slack to Mattermost this Monday
Hi team,
We're migrating to Mattermost, our self-hosted communication platform. This saves us $8,400 annually while keeping all features you use daily.
What changes:
✓ New URL: https://chat.yourcompany.com
✓ Desktop app: Download from [link]
✓ Mobile apps: iOS/Android available
✓ All history preserved
What stays the same:
✓ Same channels and conversations
✓ Direct messages intact
✓ File sharing works identically
✓ @mentions and notifications
Action needed:
1. Download Mattermost desktop app [link]
2. Log in with your work email
3. Install mobile app (optional)
Monday morning checklist:
- Join team at 9 AM for quick onboarding
- Test notifications
- Verify you can access all channels
Questions? Reply to this email.
Step 11: Prepare Admin Team
Identify 3-5 "Mattermost champions":
- Early adopters who can help others
- Distribute across departments
- Give admin training on Friday
Create quick reference guide:
- Keyboard shortcuts comparison
- How to set up notifications
- Mobile app setup
- Troubleshooting FAQs
Monday Morning: Cutover (2 hours)
Step 12: Final Sync and Launch (30 minutes)
Re-export Slack for weekend messages:
# Export Saturday-Sunday activity
# Run conversion again
./mmetl transform slack --team yourteam --file slack-export-weekend.zip --output weekend-import.jsonl
# Import delta
docker exec -it mattermost-docker_app_1 mattermost import bulk /tmp/weekend-import.jsonl --apply
Archive Slack workspace:
- Slack Admin → Settings → Workspace Settings
- Disable posting to all channels
- Add workspace-wide message: "We've moved to Mattermost: [link]"
- Keep read-only for 30 days
Step 13: Live Onboarding Session (60 minutes)
9 AM company call:
- Welcome to Mattermost (5 min)
- Quick tour of interface (10 min)
- How to join channels (5 min)
- Notification setup (10 min)
- Mobile app demo (10 min)
- Q&A (20 min)
First day support:
- Monitor "help" channel
- Respond to DMs quickly
- Document common questions
Step 14: Decommission Slack (30 days later)
After 30-day grace period:
- Export final Slack data for archive
- Cancel Slack subscription
- Download all Slack data
- Store encrypted backup
- Confirm cancellation
Savings realized:
- Month 1: Pro-rated Slack savings + VPS cost
- Months 2-12: Full $700/month savings
- Year 2+: Compounding savings
Post-Migration Optimization
Performance Tuning
Database optimization:
# Enable search indexing
docker exec -it mattermost-docker_postgres_1 psql -U mmuser -d mattermost -c "CREATE INDEX idx_posts_message ON posts USING gin(to_tsvector('english', message));"
File storage optimization:
# Configure S3-compatible storage for files
# In System Console → File Storage
# Use Wasabi ($5.99/TB) or Backblaze B2 ($5/TB)
User Adoption Tactics
Week 1: Daily tips
- Day 1: Keyboard shortcuts
- Day 2: Advanced search
- Day 3: Custom notifications
- Day 4: Integrations
- Day 5: Mobile app features
Week 2: Advanced features
- Custom emoji and reactions
- Channel organization
- Saved posts and flags
- Do Not Disturb schedules
Common Migration Pitfalls (And How to Avoid Them)
Pitfall 1: Incomplete data export
- Solution: Export early, verify contents before migration weekend
Pitfall 2: Users forget new URL
- Solution: Browser bookmarks, redirect old Slack URL
Pitfall 3: Integration breakage
- Solution: Test all critical integrations in staging before cutover
Pitfall 4: Resistance to change
- Solution: Involve team in decision, highlight cost savings
Pitfall 5: Lost custom emoji
- Solution: Export custom emoji separately, bulk import to Mattermost
Migration Checklist
Friday:
- [ ] Export Slack data
- [ ] Deploy Mattermost server
- [ ] Configure DNS and SSL
- [ ] Install import plugin
Saturday:
- [ ] Convert Slack export to Mattermost format
- [ ] Import data to Mattermost
- [ ] Verify data integrity
- [ ] Migrate critical integrations
Sunday:
- [ ] Send team migration guide
- [ ] Train admin champions
- [ ] Create quick reference documentation
- [ ] Test all workflows
Monday:
- [ ] Final data sync
- [ ] Archive Slack workspace
- [ ] Live onboarding session
- [ ] Monitor and support users
The Exit-Saas Perspective
Migrating communication platforms isn't just cost savings. It's reclaiming ownership.
When you use Slack, Salesforce (owner) controls:
- Price increases (15-25% annually)
- Feature access (Enterprise features behind paywall)
- Data retention (90-day limit on Free plan)
- AI training on your conversations
When you self-host Mattermost:
- Costs fixed at infrastructure level
- All features available to everyone
- Infinite message history
- Complete data privacy
One weekend of migration effort saves your company $42,000 over 5 years. That's a senior engineer's salary.
Explore our tools directory for more self-hosted collaboration alternatives. The best time to migrate was when Slack doubled prices. The second best time is this weekend.
Ready to Switch?
Deploy Your Open-Source Stack on DigitalOcean in 1-click
Get $200 in Free Credits
New users receive $200 credit valid for 60 days
Trusted by 600,000+ developers worldwide. Cancel anytime.