Telegram conversion tracking needs more than one tool. Telegram Pixel can record eligible events on a website, but it cannot observe a user's journey inside a standard Telegram bot. Bot campaigns need deep links with start parameters, a server-side event log, and a CRM or payment record for the final business outcome.
The practical measurement chain is:
Ad spend -> impression -> bot start -> onboarding milestone -> qualified lead -> purchase
Give every campaign or placement a short tracking token. Pass that token in the bot link, save it when the user starts the bot, and attach later events to the same internal user record. Use Telegram's ad statistics or your buying platform for delivery and spend, then join those totals with the bot and CRM data. That is the foundation for cost per start, CPL, CPA, funnel conversion rates, 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 |
|
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 MansooriAdTech Strategist at MangoAds.
Define Conversions Before Creating Tracking Links
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 bot funnel might contain these events:
|
Event |
Trigger |
Counting rule |
Business role |
|
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.
Build Deep Links With Compact Start Parameters
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=k7P3xQ2Server-side mapping:k7P3xQ2 -> source=mangoadscampaign=q3_demo_uscreative=benefit_aplacement=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:
- verify that the message is a valid private-chat /start command;
- parse and validate the token against the campaign mapping table;
- create or update the internal user record;
- preserve the original acquisition touch;
- record the current touch and a timestamp;
- emit an idempotent bot_start event;
- send the correct onboarding version.
A minimal event record can look like this:
event_id: tg_update_93844102event_name: bot_startoccurred_at: 2026-08-21T14:03:11Zinternal_user_id: usr_81c7telegram_user_id: [stored securely]acquisition_token: k7P3xQ2onboarding_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, Bot Events, 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 |
|
Product behavior |
token, bot start, onboarding events, internal user ID, timestamps |
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 token mapping by campaign, creative, placement, and reporting period. Join user-level bot and CRM data with your own internal identifiers. Do not assume that an aggregated Telegram Ads start count 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 your bot backend as the count of starts it actually received with your tracking design. The totals can differ because definitions, attribution windows, time zones, filtering, 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 starts with backend starts;
- 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 Cost per Start, CPL, and CPA
Use unique, validated conversions for the same spend period or acquisition cohort.
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 most bot acquisition programs, preserve first touch permanently and store every later paid touch. Use first-touch cohorts for CAC and retention, then add a last-paid-touch view for campaign optimization. State the attribution window, time zone, conversion status, 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 MansooriAdTech 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:
- create the pixel or event source in the available Telegram Ads interface;
- place the base code according to the current account documentation;
- fire the conversion event only after the website confirms success;
- associate the eligible event with the relevant ad where the interface allows it;
- 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 |
|
Open valid tagged 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 the untagged path. Users can find the bot through search, shares, profile links, or old messages. Record these 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.
- 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 can reduce the operational work of CPM campaign distribution, targeting, channel matching, and advertising reporting. Connect those media records to your own token map, bot event log, and CRM outcomes. The buying platform supplies the top of the funnel; your backend supplies the conversion truth needed for CPL and CPA decisions.



