What a 21-bot Telegram fleet costs on Cloudflare Workers
Figures captured 4 September 2026 from the fleet's own status endpoint, Cloudflare's published pricing page, and the fleet's payment log. Cloudflare's limits can change; treat this as a dated snapshot.
A person can run a small fleet of chat bots on Cloudflare's free tier and pay nothing until traffic grows past the free allowance. Cloudflare's Workers Free plan includes 100,000 requests a day and 10 milliseconds of CPU time per invocation, with Durable Objects (the per-bot database each of these bots uses) adding another 100,000 requests a day and 13,000 GB-seconds a day, also free. A fleet of 21 Cloudflare Workers, running the code behind a set of Telegram bots at tg.zovo.one, reads on its own status endpoint as 21 Workers up, 5 users, and 8 recorded value events on the day this was captured. That is nowhere near the free-tier ceiling. It also has not sold a single Pro upgrade yet: the same read shows 0 Pro purchases and 0 Stars earned, so on the revenue side there is nothing to report but a plan, not a result.
The plan is Telegram Stars. A one-time Pro unlock costs a user 150 Stars, about $3 paid in-app, and the developer receives that batch at 100% (Telegram takes no cut on the Stars themselves). Cashed out through Fragment, the withdrawal value is $0.0133 per Star, so 150 Stars nets about $2 after a 21-day hold and a roughly 5% conversion fee. Compare that fixed, near-zero hosting bill to an LLM API bill, where cost rises with every token a model reads and writes. This fleet runs on rule-based command handlers, cron jobs, and a SQLite-backed Durable Object per bot. It calls no LLM API at all, so its marginal cost per user stays near zero long after a model-backed product would start showing up as a real line item.
How we measured this
Fleet size, per-bot request health, and daily activity counts come from a live curl of fleet-intel.lipmichal.workers.dev/fleet, a status Worker with service bindings into each bot, read 4 September 2026. Cloudflare's free-tier request, CPU, and Durable Object limits are quoted from the current Workers platform pricing page. Stars economics, the 21-day hold, the $0.0133 withdrawal value, and the Fragment fee are read from the fleet's own operating dashboard, which cites core.telegram.org/bots/payments-stars and third-party Stars-value trackers as its sources. We report the Pro-purchase and Stars-earned counts as measured, both zero at capture, rather than projecting a revenue figure that has not happened yet.
Cloudflare Workers free tier, as published
| Resource | Free allowance |
|---|---|
| Worker requests | 100,000 per day |
| CPU time | 10 milliseconds per invocation |
| Durable Object requests | 100,000 per day |
| Durable Object duration | 13,000 GB-seconds per day |
Each bot in this fleet is one Worker plus one Durable Object holding its SQLite tables (users, and whatever the bot itself needs, such as whispers, reminders, or expense rows). Telegram delivers one webhook call per user action, so the request count above is also roughly the daily action count a single free-tier bot could absorb before it would need a paid Workers plan. At 21 Workers and single-digit daily users each, this fleet is using a small fraction of one bot's free allowance, let alone 21 bots' worth.
Telegram Stars: the revenue side, as designed
| Step | Figure |
|---|---|
| Buyer pays, in-app | ≈ $3.00 (buys Stars at roughly $0.02 each) |
| Stars credited to the bot | 150, no Telegram cut at this step |
| Hold before withdrawal | 21 days per batch received |
| Withdrawal value per Star | $0.0133 (creator withdrawal rate) |
| Net to developer per sale | ≈ $2.00, after a further ~5% Fragment conversion fee |
| Minimum withdrawal | 1,000 Stars (about 7 Pro sales) |
This is a designed payout structure, not a measured one. The fleet's status endpoint shows 0 Pro purchases and 0 Stars earned at capture, so every figure here is what the mechanism is built to pay out once a sale happens, not a reported result.
Three bots, as an example of what the free tier is running
Three of the fleet's live bots show what a single Worker plus Durable Object supports without an LLM in the loop. WhisperLockBot posts a locked message into any chat that only the addressed recipient can open; it works without ever being added to a group, because a user can type @WhisperLockBot @friend your text as an inline query in a chat the bot has never joined. NudgeRemindBot stores reminders in its Durable Object and delivers them through a 1-minute cron check, reading times against a per-user timezone offset. SplitTabsBot keeps a group's shared-expense ledger and computes the minimal settlement, the fewest transfers that clear every balance, entirely from rows in its own Durable Object.
All three, and the fleet's other live bots, answer an @-mention in any Telegram group without being added to that group first. This is Telegram's Guest Mode, shipped in Bot API 10.0, and it is also why the inline-query examples above work in a chat the bot has never joined. The hub bot, TinyTelegramToolsBot, links out to each live bot's own chat with Telegram's Direct Link Mini App format, so a user can reach any bot in the fleet from one entry point.
What this means for a cost comparison
If the question is "what would this cost on an LLM API instead," the honest answer is that it is not a fair comparison yet, because this fleet calls no LLM API for its command handling. Its cost driver is Cloudflare's free tier, which charges nothing until a single bot passes 100,000 requests a day. A chatbot fleet built the same way but routing every message through a hosted model would instead pay per input and output token, a cost that scales with usage from the first request. For that side of the comparison, see the LLM cost calculator and the corroborated per-model rates on the Claude API pricing page: model a monthly request volume there, then compare it against the $0 Cloudflare bill this fleet runs on today.