How to Migrate from Intercom to Chatwoot
·OSSAlt Team
intercomchatwootmigrationcustomer supportguide
How to Migrate from Intercom to Chatwoot
Intercom's pricing starts at $39/seat/month for the cheapest plan and scales to $139/seat for Pro. For a 10-seat team, that's $4,680-16,680/year. Chatwoot provides live chat, helpdesk, and omnichannel support — self-hosted, no per-seat fees.
What Maps
| Intercom Feature | Chatwoot Equivalent |
|---|---|
| ✅ Messenger (live chat) | Website inbox (widget) |
| ✅ Inbox (helpdesk) | Conversations |
| ✅ Email support | Email inbox |
| ✅ Social channels | Facebook, Twitter, WhatsApp, Telegram |
| ✅ Canned responses | Canned responses |
| ✅ Team assignment | Team assignment |
| ✅ Labels/Tags | Labels |
| ⚠️ Custom bots | Basic bot (limited) |
| ⚠️ Product tours | Not available |
| ❌ Outbound campaigns | Not available (use email tool) |
| ❌ Help center/articles | Not available (use separate wiki) |
| ❌ Series (automation flows) | Basic automation rules |
Step 1: Deploy Chatwoot
git clone https://github.com/chatwoot/chatwoot.git
cd chatwoot
cp .env.example .env
# Configure FRONTEND_URL, SECRET_KEY_BASE, database, Redis
docker compose up -d
Step 2: Replace the Chat Widget
Remove Intercom:
<!-- DELETE THIS -->
<script>
window.intercomSettings = { api_base: "...", app_id: "YOUR_ID" };
</script>
Add Chatwoot:
<script>
window.chatwootSettings = { position: "right", type: "standard" };
(function(d,t) {
var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
g.src="https://support.yourdomain.com/packs/js/sdk.js";
g.defer=true; g.async=true;
s.parentNode.insertBefore(g,s);
g.onload=function(){
window.chatwootSDK.run({
websiteToken: 'YOUR_TOKEN',
baseUrl: 'https://support.yourdomain.com'
})
}
})(document,"script");
</script>
Identify users (like Intercom):
window.$chatwoot.setUser('user-id', {
email: 'user@example.com',
name: 'Jane Doe',
avatar_url: 'https://...',
company_name: 'Acme Inc',
});
Step 3: Export Intercom Contacts
- Intercom → Contacts → Export
- Download CSV
- Import into Chatwoot via API:
# Batch import contacts
for contact in contacts; do
curl -X POST https://support.yourdomain.com/api/v1/accounts/1/contacts \
-H "api_access_token: TOKEN" \
-d "{\"name\": \"$name\", \"email\": \"$email\"}"
done
Step 4: Set Up Canned Responses
Recreate Intercom saved replies:
- Settings → Canned Responses
- Create responses with shortcodes
- Agents type
/shortcodein conversations to insert
Step 5: Configure Automations
Replace Intercom's basic automation:
- Settings → Automation
- Create rules for routing, labeling, and assignment
- Examples:
- "If message contains 'billing'" → assign to Billing team
- "If new conversation" → auto-assign to available agent
- "If no response in 30 min" → send canned response
What You'll Lose (and Alternatives)
| Intercom Feature | Alternative |
|---|---|
| Help center/articles | BookStack, Outline, or Docusaurus |
| Product tours | Shepherd.js (open source) |
| Outbound campaigns | Listmonk or Mautic |
| Custom bots (Fin) | Chatwoot bot (basic) or custom integration |
| User event tracking | PostHog or custom analytics |
Cost Comparison
| Seats | Intercom Starter | Chatwoot Self-Hosted | Savings |
|---|---|---|---|
| 5 | $195/month | $15/month | $2,160/year |
| 10 | $390/month | $30/month | $4,320/year |
| 25 | $975/month | $50/month | $11,100/year |
Migration Timeline
| Week | Task |
|---|---|
| Week 1 | Deploy Chatwoot, set up channels, swap widget |
| Week 2 | Import contacts, create canned responses |
| Week 3 | Run both for live conversations |
| Week 4 | Full cutover, cancel Intercom |
Compare customer engagement tools on OSSAlt — live chat, helpdesk features, and pricing side by side.