Subscriber count is the number everyone reports and the one that explains the least. Here is how to define an active user for a bot, build cohort retention tables that survive scrutiny, and catch churn while you can still do something about it.
Most Telegram bot reporting stops at one figure: total subscribers. It only ever goes up, which is exactly why it is useless as a diagnostic. A list of 40,000 people where 1,200 still respond is a worse asset than a list of 6,000 where 2,000 do, and the headline number says the opposite.
Three numbers together describe the audience honestly:
Everything else — activation rate, click share, delivery failures — is a lens on one of those three.
App analytics inherited the idea of a session: the user opens the app, the SDK starts a timer. Bots have no session and no open event. Telegram gives you inbound updates and nothing else. There is no read receipt for a bot message, no impression, no time-on-screen. So the definition has to be built from what actually arrives.
Three tiers, and keeping them apart is most of the work:
Write the definition down and freeze it before you start trending anything. If you later add button callbacks to the definition, every historical figure moves and the trend line becomes fiction. The safest default is: an active user is a subscriber who produced at least one inbound event in the window. See the daily active users entry for the longer definition and the edge cases.
DAU is the count of distinct subscriber IDs with at least one inbound event in a calendar day. Two decisions change the answer and both need to be made once and never revisited casually.
Pick a timezone and keep it. UTC is the least arguable choice for a multi-language bot, because a bot serving Brazil and Hungary has no natural local midnight. If your reporting week runs Monday to Sunday in a business timezone, define the day boundary once and apply it to every metric, including cohorts.
Report DAU alongside your send calendar. A promo bot's DAU is broadcast-shaped: it spikes on send days and sags between them. A raw DAU chart with no send markers looks like volatility and is actually your own schedule. Two views fix it — DAU with send days annotated, and rolling 7-day and 28-day active counts (WAU and MAU), which smooth the spikes and show the underlying trend.
The DAU-to-MAU ratio, often called stickiness, is worth watching but not worth comparing to consumer app benchmarks. A lead-generation bot is not a social feed; nobody opens it out of habit. What matters is the direction of your own ratio at a constant send frequency. If you keep sending twice a week and the ratio drops for a month, the audience is decaying even while the subscriber count climbs.
Segment DAU by language, source and category before drawing conclusions. An aggregate that mixes paid traffic from one creative with organic joins from a channel button averages two different products into one flat line.
A cohort table is a grid: each row is a join week, each column is weeks since joining, each cell is the share of that cohort active in that week. Week 0 sits near 100 percent by construction, since joining is itself an active event, so the interesting reading starts at week 1.
The table answers two different questions depending on how you read it:
Two practical cautions. First, size the cohorts: a 40-person cohort produces percentages that swing 5 points on two people, so mark anything under roughly 100 subscribers as directional and do not build a decision on it. Second, cut cohorts by acquisition source and by category as well as by week — the useful finding is almost never "retention fell" but "retention fell for one source while the rest held steady". The retention cohort entry walks through the table construction step by step.
Retention measures whether people stay. Activation measures whether they ever really arrived. Define it as the intended first action for a given entry point: the campaign offer claimed, the promo code revealed, the offer button tapped. In mySkua a campaign activation is recorded once per subscriber, so the rate is people, not clicks: activations divided by subscribers who arrived through that deep link.
Because deep-link payloads tag each subscriber with a source, activation splits by creative, influencer or landing page without extra instrumentation. That turns a vague "the campaign underperformed" into a specific diagnosis, and the diagnosis usually falls into one of three buckets:
Bot churn is silent. There is no cancellation event and no unsubscribe click — a person blocks the bot, and you only find out on the next send, when Telegram refuses delivery. That refusal is the one hard, unambiguous churn signal you get, and it should be counted per broadcast rather than as a monthly total. A block spike attached to one specific send tells you about that message. A steady baseline of blocks tells you about frequency.
Softer signals arrive earlier:
The response differs by signal. Frequency-driven blocks call for fewer, better-targeted sends — targeting a drip by language, source, tag or category usually beats sending the same thing to everyone. Silence in the 31–90 day bucket calls for a genuinely different message, not a third copy of the same offer.
Published retention benchmarks for Telegram bots should be treated as decoration. The numbers depend on vertical, incentive strength, traffic quality and how the source defined "active" — and that last definition is almost never stated. A bot handing out a discount code and a bot running a community have no common scale.
Build the baseline from your own history instead. Take six to eight consecutive join weeks under stable conditions, record week-1 and week-4 retention for each, and take the median plus the spread. That median is your expected value, and the spread is your noise band: a new cohort inside the band is normal variation, and one outside it is a signal worth investigating. Do this per source, because paid traffic and channel-organic traffic will not share a baseline and averaging them hides both.
Re-baseline whenever you change the onboarding flow, the gate, or the offer. Comparing post-change cohorts to a pre-change median is how teams talk themselves into believing a change worked.
Reporting that takes a day gets skipped. This fits in an hour and is enough to run a funnel:
mySkua reports subscriber growth, DAU, retention cohorts, campaign activations and delivery stats per bot, with subscribers and content isolated between bots so an agency's numbers never blend across clients — see Telegram bot analytics for what each view covers. The measurement discipline above works with any tooling; the panel mostly saves you from rebuilding the cohort query every month.
mySkua is in an invite-only private beta, so accounts are opened by request rather than self-serve. If you run Telegram funnels and want the analytics described here on your own bots, join the waitlist and tell us how many bots you operate, which languages your subscribers use and where your traffic comes from. That context is what we use to decide who to bring in next.
Related: Bot analytics · Daily active users · Retention cohort.
Want this on your own bots?
mySkua is in a closed beta and accounts are opened in small batches. Tell us what you run and we will come back to you.
Request access