Why channel subscribers are anonymous by default
When an ad sends someone to a channel through its public t.me address, Telegram records a new subscriber and nothing else. The ad platform sees a click; the channel sees a member; no one sees the link between them. Telegram's own statistics show subscriber growth by day and, for larger channels, broad sources such as "links" or "search", never an ad or a creative.
The fix is the same as for groups, with one channel-specific detail: a bot can only be in a channel as an admin, so there is no "member only" mode. Make your bot an admin with a single right, the right to invite users through links, and it can create invite links and see who subscribes through them.
One invite link per click
Telegram lets an admin bot create invite links that are limited to one use, and it reports which link each new subscriber used. That is the whole mechanism: every click on your ad receives its own single-use invite link, so the subscriber who arrives through it belongs to exactly one click, campaign, ad set and creative. Nothing is guessed from timing or IP addresses.
- The ad points at a tracking link named after the creative. The click is recorded with the platform's click id and your campaign parameters.
- The visitor is sent into Telegram with their own invite link. In direct-join mode the link opens the channel straight away; otherwise your bot hands it over after the person presses Start.
- When they subscribe, Telegram tells the bot which link was used, and the subscriber lands on the creative's row.
- The subscription is reported to the ad platform as a conversion (CompleteRegistration on Meta, Subscribe on TikTok and Snapchat), so the platform can optimise for subscribers rather than clicks.
One-tap join or request to join
A public channel lets anyone subscribe with one tap. A private channel can be set so that a tap creates a join request, which an admin, or your bot, approves. Both work with per-click invite links; the difference is when the subscriber is counted:
- One-tap join. The subscription is recorded the moment Telegram reports it, usually within a second of the tap.
- Request to join. The subscription is recorded when the person is admitted, not when they ask. If approval takes a day, the subscriber is still credited to the right creative; only the timestamp moves. You can let the bot approve requests automatically on Connections, which keeps the count immediate and the funnel short.
Request-to-join channels are popular with advertisers because they keep bots and scrapers out and give you a moment to send a welcome message. They cost one extra tap, which some visitors never make, so compare the two settings on the same creative before deciding.
Setting it up for a channel
- Create a bot with @BotFather and paste its token on Connections.
- Add the bot to the channel as an admin. Open the channel, tap its name, Administrators, Add Admin, find the bot and turn on only "Invite users via link". Then enter the channel's @username or numeric id on Connections; the connection check confirms the bot can create invite links.
- Create a tracking link of the kind "Opens your group" (channels use the same kind), choose the channel, and name the link after the creative. Switch on direct join if you want to skip the Start step.
- Put the link in the ad and add the URL parameters from the Links page so campaign, ad set and ad ids arrive with each click.
- Test from your phone with an account that is not yet subscribed: the click, the subscription and the delivery to the ad platform appear within seconds on Test your setup.
The numbers that matter for a channel
- Subscribers per creative and cost per subscriber, once ad spend is next to the counts.
- Click-to-subscribe rate. A low rate points at the step between the ad and the channel: a creative that promises something the channel does not deliver, or a request-to-join step that visitors abandon.
- Still subscribed after N days and left, per creative, after the number of days you set on Connections. Channels fed by ads often lose a large share within 24 hours; cost per retained subscriber separates creatives that bring an audience from creatives that bring a tap.
- Deposits or purchases credited to the creative, when subscribers go on to pay through your platform, a form or Telegram Stars.
Edge cases
- Someone subscribes through the channel's public link instead. They appear as unattributed. Keep the public link out of ads.
- A visitor who is already subscribed taps the ad. Telegram reports no new subscription, so nothing is counted, which is correct.
- A subscriber leaves and comes back. The first subscription is the one credited to the ad; the leave is recorded, and the return counts as a join again only if it comes through a new tracked link.
- Paid channels. For a channel that charges Stars, links hand out Telegram's own join flow and the payment is recorded as a purchase with its value.
Frequently asked
Does the bot have to be an admin of the channel?
Yes. Channels accept bots only as admins, and the bot needs the right to invite users through links to create single-use invites and to see who subscribed through them. No other right is needed.
Does this work with request-to-join channels?
Yes. The subscriber is counted when admitted, and the bot can approve requests automatically if you switch that on.
Can I see which ad brought a specific subscriber?
The dashboard's activity log shows each subscription with its campaign, ad set and creative. Subscribers are identified to you by their Telegram name; nothing about them is sent to the ad platform beyond the click's own identifiers.
What about Telegram Ads?
Telegram's own ads carry no click id. Use one tracking link per creative and the subscribers are counted per creative; see Telegram Ads conversion tracking.