Facebook says 900 leads, Telegram says 40: why your numbers don't match

When Ads Manager reports far more leads than your Telegram channel actually gains, Meta is optimising for the wrong people. Here's why it happens and how to fix it.

7 min read
Facebook says 900 leads, Telegram says 40: why your numbers don't match
On this page

It’s one of the most common things media buyers running Telegram funnels tell us. Ads Manager shows hundreds of leads at a lovely cost per result. The channel grows by a fraction of that. Deposits drop. Nobody can say why.

We’ve seen a trading funnel in Africa where Meta reported more than 900 leads in a period where around 40 real people joined. The ads weren’t broken. Meta was doing exactly what it was told: finding more of whatever event it was being sent. The event just wasn’t a join.

Why Meta’s lead count and your channel don’t match

1. The Lead fires on the landing page, not on the join

Most Telegram funnels go: ad → landing page → Telegram. If the pixel fires Lead when the page loads, or when someone taps the join button, Meta counts a lead before anyone reaches Telegram.

Many of those people never join. Some don’t have Telegram installed. Some tap by accident. Some are bots. Meta doesn’t know the difference, so it optimises for people who tap buttons, not people who join.

2. Junk placements

Audience Network and some in-app placements send a lot of accidental clicks and low-intent traffic. They look cheap in Ads Manager and rarely turn into subscribers. Check your placement breakdown: if a big share of “leads” comes from one placement with a terrible join rate, that’s your leak.

3. People without Telegram

In many African and Asian markets, a real share of people who click a Telegram ad don’t have the app installed, or aren’t logged in on that phone. They land, see an app store prompt, and leave. To a pixel on the landing page they look exactly like a lead.

4. Bots and fake joins

Paid traffic to Telegram attracts automated clicks and fake accounts. If your setup counts their clicks or joins as conversions, Meta learns to find more of them. See Why your cost per subscriber lies to you for how quickly this inflates your numbers.

5. Modelled and view-through conversions

Meta fills gaps in its data with modelled conversions, and default attribution can credit a conversion to someone who only saw your ad. That’s fine when the event is real, but it stacks on top of everything above.

How to check if this is happening to you

You don’t need any tool for a first check. For the last 7 days, write down:

NumberWhere it comes from
Link clicksAds Manager
Leads (or your result)Ads Manager
New membersTelegram channel stats
Registrations and depositsYour affiliate program or CRM

Then compare:

  • Leads ÷ new members. Close to 1 is healthy. If Meta’s leads are several times your real joins, Meta is optimising for the wrong event.
  • Clicks → members. On a clean funnel, a healthy share of clicks become members. A very low rate points to placement, landing page or “no Telegram” problems.
  • Members → deposits. If joins look fine but deposits collapsed, the people Meta is finding are low quality.

How to fix it

Make the real join the event Meta optimises for

Stop firing Lead on page load or button taps. Instead, send the event only when someone actually joins your channel or starts your bot, and send it from a server through the Conversions API. That way Meta only ever learns from people who made it into Telegram. How to track Telegram channel joins from Meta ads walks through the setup.

Filter fake joins before Meta sees them

Bots, deleted accounts and repeat joiners shouldn’t be sent as conversions. Filter them out before the event is sent, so Meta’s learning stays clean.

Optimise for deposits once you have volume

Once joins are clean, connect your affiliate program’s postback and send first deposits back as Purchase with their value. Then you can run campaigns that optimise for people who pay, not just people who join. Cost per FTD vs cost per join: what you should actually optimise covers when to make that switch.

Fix the leaks you found

  • Exclude placements with a terrible click-to-join rate.
  • Make your landing page open Telegram straight away, with a clear fallback for people who don’t have it.
  • Use per-click links so you can see exactly which ads bring real members.
Track this in Joinvoo, free.Every join, start and deposit matched to the ad that drove it. First 500 joins on us.Start free

What happened with that 900-lead funnel

Once the funnel sent real joins from a server instead of page-level leads, the reported numbers dropped to match reality. That looks worse in Ads Manager for about a day. Then Meta started finding people who actually joined: click-to-subscriber rates rose sharply and first deposits came back.

Lower “results” on a real event beat high “results” on a fake one.

Where Joinvoo fits

Joinvoo sends Meta, TikTok and Snapchat the real join, matched to the exact ad click and sent from a server. It filters fake joins first, and can send deposits from your affiliate program back with their value. You also get the comparison above (clicks, joins, deposits per ad) without a spreadsheet.

Start free. Your first 500 joins are free.

Written by

Joinvoo Team

The people building Joinvoo

We build Joinvoo, the tracker for media buyers who run ads to Telegram channels, groups and bots. We write practical guides on tracking, server-side events and getting ad platforms to optimise for real people.

Start tracking free

Make your ads buy real people, not noise.

Joinvoo tracks every Telegram join, website sign-up and deposit from Meta, TikTok, Snapchat and Google, filters the fakes, and sends the real ones back server-side. Your first 500 joins are free.

Start free Read the setup guideNo card needed · about 10 minutes to set up
Back to blog