flag92 flag92
Blog
Published Fri May 08 2026 08:00:00 GMT+0800 (中国标准时间)
case studymigrationSaaSChatwoot

Case · A B2B SaaS migrated from Intercom to Chatwoot in 6 weeks

A 2,000-customer, $2M ARR B2B SaaS completed Intercom → Chatwoot migration in 6 weeks. Full timeline, headcount, scars.

Background#

  • Business: B2B developer-tool SaaS
  • Customers: 2,000+ paid + 6,000+ free
  • ARR: ~$2M
  • Team: 35 (incl. 6 support + 2 engineers)
  • Previous SaaS: Intercom Pro 5 seats + Fin AI ($1,650/mo)

Trigger#

January 2026 Intercom shifted Fin pricing from purely outcome-based to a “AI seat + Resolution” mix. Projected monthly went from $1,650 to $2,800 (+70%). The CFO greenlit “evaluate alternatives.”

Team#

RoleHeadcountAllocation
Project manager16 weeks × 50%
Backend engineer16 weeks × 100%
Support lead16 weeks × 30%
Support agents6Weeks 5-6, 3 hours each

Total: ~12 person-weeks.

6-week timeline#

Week 1 — export + setup#

  • Pulled 28,000+ conversations via Intercom Export API
  • 4 Hetzner VPS up: Chatwoot, Dify, Postgres (managed), Redis
  • Wrote ~200-line Python import script
  • Key finding: Intercom attachment URLs expire — download to S3 within 7 days

Week 2 — automated migration#

  • Bulk import 28k conversations overnight (~6 hours)
  • Contact profiles, custom fields, tags migrated
  • Help Center (80 articles) imported to Dify KB
  • 15 critical macros → Chatwoot canned responses

Week 3 — business orchestration#

Redesigned Intercom Triggers / Automations:

Old Intercom ruleNew
”New ticket + priority=high → assign Team Lead”Chatwoot Automation Rule
”No reply 3 days → escalate”n8n cron + Chatwoot API
”Customer tagged ‘trial’ → ping sales Slack”n8n webhook
”Fin can’t answer → create Salesforce lead”Dify Workflow failure branch + n8n

Week 4 — prompt + KB tuning#

  • Translated Fin “Personality” into a Dify prompt
  • 3 cycles of “eval set → tweak chunking → re-eval”
  • Default MRR@5 0.71 → tuned 0.88

Week 5 — internal beta + training#

  • 3-hour training per agent
  • 10% of real traffic → Chatwoot; rest still on Intercom
  • Daily failure review

Week 6 — cutover#

  • Day 1: 50% / 50%
  • Day 3: 80% / 20%
  • Day 5: 100% Chatwoot; Intercom read-only
  • Day 7: Intercom downgraded to minimum (6-month backup retention)

Cost#

ItemIntercom (new pricing)Chatwoot self-host
Platform / seats$1,800$0
AI seats + Resolution$1,000$0
LLM tokens$80
4 VPS$120
Email / domain$30
Monthly$2,800$230
Annual savings$30,840

ROI: 12 person-weeks × $100/hr × 40h = $48,000 investment. Net positive after month 19 (realistically month 24 with maintenance).

Business metrics, 4 weeks before/after#

MetricBeforeAfter
Monthly tickets2,6402,580 (flat)
First response4 min (incl. human)8 s (AI)
AI deflection38% (Fin)52% (Dify tuned)
CSAT (AI leg)4.04.2
Complaint tickets3/mo5/mo (slight uptick)

Note: complaint uptick came from edge cases (“custom enterprise pricing”) where the more specific AI stalled. Fix: route these to humans via a Prompt whitelist.

Customer perception#

Week 8 post-migration NPS email:

  • “Has support experience changed last month?”
  • 80% said “no change or better”
  • 12% said “answers are sometimes more detailed” (positive)
  • 8% said “sometimes feels robotic” (mainly from long-tenured customers)

Mitigation: tagged accounts skip AI and route directly to humans.

Engineering load by week#

WeekEngineerSupport lead
140h (setup + script)4h
240h (import + debug)6h
340h (n8n orchestration)8h
430h (prompt tuning)20h
520h (beta bugfixes)18h
620h (cutover + cleanup)10h
Total190h66h

Steady state ongoing: ~5h/week engineering — mostly prompt tweaks and KB updates.

5 key decisions#

  1. No custom RAG service — used Dify: LlamaIndex would have added 3-4 weeks; Dify covered 90%
  2. n8n over direct webhooks: rules change often; visual workflows reduce maintenance
  3. 1 week of parallel running, not 3 days: edge cases surfaced in week 5
  4. Kept Intercom read-only for 6 months: compliance + rollback insurance
  5. Train agents, not “fully automate”: humans still own SLAs; AI is a tool

What we should have done#

3 regrets:

  1. Load test 1 week earlier — day 2 hit Sidekiq OOM
  2. Customer notification email — sent on cutover day; some long-tenured customers missed it
  3. Automate KB sync — docs change still requires manual Dify update

Who should migrate#

If you match:

  • Intercom > $1,500/mo
  • One full-time engineer available for a month
  • Support team ≥ 3 people

Strongly recommend migrating. Payback < 2 years.

If not (< 5-person team, no engineering capacity, < $500/mo) → stay on Intercom.

Search

Press ⌘ K to open