comms-scheduling
Intercom logo

Should I self-host Intercom?

YESworth it

Intercom starts at $35/seat and climbs fast; Chatwoot does the messenger widget, inbox and campaigns without the per-seat meter. Same replacement and evidence as the Zendesk verdict.

The math (nothing hidden, including your time)

Intercom (Copilot, per seat)$35.00/mo
VPS share + storage−$2.00/mo
Your maintenance: 45 min/mo at $20/h−$15.00/mo
Net saving$18.00/mo
Setup: 42 min measured (one-time)$14.00
Break-even0.8 months
Markup Index (price ÷ real self-host cost)2.1×

Price: source, checked 2026-08-06. Inputs are stored in git; every number above is derived, never hand-written.

What you lose

  • Intercom's product-tour and outbound-message machinery
  • Fin AI agent — their answer bot is genuinely ahead

What you're paying Intercom for

  • in-app messenger
  • shared inbox
  • outbound messages
  • help articles
Chatwoot running from the boot-verified compose file
Chatwoot, running from the compose file on this page — screenshot from our verified instance, not marketing material.

Ranked alternatives

A website chat widget feeding a shared agent inbox you run yourself, with no per-seat meter and no per-resolution bill.

chatwoot/chatwoot · ★ 35,703 · last commit 0d ago · MIT

Hardware

Runs comfortably on a real VPS (2 GB+).

The tested compose file (our evidence, CI-booted)

# Chatwoot — support inbox; rails web + sidekiq + postgres(pgvector) + redis
x-cw-env: &cw-env
  SECRET_KEY_BASE: 0123456789abcdef0123456789abcdef0123456789abcdef
  FRONTEND_URL: http://localhost:3006
  POSTGRES_HOST: cw-db
  POSTGRES_USERNAME: chatwoot
  POSTGRES_PASSWORD: chatwoot
  POSTGRES_DATABASE: chatwoot
  REDIS_URL: redis://cw-cache:6379
  RAILS_ENV: production
  NODE_ENV: production
  INSTALLATION_ENV: docker
services:
  chatwoot-web:
    image: chatwoot/chatwoot:latest
    container_name: chatwoot-web
    restart: unless-stopped
    depends_on:
      cw-db:
        condition: service_healthy
      cw-cache:
        condition: service_healthy
    environment: *cw-env
    entrypoint: docker/entrypoints/rails.sh
    command: sh -c 'bundle exec rails db:chatwoot_prepare && bundle exec rails s -p 3000 -b 0.0.0.0'
    ports:
      - "3006:3000"
    healthcheck:
      test: ["CMD-SHELL", "wget -qO- http://localhost:3000/api >/dev/null || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 60
      start_period: 120s
  chatwoot-worker:
    image: chatwoot/chatwoot:latest
    container_name: chatwoot-worker
    restart: unless-stopped
    depends_on:
      cw-db:
        condition: service_healthy
      cw-cache:
        condition: service_healthy
    environment: *cw-env
    entrypoint: docker/entrypoints/rails.sh
    command: sh -c 'bundle exec sidekiq -C config/sidekiq.yml'
    healthcheck:
      test: ["CMD-SHELL", "ps aux | grep -q '[s]idekiq' || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 30
      start_period: 60s
  cw-db:
    image: pgvector/pgvector:pg16
    restart: unless-stopped
    environment:
      POSTGRES_USER: chatwoot
      POSTGRES_PASSWORD: chatwoot
      POSTGRES_DB: chatwoot
    volumes:
      - cw-db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U chatwoot"]
      interval: 5s
      timeout: 5s
      retries: 12
  cw-cache:
    image: redis:7-alpine
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 12
volumes:
  cw-db:

Want a guided install instead? caniselfhostit.com/intercom has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.

Verification

Protocol v1 · verified by zernonia on 2026-08-10 · setup measured at 42 min · AI assistant: claude-code (allowed & stated)

Full timed log
# Intercom — verdict log

- **Date:** 2026-08-10
- **Verdict:** YES — worth it
- **Protocol:** v1 (2GB reference env, Docker preinstalled, AI assistant: claude-code)

## Setup evidence (shared)

- This verdict rides on the same replacement verified for `zendesk-chatwoot` — see `compose/zendesk-chatwoot.yml` and its log.

## The call

Intercom starts at $35/seat and climbs fast; Chatwoot does the messenger widget, inbox and campaigns without the per-seat meter. Same replacement and evidence as the Zendesk verdict.

Verdict history

  • 2026-08-10: unscored → YES — Initial verdict: Intercom starts at $35/seat and climbs fast; Chatwoot does the messenger widget, inbox and campaigns without t.