What WhatsApp Support Automation Actually Costs: the cost components of a self-hosted stack
Automating WhatsApp support on a self-hosted stack costs, in fixed infrastructure, from ~€6.50/month for a VPS. Meta’s official API charges nothing to reply to messages the customer initiates, because the 24-hour customer service window is free. And the LLM, the language model, costs cents per conversation. The component that dominates the bill never shows up on an invoice: maintenance, the hours of whoever answers for the stack. It is what decides when a ready-made SaaS, bought as a subscription, is cheaper. For many companies, the right answer is precisely not to build any of this.
This post takes the bill apart component by component. The raw material is a stack we run in production, that is, the set of software pieces that carries the support work. There is Chatwoot CE as the inbox, our own Fastify + Postgres service as the bot’s brain, and n8n for scheduled jobs. It all runs on one Hetzner VPS behind a Cloudflare Tunnel, with LLMs via OpenRouter. But the post is cost anatomy for people evaluating the build, not a service catalog. Every price below is public and was checked on 2026-08-25 against the cited sources. Price tables are perishable, and the date matters as much as the number.
What are the four components of the bill?
- Fixed infrastructure: the VPS (the rented server), the IP, the domain. Monthly, predictable, small.
- Meta’s fees: per message. The fee design favors exactly the replying-bot use case.
- The LLM: variable per conversation. The order of magnitude is cents, not dollars.
- Maintenance: people-hours. It is the only component with no price sheet, and usually the one that settles the SaaS comparison.
Whoever sells automation shows you the first three. Whoever operates it knows the fourth runs the bill.
How much does the fixed infrastructure cost?
The support-layer software is license-free: Chatwoot Community Edition, self-hosted n8n (running on your own machine), and whatever you write yourself. The real fixed cost is the machine it runs on.
Hetzner Cloud prices on 2026-08-25 (hetzner.com/cloud, shared vCPU line, taxes not included):
| Plan | vCPU / RAM / disk | Included traffic | Price |
|---|---|---|---|
| CX23 | 2 vCPU / 4 GB / 40 GB NVMe | 20 TB | €5.99/month |
| CX33 | 4 vCPU / 8 GB / 80 GB NVMe | 20 TB | €8.99/month |
Add €0.50/month for the primary IPv4 (docs.hetzner.com). The tunnel that publishes the services without opening a single port fits in Cloudflare Zero Trust’s free plan. The anatomy of that box has its own post. The domain is separate and varies by TLD.
Honest sizing: Chatwoot is the heavy item, with Rails, Postgres, Redis and workers. On 4 GB it runs tight next to n8n and a bot service. On 8 GB, the same set has room to breathe. In short: the fixed infrastructure for a complete stack lands between €6.49 and €9.49 per month at today’s prices. And if the company already has a VPS running other things, the marginal cost is lower still.
When does Meta charge per message?
This is where the most expensive misunderstanding lives. Since July 1, 2025, Meta charges the official WhatsApp API per message, no longer per conversation. And the fee design is generous to whoever replies:
- Inbound messages: free. A customer writing to the business costs nothing.
- Replying inside the 24-hour window: free. Each customer message opens (and renews) a customer service window. Inside it, Meta’s pricing page states that service messages are not charged. Utility templates sent as replies within an open window are free as well (platform pricing page, checked 2026-08-25).
- Click-to-WhatsApp ads open 72 free hours of conversation. Those are the ads that lead straight into a WhatsApp conversation.
The practical consequence: a bot that answers what customers ask pays Meta nothing. That is the typical support case. What costs money is the proactive, business-initiated message outside a window, always via an approved template, that is, a pre-approved message model. Below is the official rate card in force for Brazil, the market we operate in and the worked example here. Your market sits in the same rate card (effective July 1, 2026, linked from developers.facebook.com/docs/whatsapp/pricing, downloaded 2026-08-25):
| Template category (Brazil) | Price per message |
|---|---|
| Utility (confirmations, order updates) | US$ 0.0068 |
| Authentication (login codes) | US$ 0.0068 |
| Marketing | US$ 0.0625 |
Three warnings worth money:
- This table changes. Meta already has rate revisions announced effective October 1, 2026, with the new numbers published by September 1, 2026 (pricing updates). The current announcement names specific markets, but it serves as a reminder: the table moves. Treat no number in this post as permanent, not even the free window. Plan with the table of the day, not yesterday’s promise.
- Rate cards exist in local currencies. Meta publishes the card in more than one currency. For a Brazilian operation, check the BRL version.
- Middlemen charge on top. Going straight to the official Cloud API, the rate above is the rate. Some intermediary providers add their own per-message fee, sometimes even on inbound messages. That destroys the economics of a bot that lives on replying. Read the intermediary’s price sheet before signing.
How much does the LLM cost per conversation?
LLM pricing is public, charged per token, the chunk of text the model processes, and per model. Via OpenRouter, one gateway to many providers, here is the 2026-08-25 table (openrouter.ai/models) for models typical of support work:
| Model | Input / output (US$ per 1M tokens) | Example conversation |
|---|---|---|
| openai/gpt-4o-mini | 0.15 / 0.60 | ~US$ 0.006 |
| google/gemini-2.5-flash | 0.30 / 2.50 | ~US$ 0.014 |
| anthropic/claude-haiku-4.5 | 1.00 / 5.00 | ~US$ 0.04 |
| anthropic/claude-sonnet-4.6 | 3.00 / 15.00 | ~US$ 0.12 |
The example conversation is illustrative, assumptions on the table: 10 exchanges, ~3,000 input tokens per turn (system prompt + history resent on every call) and ~200 output tokens per reply. That is 30k input tokens and 2k output in total. A thousand such conversations a month cost from ~US$ 6 (small model) to ~US$ 120 (frontier model). That is the order of magnitude: cents per conversation. And the number responds to two choices of yours: model size and context discipline.
The input side compresses with prompt caching, the reuse of the stretch that repeats. In an agent, nearly all of each call’s payload is a stable prefix. We measured this in production before turning the cache on, and the lesson there applies here: measure your prefix before assuming the discount.
What is the cost that never shows up on an invoice?
Maintenance. It is the component no pricing page shows and what separates the optimistic spreadsheet from real operations. Running this stack means, recurrently:
- Updates. Chatwoot and n8n ship releases at a steady pace. Falling behind has a security cost; keeping up has an attention cost.
- Backups that restore. A backup without a restore test is faith, not backup. And the backup must tell you when it didn’t run. The dead-man-switch design we use exists because ours sat dead for 14 days with nobody noticing.
- Monitoring and incidents. From outside (uptime), from inside (disk, containers), and someone who wakes up when it breaks.
- Meta’s treadmill. Tokens that expire, webhooks that require a published app, API versions with deadlines, fees that change (see above). The platform moves, and someone keeps up.
- The model treadmill. LLMs get deprecated, prices change, behavior shifts between versions. A bot nobody re-evaluates degrades silently.
- The bot itself. Prompts, rules, the limits of what the agent may do on its own. Support automation is not a project that ends; it is an operation that continues.
I won’t invent an hours number. It depends on the stack, the volume and who operates it. The point is different: budget this component explicitly before deciding. If nobody on the team can own it, the rest of the bill doesn’t matter.
When is a ready-made SaaS cheaper?
Often. This post is not an argument that self-hosting always wins. Support SaaS bundles exactly the dominant component: maintenance becomes the vendor’s problem, along with hosting, interface, updates and support. The honest comparison:
SaaS tends to win when:
- There is no technical person to own the stack. This criterion alone ends the discussion.
- The flow is standard (menu, FAQ, hand off to a human) and ready-made tools already cover it.
- The value is in launching this week, not in controlling the architecture.
- The volume is too small to dilute the fixed cost of learning and operating the platform.
A self-hosted stack tends to win when:
- Engineering already exists in-house and infrastructure is already running, so the box’s marginal cost is near zero.
- The automation must integrate internal systems no SaaS knows about.
- Data-control requirements (privacy law, health, finance) favor operating your own box.
- The same operation serves several accounts or clients. Fixed costs dilute, and per-seat SaaS margins start to weigh.
I won’t anchor third-party SaaS prices here. They change fast, and every tool charges on a different axis: per agent, per contact, per message. Instead, here are the questions that make the comparison fair in your spreadsheet. Is Meta’s fee passed through or bundled with a markup? Is billing per agent, per contact or per message? Is the LLM included or an add-on? Can your data leave if you want to leave?
The bill, side by side
| Component | Nature | Order of magnitude (2026-08-25) |
|---|---|---|
| VPS + IPv4 | fixed monthly | €6.49–€9.49/month (Hetzner CX23/CX33 + IP) |
| Tunnel / edge | fixed | free plan (Cloudflare Zero Trust) |
| Software (Chatwoot CE, n8n, your own code) | license-free | the cost is operating, not licensing |
| Meta fees | variable per message | free replying inside the 24h window; US$ 0.0068–0.0625/msg proactive (Brazil) |
| LLM | variable per conversation | ~US$ 0.006–0.12 per conversation in the example above |
| Maintenance | people-hours | the dominant component, no price sheet |
The summary you take home
- Fixed infrastructure is small: €6.49–€9.49/month of VPS + IP covers Chatwoot + n8n + a bot service (Hetzner prices, 2026-08-25).
- Meta charges per message since July 1, 2025, and replying is free: inbound messages and replies inside the 24-hour window cost nothing. Only proactive template messages pay (Brazil: US$ 0.0068 utility, US$ 0.0625 marketing).
- Rate cards are perishable: Meta already has a revision announced, effective 2026-10-01 with numbers published by 2026-09-01. Decide with the table of the day.
- The LLM costs cents per conversation. The number responds to model size and context discipline, with prompt caching compressing the input side.
- Maintenance is the dominant component and the only one without a public price. Budget it explicitly, with an owner’s name on it.
- SaaS wins often. With no technical owner, a standard flow or a deadline, it is the right answer. Self-hosting wins when engineering, integration and data control are already on the table.
Want the numbers run for your case?
The R$ 1,500 audit answers, in seven days, where your money is leaking and what to fix first, with the report written down for you. If the right answer is to hire nobody, that comes out of it too.
See the R$ 1,500 audit →