tellmetric
Guide

Meta ads to Telegram DM: tracking the first message, not the join

Many Telegram funnels do not end in a group. The ad invites the person to write: to a bot that qualifies them, or to a manager who closes the sale in chat. Ads Manager sees the click and nothing after it. This guide shows how the first message is tied back to the ad that paid for it, how it reaches Meta as a Contact event, and where the setup breaks.

Why a DM funnel is measured differently from a group funnel

A join is a single, visible event: the person is in the group or they are not. A conversation is not. The person opens a chat, taps Start, maybe writes, maybe writes again a week later, and the valuable moment is the first message, because that is the lead the sales team can work. Everything before it is intent; everything after it is the sales process.

Meta's click-to-message ads cover Messenger, Instagram and WhatsApp. Telegram is not one of the destinations, so a "Meta ads to Telegram DM" campaign is an ordinary traffic or conversions campaign whose link opens Telegram. Meta appends an fbclid to the click and then loses sight of the person. If nothing reports the message back, the campaign optimises for link clicks, and link clicks on a Telegram link are cheap and mostly worthless: people who tap, see the chat and never write.

What is recorded, step by step

  1. The ad points at a tracking link of the kind "Opens a chat with your bot". On the Links page you create one per ad or ad set, name it after the ad, and paste its ad URL into Ads Manager. The URL carries utm_campaign from the link's name, and the Meta line the page gives fills campaign, ad set and ad ids at click time.
  2. The click is recorded. Tellmetric stores a click with its own id, the fbclid, the _fbp and _fbc cookies when the click passed through a page with the snippet, the UTM parameters, sub1 to sub9, country and device. The visitor is sent to t.me/<bot>?start=<click id>.
  3. The Start tap ties the Telegram account to the click. Telegram hands the click id to your bot when the person presses Start. The bot answers with a short line asking them to write their message, and remembers for 24 hours that this Telegram user arrived through this click.
  4. The first message becomes an AdminDM event. Any message the person sends to the bot after Start, other than another /start, is recorded as AdminDM, once per person per day, attributed to the click with the ad's campaign, ad set and creative. On the dashboard it reads "Messaged you".
  5. The event goes to Meta. The delivery worker sends it through the Conversions API with the fbclid, the browser cookies and the hashed Telegram user id, so Meta can match it to the ad and the campaign can optimise for people who write, not people who tap.

Nothing here needs a website. If you do have a landing page, adding tracker.js there raises the match rate because the Meta cookies travel with the click; the chain is the same either way. See Telegram leads without a website.

How the message is named in Meta

Meta optimises for its standard events, and a custom name such as AdminDM is measurable but not something a campaign can be set to optimise for. Tellmetric therefore renames events on the way out. The defaults are: a join is CompleteRegistration, a first message is Contact, and a deposit or FTD is Purchase with value and currency. The original name travels alongside as source_event, so Events Manager still shows where the Contact came from.

If your campaign is set up to optimise for Leads instead, change the mapping on Connections: the field "How events are named in Meta" takes one line per event in the form AdminDM=Lead. Leave it blank to keep the defaults. Whatever name you choose, pick the same one as the conversion event in the campaign's optimisation settings, otherwise Meta receives the events and ignores them for delivery.

TikTok receives the message as Contact too; TikTok, Snapchat, Reddit, Spotify, X and Google Ads are on the Pro and Agency plans, Meta on every plan.

DMUnattributed: messages with no ad behind them

People also write to the bot without a tracking link: from a channel post, from a friend's forward, or because they searched for the bot. Those first messages are recorded as DMUnattributed, shown as "Messaged you (source unknown)". They are kept separate on purpose. Blending them into the attributed count would make every campaign look better than it is, and the ratio between the two is itself useful: if half of your messages are unattributed, the ad link is being bypassed somewhere, usually because someone shared the bot's plain username in a post.

A message is attributed only when the person pressed Start through a message link within the last 24 hours; someone who tapped on Monday and first wrote on Friday is unattributed. Almost everyone who writes does so within minutes of Start, so the window loses little, and it stops a click from months ago claiming a message it had nothing to do with.

Why it has to be a bot, not your personal account

The obvious funnel is "message me", pointing the ad at a personal Telegram account. It cannot be tracked. Telegram gives bots an API that delivers every message sent to them, and a start parameter that can carry a click id. A personal account has neither: nothing tells a tracker who wrote, and no parameter can be attached to a t.me/username link. The only way to see a personal account's chats programmatically is to run automation on a human account, a so-called userbot, which Telegram's terms do not allow and which gets accounts restricted. Tellmetric does not do it and will not. Joins and messages are tracked through your own bot, created with @BotFather, whose token you paste on Connections.

The bot does not have to be clever; its job is to receive the first message so that it can be attributed.

The "DM to manager" funnel with a bot in front

If the sale happens in a conversation with a person, keep the person and add a bot at the front:

  1. The ad opens the bot through a tracking link, the person presses Start and sends their question. That first message is recorded and sent to Meta.
  2. Tellmetric's part ends at the recorded message. It does not run a support inbox and does not store the text of the message or the person's name; the event carries the ad, the link, the click id, the time and a hashed Telegram id. On Connections you can forward every such event to a URL as a signed JSON POST or a GET template, with a Send a test button, so that through Zapier or Make it becomes a CRM row, a Slack notice or a spreadsheet line telling the team that a lead from ad A has just written. The bot's greeting tells the person an admin will reply shortly; the conversation with your manager then runs the way your team already handles chats.
  3. When the person pays, the deposit is reported with the click id through the postback or the event API, or recorded by the bot as a Stars payment, and lands on the same ad as the message. See tracking deposits from Telegram leads.

The result is a funnel with three measured steps, click, message and deposit, on every ad, instead of a click count and a sales spreadsheet that never agree.

A worked example

The figures are illustrative. A consultancy runs three Meta ad sets to the same bot, each with its own message link. After two weeks:

  • Ad set A: €600 spent, 1,200 clicks, 310 Start taps, 95 first messages, 6 deposits worth €2,400. Cost per message €6.32; cost per deposit €100.
  • Ad set B: €600 spent, 2,100 clicks, 480 Start taps, 70 first messages, 1 deposit worth €400. Cost per message €8.57; cost per deposit €600.
  • Ad set C: €600 spent, 700 clicks, 260 Start taps, 110 first messages, 8 deposits worth €3,100. Cost per message €5.45; cost per deposit €75.

Ads Manager, optimising for link clicks, ranks B first: the cheapest clicks by far. The dashboard ranks C first on every number that matters, and shows that B loses most of its people between the chat opening and the first word: 480 Start taps, 70 messages. That is a creative problem, invisible without the Start and message counts. After the switch to optimising for Contact, Meta begins to find more people like C's writers.

Where it breaks, and how to tell

  • The ad links to the bot's plain username. t.me/yourbot carries no click id; every message becomes DMUnattributed. Use the ad URL from the Links page.
  • The person taps Start and never writes. Only a message is a lead. A large gap between Start taps and messages on the dashboard means the greeting or the ad needs work; the data is right.
  • The bot's token was changed or the bot was deleted. Messages stop arriving at all. The Tracking health page flags clicks that flow with nothing after them, and an email notice goes out.
  • Meta receives the event under a name the campaign does not optimise for. Check the conversion event in the ad set against the mapping on Connections; the Delivery tab shows what was sent and Meta's reply.
  • Events older than seven days. Meta refuses them; messages are sent as they happen, so this only matters if delivery was paused, for example above the Free plan's monthly cap.

Open Setup test after connecting: it makes a test link, you follow it from your phone, and it shows each step land: the click, the Start, the join or message, and Meta.

Frequently asked

Can Meta's click-to-message ads send people to Telegram?

No. Those ads open Messenger, Instagram or WhatsApp. A Telegram funnel uses a traffic or conversions campaign with a link, and the message is reported back through the Conversions API.

What does Meta receive for a first message?

A Contact event by default, with the fbclid, the browser cookies if the click passed through your page, and a hashed Telegram user id. You can rename it, for example to Lead, on Connections.

Can I track messages to my personal Telegram account?

No. Only a bot receives messages through Telegram's API and only a bot link can carry a click id. Put a bot in front of the conversation and let a person take over after the first message.

Is a repeat message counted again?

No. A first message is recorded once per person per day. A second conversation a week later is a new row, but the lead that Meta sees is the first one.

Does this need a website?

No. The tracking link alone carries the fbclid. A landing page with the snippet adds the Meta cookies and raises match quality, but it is optional.

Related guides

Track Telegram and Discord conversions from your ads

The Free plan requires no card. Upgrade to Pro at any time.