Feature

Telegram Bot Analytics and Campaign Reporting

Telegram gives a bot operator almost no reporting of its own. mySkua records what happens inside your funnel — joins, activity, cohorts, campaign activations, delivery outcomes — and slices it by source, language and category so you can tell which traffic was worth buying.

The reports a growth team actually opens

The Bot API tells you a message was accepted for delivery. It does not tell you how many people joined this week, which ad brought them, whether the cohort from three weeks ago still responds, or how many subscribers have quietly blocked the bot. Most operators reconstruct that by hand — a spreadsheet of deep links, a Monday screenshot of the subscriber count, a guess about which channel is working.

mySkua keeps the events that make those answers possible: when a subscriber started the bot, what deep-link payload they arrived with, which language they confirmed, which category they picked, which campaigns they activated, and what happened to every message the platform tried to send them. Five questions cover most of what a growth team needs on a given day:

  • Is the list growing, and is it growing in reachable people or just in rows?
  • How many distinct subscribers did anything today, this week, this month?
  • Does a cohort still respond after seven days, or does it go quiet after the first offer?
  • Which deep-link source produced the activations, not just the clicks?
  • Did the drip and the broadcast actually land?

Subscriber growth and daily active users

Growth is reported as a curve over time rather than a single running total, because the total only ever goes up and therefore never tells you anything. Joins are recorded with a timestamp at /start, so growth can be read per day or per week, and compared against the day a campaign went live.

Alongside growth sits daily active users — distinct subscribers who did something in the window, not people on the list. For a bot, “something” means an interaction it can observe: starting the bot, picking a language or category, tapping a button, activating a campaign. If you have never pinned down the definition you use, the DAU glossary entry walks through the trade-offs, and the guide to Telegram bot retention metrics covers how DAU behaves differently on a bot than in an app you open every morning.

The pairing matters more than either number alone. Growth rising while DAU stays flat is the classic shape of traffic that converts on the offer and never comes back — worth catching before you scale the spend behind it.

Cohort retention by join week

A cohort is everyone who joined in the same period; retention asks how many were still active a week later, two weeks later, four weeks later. Grouping by join week turns a flat activity number into a diagnosis, because it separates two things that look identical in aggregate: an audience that decays fast, and a healthy audience being diluted by a new low-quality source.

Read the table two ways. Down a column tells you whether the funnel changed — if every cohort after a given week retains worse at day 7, something you shipped is responsible, usually a new welcome message or a drip that fires too early. Across a row gives you the decay shape of one cohort, which is what to forecast against when planning the next month of acquisition.

Because retention is stored per subscriber rather than as a rolled-up figure, the same cohort view can be read for one source or one language instead of the whole bot — normally where the useful finding is.

Campaign activations and deep-link sources

Every campaign in mySkua has a code and a deep link of the form t.me/yourbot?start=CODE. When someone opens that link, the payload arrives with the /start command, the campaign is resolved, and the activation is recorded against that subscriber — once, because activation is one-time per user. Payloads that are not campaign codes still work as plain source tags, so a link handed to an affiliate or dropped into an Instagram bio can be tracked without creating a campaign for it.

That gives you attribution at the level that matters: not impressions or clicks measured by the ad network, but subscribers who reached the bot and activated. Reporting shows activations per campaign and joins per source, which is enough to rank channels honestly and to notice when a link is being shared somewhere you did not plan for. The mechanics of payload design — naming schemes, campaign codes versus raw source strings, what survives a forwarded link — are covered in the deep-link attribution guide.

Campaigns carry an active window and a new users only flag, which keeps activation counts interpretable: a campaign that ran six days shows six days of activations, and a new-users-only offer cannot be padded by existing subscribers re-clicking the link.

Delivery statistics for drips and broadcasts

A message that was never delivered is not a content problem, and confusing the two wastes weeks. mySkua records the outcome of each send attempt, so a weak campaign can be diagnosed before anyone rewrites the copy.

  • Broadcasts show a recipient count before you send — the audience the filters currently resolve to — and delivery results after.
  • Auto-messages in a drip are attempted per subscriber on a delay after join; failures are retried a bounded number of times rather than indefinitely.
  • Blocks are the one signal Telegram does give you. When a subscriber has blocked the bot the send fails recognisably, and that subscriber stops counting as reachable instead of inflating your list.

Watching the block rate per drip step is one of the highest-value habits available to a bot operator. A step with a visibly worse block rate than its neighbours is telling you that message is unwanted, at that moment, by that audience — a far sharper instruction than a low click rate.

Language and category breakdowns

Subscribers confirm a language during onboarding, after the bot proposes one based on their Telegram client settings, and every later message is served in that language. Optionally they also pick a category — an interest such as Sport or Casino — which content and drips can target and which can carry its own welcome offer.

Both are stored on the subscriber, so both work as reporting dimensions and not only as content settings. Growth, activity, retention and activations can each be read per language and per category. This is where multilingual funnels get fixed: a language retaining materially worse than the others is usually a translation problem or a badly localised offer, and a category with a high join rate but a low activation rate usually means its welcome offer does not match what the traffic was promised.

Comparing several bots side by side

One mySkua account can run several bots, and each keeps its own isolated subscribers, texts, campaigns and statistics. Reporting is scoped to the bot you are looking at — a subscriber of one bot is never counted in another's numbers, which is what makes the per-bot figures trustworthy.

The comparison value comes from the definitions being identical across every bot you operate. When DAU, cohort retention and activation are computed the same way for a Portuguese sports bot and a Hungarian casino bot, a gap between them is a real gap rather than an artefact of two people counting differently in two spreadsheets. Team access is per bot with roles — owner, admin, editor, viewer — so an analyst or a client can be given a viewer seat on the numbers without being able to touch content or send anything.

Common questions

What counts as an active user for a Telegram bot? An interaction the bot can observe: starting the bot, confirming a language or category, tapping an inline button, activating a campaign. Telegram does not report message opens to bots, so bot DAU is an interaction count, not a view count.

Can I tell which ad or channel a subscriber came from? Yes, when they arrived through a deep link. The ?start= payload is captured at join and stored as a source tag on the subscriber, so joins and activations stay attributed to that link.

How do I know whether a broadcast was delivered? Broadcasts resolve a recipient count from the current audience filters before sending and record delivery outcomes after, including failures caused by subscribers who blocked the bot.

Getting access to mySkua

mySkua is in a private, invite-only beta, so accounts are opened by request rather than self-serve. If you run Telegram acquisition and the reporting above is what you have been assembling by hand, join the waitlist and tell us roughly what you run — how many bots, which languages, where the traffic comes from. It helps us prioritise who to let in next.

In the meantime, the mySkua overview covers the rest of the platform — onboarding flows, campaigns, drips and broadcasts — and the retention metrics guide is worth reading whichever tooling ends up producing your numbers.

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