For Advertisers

    How to Track Subscribers From Telegram Ads and Measure Bot Conversions

    17 min read

    Learn how to connect Telegram ad spend with channel subscriptions, bot starts, qualified leads, and purchases. This guide separates invite-link tracking, bot events, Telegram Pixel, and CRM outcomes so you can calculate CPS, CPL, and CPA without double-counting conversions.

    Sara Al Mansoori

    Sara Al Mansoori

    AdTech Strategist & Editorial Lead

    Telegram Subscriber and Conversion Tracking Guide

    To track subscribers from Telegram ads, give each campaign, creative, or placement a unique invite link. For user-level records, an administrator bot can receive channel membership updates and store the invite link used for each confirmed join. A plain channel username does not carry campaign data, while a bot deep link proves a bot start rather than a channel subscription.

    The rest of the conversion path needs different tools. Telegram Pixel can record eligible events on a website, but it cannot observe a user's journey inside a standard Telegram bot. A campaign that sends users to a bot needs a deep link with a start parameter, a server-side event log, and a CRM or payment record for the final business outcome.

    The practical measurement chain is:

    Ad spend -> channel ad impression -> channel join or bot start -> onboarding milestone -> qualified lead -> purchase

    Use an invite-link ID for a channel destination or a short tracking token for a bot destination. Save the confirmed join or bot start, then attach later events to the same internal user record where the data model allows it. Join delivery and spend from the buying platform with channel, bot, and CRM events. That is the foundation for cost per subscriber, cost per start, CPL, CPA, retention, and placement-level optimization.

    Telegram Pixel and Bot Tracking Solve Different Problems

    A browser pixel runs JavaScript on a web page. It can record a page view, completed form, checkout, or another website action when the user's browser loads the code and sends the event. Telegram has an official Pixel documentation page, and some Telegram Ads account or reseller routes expose Pixel Tag controls for website campaigns.

    A standard bot chat is not your website. There is no page where you can install a browser tag, and a pixel cannot see a /start command, callback button, questionnaire answer, or Bot API payment update. Those events arrive at the bot's backend through Telegram updates and must be recorded there.

    Destination and event

    Primary measurement method

    What it can prove

    External website page or form

    Telegram Pixel, where available, plus website analytics

    A browser loaded a page or fired a configured website event

    Telegram channel

    Unique invite link plus chat_member or chat_join_request events

    A user joined through a specific invite link and remained or left later

    Standard Telegram bot

    Start parameter plus Bot API event log

    A Telegram user started the bot and completed defined in-bot actions

    Telegram Mini App

    startapp parameter plus validated Mini App and server events

    A user opened a campaign-specific app flow and completed validated actions

    Sales handled outside Telegram

    CRM record joined to the acquired user or lead

    A lead became qualified, booked, purchased, or generated revenue

    Availability needs a pre-launch check. Telegram's public Getting Started documentation says ad URLs must point to a Telegram channel or bot, while the current Ad Policies and Guidelines also discuss website destinations. Pixel controls and permitted destinations may therefore differ by account, country, or buying route. Confirm what your account supports before building a funnel around website events.

    Treat the pixel as one input to the measurement system, not as the system itself. The event closest to revenue usually lives in your bot backend, billing service, or CRM. Optimize against that verified event whenever the campaign has enough volume.

    Sara Al Mansoori

    AdTech Strategist at MangoAds.

    How to Track Subscribers From Telegram Ads

    Use a unique additional invite link for every campaign dimension you need to compare. One link per campaign gives campaign-level attribution. One link per creative or placement gives a more granular report, but it also creates more links to manage. Keep a server-side mapping such as:

    invite_link_id: inv_4f21
    campaign: q3_growth_us
    creative: proof_a
    placement: saas_channels_02

    You can create and name additional invite links in Telegram or through the Bot API. The official `createChatInviteLink` method supports an optional name of up to 32 characters. Use short operational names and keep the full campaign metadata in your own table.

    For user-level join records, add a bot to the destination channel as an administrator and explicitly request chat_member in allowed_updates. Telegram excludes chat_member from the default update set. When a person joins through an invite link, the `ChatMemberUpdated` object can include the link used. Store the user ID, invite-link ID, timestamp, previous status, and new status.

    If the link requires approval, subscribe to chat_join_request instead. That update can include the invite link used, and the bot needs the can_invite_users administrator right. Treat a request as a separate event from an approved membership. A request that is rejected or never approved is not a subscriber.

    Opening an invite link does not prove a join. Count channel_join only after a membership update confirms the transition. Record later leave events against the original acquisition cohort so you can calculate early churn and retention.

    CPS = Ad spend / Unique attributed channel joins

    24-hour unsubscribe rate = Members who left within 24 hours / Unique attributed joins x 100%

    7-day retention = Attributed members still subscribed on day 7 / Unique attributed joins x 100%

    Suppose a hypothetical channel campaign spends $1,200, records 1,200 unique attributed joins, and retains 960 of those members on day 7. CPS is $1.00, 7-day retention is 80%, and the cost per retained day-7 subscriber is $1.25. These figures demonstrate the calculation only. They are not Telegram performance benchmarks.

    Do not use a single invite link for every creative if you need creative-level attribution. Do not describe a bot start as a channel join. If a user first starts a bot and then receives a channel invite link, confirm the later membership event and join it to the bot user record before counting a subscriber.

    Write the event dictionary first. If marketing, sales, and engineering use different meanings for "lead" or "activation," the dashboard will look precise while answering the wrong question.

    A useful combined event dictionary might contain these events:

    Event

    Trigger

    Counting rule

    Business role

    channel_join

    Membership update confirms a user joined through a tracked link

    One acquisition join per user and channel

    Subscriber acquisition

    channel_leave

    Membership update confirms the user left

    One state change per valid update

    Churn and retention

    bot_start

    Backend receives /start <token> or an untagged /start

    One first start per user, plus separate raw restart events if useful

    Acquisition

    onboarding_complete

    User completes the last required onboarding action

    Once per onboarding version

    Activation

    lead_submitted

    Backend accepts a complete lead form

    Once per valid submission ID

    Lead volume

    lead_qualified

    CRM applies the agreed qualification rule

    Once per lead after status validation

    CPL optimization

    purchase_success

    Payment provider or Bot API confirms payment

    Once per transaction ID

    CPA or ROAS optimization

    refund

    Provider or Bot API confirms a refund

    Once per refund ID

    Net performance

    Do not count a message sent by the bot as proof that the user viewed it. Do not count a CTA click as a submitted lead if validation or delivery can fail. Telegram's Bot API exposes successful_payment and refunded_payment service messages for supported bot payments, but an external checkout should use the payment provider's confirmed server event.

    Choose one primary conversion for each campaign. A lead-generation campaign might use lead_qualified; a self-serve product might use purchase_success; an early test with little sales volume might use onboarding_complete as a temporary optimization event. Keep downstream quality as a guardrail even when the primary event is higher in the funnel.

    Telegram supports bot deep links in this form:

    https://t.me/your_bot?start=<parameter>

    The official Telegram bot features documentation allows A-Z, a-z, 0-9, _, and - in the parameter, with a maximum length of 64 characters. Telegram recommends base64url when binary or other structured content must be encoded. The Telegram Ads Guidelines also explicitly allow start parameters in links to destination bots.

    Avoid placing a full UTM string, email address, Telegram user ID, or readable customer data inside the parameter. Use a short opaque token and keep the campaign details in your own mapping table.

    Ad link: https://t.me/acme_demo_bot?start=k7P3xQ2

    Server-side mapping:
    k7P3xQ2 -> source=mangoads
    campaign=q3_demo_us
    creative=benefit_a
    placement=saas_channels_02

    This design stays within the character limit, avoids exposing business metadata in a forwarded URL, and lets the team correct labels without changing the live link. Use a new token whenever the reporting dimension must remain separable. If two creative variants share one token, no later query can recover which creative produced the lead.

    For a Mini App, Telegram supports a startapp parameter and passes it to the app as start_param and tgWebAppStartParam, according to the official Mini Apps documentation. Keep the same token dictionary across bot and Mini App entry points so campaign reporting uses one naming system.

    Capture a Bot Start Without Losing Attribution

    Opening a bot link is not yet a bot start. The user normally has to press the Start button, after which the bot receives a command such as: /start k7P3xQ2

    That difference matters. A deep-link click can abandon before the command reaches your backend. Count bot_start only after receiving the Telegram update, not when generating or redirecting the link.

    When the update arrives, the backend should:

    1. verify that the message is a valid private-chat /start command;
    2. parse and validate the token against the campaign mapping table;
    3. create or update the internal user record;
    4. preserve the original acquisition touch;
    5. record the current touch and a timestamp;
    6. emit an idempotent bot_start event;
    7. send the correct onboarding version.

    A minimal event record can look like this:

    event_id: tg_update_93844102
    event_name: bot_start
    occurred_at: 2026-08-21T14:03:11Z
    internal_user_id: usr_81c7
    telegram_user_id: [stored securely]
    acquisition_token: k7P3xQ2
    onboarding_version: v3

    Keep first_touch_token and latest_touch_token as separate fields. A returning user may open a later campaign link and trigger /start again. Overwriting the first touch destroys acquisition history; ignoring every later touch hides re-engagement. Store both, then apply a documented attribution rule in reporting.

    Telegram can retry unsuccessful webhook deliveries. Its Bot API documentation says update_id can be used to ignore repeated updates and offers a webhook secret_token for request verification. Make event writes idempotent, because a retry should not create a second lead or purchase.

    Instrument the Onboarding Sequence as a Funnel

    The start count shows acquisition, not value. A bot can attract many starts and still fail because the welcome message is unclear, the first question asks too much, or the handoff to a human breaks.

    Track only milestones that help diagnose a decision. For a B2B demo bot, the sequence could be:

    bot_start
    -> value_proposition_selected
    -> business_email_validated
    -> company_size_submitted
    -> lead_submitted
    -> lead_qualified
    -> demo_booked

    For an ecommerce or digital-product bot, the sequence might be:

    bot_start
    -> product_viewed
    -> checkout_started
    -> purchase_success
    -> refund

    Attach campaign_id, creative_id, placement_id, onboarding_version, and occurred_at to each event through the user's stored acquisition record. Do not ask the user to carry the token through every step.

    Track step completion when the backend accepts the action. If a user submits an invalid email, record a validation failure for product diagnostics but do not count a lead. If a sales representative later disqualifies the submission, retain lead_submitted and add the separate lead_disqualified status. This preserves the difference between media quality and sales qualification.

    The onboarding itself should reveal value quickly. Ask only for information needed to deliver the next step or qualify the lead. A long questionnaire may produce fewer leads and higher CPL while improving sales quality. Compare both funnel volume and the qualified or purchased outcome before deciding that shorter is always better.

    Join Ad Delivery, Subscriber, Bot, and CRM Outcomes

    No single source owns the entire funnel. Build the report from three layers:

    Data layer

    Typical fields

    Source of truth

    Media delivery

    campaign, creative, placement, spend, impressions, clicks when available

    Telegram Ads, MangoAds, publisher report, or another buying platform

    Audience and product behavior

    invite-link ID, channel join or leave, bot start, onboarding events, internal user ID, timestamps

    Channel administrator bot, bot backend, or Mini App backend

    Business outcome

    lead status, booking, order, revenue, refund

    CRM, billing system, or payment provider

    Join aggregated media data to the invite-link or token mapping by campaign, creative, placement, and reporting period. Join user-level channel, bot, and CRM data with your own internal identifiers. Do not assume that an aggregated Telegram Ads result can always be matched to individual users.

    The official Telegram Ads statistics page reports views and the number of users who joined a channel or started a bot after viewing the sponsored message. Use that figure as the platform's attributed result. Use membership updates as the count of joins confirmed through your tracked links and your bot backend as the count of starts it actually received. The totals can differ because definitions, attribution windows, time zones, filtering, forwarded links, missing tokens, and buying routes differ.

    Reconcile the systems daily during a new launch:

    • compare spend and impressions with the buying dashboard;
    • compare platform-attributed joins with tracked invite-link joins;
    • report invalid, missing, and unknown tokens separately;
    • check delayed CRM updates before closing a cohort;
    • keep refunds and duplicate suppression visible.

    Do not silently force the totals to match. A discrepancy is a diagnostic signal.

    Calculate CPS, Cost per Start, CPL, and CPA

    Use unique, validated conversions for the same spend period or acquisition cohort.

    CPS = Ad spend / Unique attributed channel joins

    Cost per bot start = Ad spend / Unique attributed bot starts

    Onboarding completion rate = Unique onboarding completions / Unique bot starts x 100%

    Lead rate = Unique qualified leads / Unique bot starts x 100%

    CPL = Ad spend / Unique qualified leads

    CPA = Ad spend / Unique target actions

    Suppose a hypothetical campaign spends $1,200 and produces:

    • 200,000 impressions;
    • 960 unique attributed bot starts;
    • 576 onboarding completions;
    • 72 qualified leads;
    • 9 new customers.

    The results are:

    Cost per bot start = $1,200 / 960 = $1.25

    Onboarding completion rate = 576 / 960 x 100% = 60%

    Lead rate = 72 / 960 x 100% = 7.5%

    CPL = $1,200 / 72 = $16.67

    Customer CPA = $1,200 / 9 = $133.33

    These numbers are a calculation example, not Telegram benchmarks. If the buying route does not expose reliable clicks, do not invent CTR, CPC, or click-to-start rate. Optimize with the stages you can verify.

    Use the same cost and conversion scope. If spend includes three placements but the lead query includes only two tokens, CPL is wrong. If customers convert 20 days after starting the bot, use acquisition cohorts and wait for the agreed window to mature. The MangoAds guide to CPC and CPM explains the upstream cost math, while the A/B testing guide shows how to compare variants without changing several conditions at once.

    Choose and Document an Attribution Rule

    Attribution is a reporting rule, not an observable law. A user may see an official sponsored message, click a channel post later, reopen the bot from search, and buy after a sales call. Your data can record several touches, but the campaign report still needs one declared method.

    Common choices include:

    • first touch for measuring original acquisition;
    • last paid touch for deciding which recent campaign receives credit;
    • cohort reporting, where every later outcome stays attached to the user's first attributed start;
    • multi-touch analysis for investigation, kept separate from finance totals.

    For campaigns that send users to a bot, preserve first touch permanently and store every later paid touch. For channel growth, keep the original invite-link cohort even if a member leaves and later rejoins. Use first-touch cohorts for acquisition cost and retention, then add a last-paid-touch view for campaign optimization. State the attribution window, time zone, conversion status, rejoin rule, and refund treatment beside the report.

    A simple documented model is more useful than a complex model nobody can reproduce. Start with one finance view and one optimization view. Add multi-touch analysis only when the event volume and decision value justify the extra maintenance.

    Sara Al Mansoori

    AdTech Strategist at MangoAds.

    Use Telegram Pixel Where a Website Is Part of the Journey

    If your approved buying route sends traffic to a website and your account exposes Pixel controls, use the pixel to measure the browser stage. The implementation pattern is familiar:

    1. create the pixel or event source in the available Telegram Ads interface;
    2. place the base code according to the current account documentation;
    3. fire the conversion event only after the website confirms success;
    4. associate the eligible event with the relevant ad where the interface allows it;
    5. test in a browser and check the event status before spending.

    Do not fire a lead event on the form button alone. The button can be clicked while client validation fails, the network request times out, or the backend rejects the submission. Trigger the event after the server confirms the lead, or load a unique success state that appears only after acceptance.

    Keep your own website analytics and backend records. Browser pixels can be blocked, delayed, duplicated, or prevented by consent choices. The pixel dashboard and CRM therefore answer related but different questions. Telegram's bot developer terms also require an accessible privacy policy, data minimization, appropriate retention, deletion handling, and secure storage. Review the rules that apply to your markets and implementation rather than treating this guide as legal advice.

    For a Mini App, use the startapp token and validated server events as the durable attribution layer. A Mini App uses web technology, but do not assume that every website pixel or consent setup behaves identically inside Telegram's webview. Test the actual clients, account permissions, and event delivery before launch.

    QA the Entire Path Before Buying Traffic

    Run a test matrix across mobile, desktop, new users, and returning users. Telegram's ad rules require destination bots to respond properly on mobile and desktop, so measurement QA should cover both experience and data.

    Test

    Expected result

    Join through a tracked channel invite link

    One attributed channel_join is stored with the correct invite-link ID

    Leave and rejoin the channel

    Original acquisition remains; membership history records both state changes

    Open valid tagged bot link as a new user

    Start button appears; one attributed bot_start is stored after it is pressed

    Open the same link twice

    Raw restart may be logged; unique acquisition start is not duplicated

    Open a second campaign link as a returning user

    First touch remains; latest touch updates according to policy

    Use an invalid or expired token

    Bot still works; event goes to an explicit invalid_token bucket

    Complete onboarding

    Each milestone appears once and in the correct order

    Submit invalid lead data

    Validation error is logged; no qualified lead is created

    Complete payment or refund

    One transaction event is stored; refund updates net results

    Retry the same webhook update

    Idempotency prevents duplicate events

    Reconcile the dashboard

    Spend, starts, leads, and customers use the same date and token scope

    Also test untagged paths. Users can find a channel or bot through search, shares, profile links, or old messages. Record those joins and starts as organic, direct, or unattributed according to a fixed rule. Never assign them to a paid campaign simply because that campaign was active.

    Turn Conversion Data Into Campaign Decisions

    The most useful report is a funnel by campaign, creative, placement, and acquisition date. Read it from the bottom up.

    • High cost per start can point to weak creative, poor placement fit, or expensive delivery.
    • Low CPS with high 24-hour churn points to a mismatch between the ad promise and the channel experience, or to low-quality traffic.
    • Similar CPS with different 7-day retention favors the source that produces the stronger retained cohort.
    • Healthy start volume with low onboarding completion points to the bot experience or a mismatch between ad promise and first screen.
    • Strong onboarding with weak qualification suggests the questions or targeting admit low-intent users.
    • Good CPL with poor customer CPA shifts attention to lead quality, sales follow-up, pricing, or product fit.

    Change one major variable at a time and preserve its token. The article on how to run Telegram ads compares official, manual, and automated buying routes. If you buy direct placements, also vet inventory before scaling; clean conversion tracking cannot repair fabricated reach or an irrelevant audience.

    MangoAds distributes CPM ads across matched Telegram channels. It does not place ads inside Telegram bots. If an ad sends users to your channel or bot, connect MangoAds delivery records to your invite-link map, bot event log, and CRM outcomes. MangoAds supplies channel placement and top-of-funnel reporting; your membership, bot, and business systems supply the conversion truth needed for CPS, CPL, and CPA decisions.

    FAQ

    What happens when someone forwards a tracked invite or bot link?
    -

    The forwarded link keeps its original invite-link identity or start parameter. A later join or bot start may therefore remain attributed to the campaign that created the link, even when a user shared it organically. Keep that paid cohort visible, but flag unusually delayed activity and add a separate referral mechanism when sharing becomes material. Report earned distribution separately when your event design can distinguish it from the original paid response.

    How should organic channel joins and bot starts appear in reports?
    +

    Put joins without a tracked invite link and untagged /start events in a visible organic, direct, or unattributed bucket under a written rule. Do not distribute them across active campaigns, because the paid links did not prove those conversions. Continue tracking retention, onboarding, and revenue so the users remain visible. A rising unattributed share can reveal broken links, copied usernames, missing parameters, search discovery, or forwarded messages.

    Do I need a Telegram username to identify a converting user?
    +

    No. Usernames are optional and can change, so they should not be the primary join key. Create an internal user ID and associate it securely with the numeric Telegram user ID received by the bot. Use that internal ID in event, CRM, and billing tables. Collect email, phone, or other contact data only when the service or qualification process needs it, explain the purpose, and apply your privacy and retention rules.

    How long should the attribution window be for a Telegram campaign?
    +

    Choose a window from the observed buying cycle and the decision you need to make. A low-consideration purchase may mature in days, while a qualified B2B lead can take weeks. Report conversion lag by acquisition cohort before fixing the cutoff. Then keep the window stable across variants, label late conversions separately, and avoid judging recent cohorts against older cohorts that have had more time to produce leads, purchases, cancellations, or refunds.

    How can offline sales be connected to a Telegram campaign?
    +

    Pass the bot's internal lead ID into the CRM when a user requests a call, demo, or quote. Sales should update that same record with qualified, won, lost, and revenue fields instead of creating an unrelated contact. Import or query those status changes back into the cohort report. Limit access to the mapping, document the lawful purpose and retention period, and avoid exposing the campaign token or Telegram identifier in shared sales notes.

    5.0

    1 rating

    Related Posts
    A/B Testing Telegram Ads
    Sara Al Mansoori
    For Advertisers
    How to Detect Fake Telegram Channels
    Sara Al Mansoori
    For Advertisers