Self-Hosted vs Cloud Support Tools: Chatwoot, Intercom, Zendesk, and the Trade-Offs Nobody Mentions
Self-hosted support tools like Chatwoot promise privacy, control, and no per-seat fees. But you're the one patching security vulnerabilities at 2am.
Self-Hosting Sounds Great Until You're On-Call for Your Own Helpdesk
The appeal of self-hosted support tools is real. No per-seat pricing. Full control over your data. No vendor telling you what features you can use on which plan. Chatwoot, the most popular open-source option, has nearly 28,000 GitHub stars and a growing community. Papercups had momentum before they went quiet. Zammad is solid for teams that want ticket-based support without a chatbot layer.
I understand why teams are drawn to this. Intercom charges $29/seat/month minimum. Zendesk starts at $55/agent/month. For a 10-person support team, that's $3,480 to $6,600/year before you even turn on AI features. Self-hosting Chatwoot on a $50/month VPS looks like a bargain.
But I've watched four teams make this switch in the last year. Two went back to cloud tools within six months. Here's what actually happens.
The Real Cost of Self-Hosting
The VPS is cheap. Everything else isn't.
You need someone to set it up. Not just install it, but configure SSL, set up email channels (SMTP and IMAP), configure the widget, connect your domain, set up backups, and test the WebSocket connections that power live chat. That's 2-4 days of engineering time for someone who's done it before. Longer if they haven't.
Then you need to keep it running. Chatwoot pushes updates roughly every two weeks. Some are security patches. You can't skip those. Each update means pulling new code, running migrations, restarting services, and testing that nothing broke. That's 1-2 hours per update if it goes smoothly. If a migration fails, clear your afternoon.
Then there's scaling. Chatwoot on a single VPS works fine up to maybe 20 agents and a few hundred conversations per day. Beyond that, you need to split the web server, Sidekiq workers, and database onto separate machines. You need Redis configured properly. You need connection pooling. This is real infrastructure work.
A conservative estimate for a team of 5-10 agents: $50-100/month in hosting, plus 8-12 hours of engineering time per month for maintenance. If your engineers cost $75/hour (fully loaded), that's $600-900/month in labor. Add hosting and you're at $650-1,000/month.
Intercom for the same team: $145-290/month (Essential plan, 5-10 seats, annual billing). Zendesk: $275-550/month (Suite Team, annual).
The cloud tool is cheaper unless you value your engineers' time at zero.
Where Self-Hosting Actually Wins
Two scenarios where self-hosting makes sense, and they're both legitimate.
If you handle sensitive data (healthcare, finance, government contracting), keeping customer conversations on infrastructure you control isn't a nice-to-have. It's a compliance requirement. HIPAA, SOC 2, and certain GDPR interpretations all get easier when the data never leaves your servers. Chatwoot on your own infrastructure, with encrypted backups you manage, gives you an audit trail that "Intercom stores it somewhere in AWS us-east-1" doesn't.
If you have a large team (30+ agents) and your primary need is basic ticketing and live chat without AI, self-hosting starts winning on pure cost. At 30 agents, Zendesk Suite Team costs $1,650/month. Self-hosting costs roughly the same $650-1,000/month regardless of team size, because you're paying for infrastructure and maintenance, not seats.
Where Cloud Tools Win
Everything else. Seriously.
Cloud support tools handle uptime, security patches, scaling, email deliverability, widget performance, and browser compatibility. You don't think about any of it. When Intercom pushes an update, it just appears. When Zendesk patches a vulnerability, it's done before you read the CVE.
AI is the biggest gap. Chatwoot recently added Captain AI for reply suggestions, summarization, and basic automated responses, but it lacks purpose-built intent classification and advanced automation workflows. You can integrate Dialogflow for intent matching, but you're building and maintaining that integration yourself. Intercom has Fin ($0.99/resolution). Zendesk has AI Agents ($1.50/resolution). Supp has classification and action execution ($0.20-0.30 per interaction).
If you want AI-powered support, self-hosting means building the AI layer yourself or integrating a separate service. Cloud tools bundle it in.
The Middle Ground Nobody Talks About
There's a third option that combines the benefits of both approaches: use a lightweight cloud tool for AI classification and automation, and handle everything else with whatever system you prefer.
Supp works this way. It's a classification and automation layer, not a full helpdesk. You can use it alongside Chatwoot, alongside your existing email, alongside whatever ticketing system you already have. The widget handles customer-facing conversations with AI classification, confirmation flows, and action execution. At $0.20 per classification and $0.30 per resolution, there are no seat fees and no base subscription.
So you could self-host Chatwoot for your internal ticketing and agent workspace (no per-seat cost), add Supp for AI-powered customer interactions (no per-seat cost), and end up with a stack that costs less than Intercom while giving you more control over your data.
How to Decide
Ask yourself two questions.
Do you have an engineer who wants to own support infrastructure? Not one who can. One who wants to. If yes, self-hosting is viable. If you're assigning it to someone who'd rather be building product, it'll be neglected and eventually break at the worst possible time.
Is your primary concern data control, or is it cost? If data control, self-host the pieces that touch sensitive data. If cost, do the actual math including engineering time. Cloud tools with no seat fees (like Supp) often beat self-hosting once you account for labor.
The worst decision is self-hosting to save money and then spending more in hidden engineering costs than the cloud tool would have charged.