← All case studiesUA
Case study · Ads and analytics

Cost per lead −42%: ads finally see real leads

The ad account showed one number of leads, the bot another, the CRM a third. Worse, the ads were learning from those fake “leads” and looking for people who just click. I made Meta and TikTok see only those who actually registered in the Telegram bot. Cost per lead dropped by 42%.

SendPulseMeta Conversions APITikTok Events APINetHunt CRMClaude AI
Before, cost per lead€13.19
Now€7.62
−42%cost per lead in Meta
+10%webinar sign-up conversion
4300+bot events processed automatically in the CRM
3 = 3ad account, bot and CRM numbers finally match
The challenge

The ads counted clicks, not people

Meta and TikTok ads led to a webinar page. From there people clicked a button to a Telegram bot: sign-up, reminders, the stream link. The bot passed the lead to the CRM, and webhooks moved the person through stages: attended live, watched the recording, booked a consultation.

The ads team fired the Lead event on the button click. But people clicked several times, or opened Telegram and never pressed Start. Numbers in the ad account, the bot and the CRM never matched, and the Meta and TikTok pixels learned from distorted data.

Why not just collect contacts with a form on the site: the CRM identifies a person by email and phone to move them through stages automatically. So registration had to stay in the bot.

How it works

From an ad click to the right lead

Click a screenshot to enlarge it. Access keys, personal data and campaign names are hidden. Screens are in Ukrainian.

01

Site tags reach the bot

A script on the site passes ad tags to the bot: UTM, Meta and TikTok click IDs, page URL and click time. The bot stores them in contact variables.

02

Lead fires only after Start

The event is sent only when the person actually starts the bot. Filters check which ad they came from, and an API request sends the event:

  • to Meta via the Conversions API
  • to TikTok via the Events API
  • repeated button clicks no longer count
03

Sent server-side

The request passes the Lead event with exact time, source and click IDs. It doesn't depend on ad blockers or browser cookies.

04

Direct Meta integration

The Conversions API is connected to the pixel, so Meta receives the lead from the server and knows exactly who in the audience signs up.

05

Sign-up lands in the CRM

A webhook from the bot creates a contact and a deal in the right course pipeline. Separate branches route people by course.

06

CRM stages update themselves

When a person joins the live session, the bot sends another webhook. The CRM finds them by email and phone and moves them to “Live attendee”. The same for watching the recording and booking a consultation. This automation alone has processed 3,400+ events.

07

Consultation after the webinar

A separate automation catches consultation bookings and updates the deal in the right pipeline, so the calls team sees who is ready to talk.

08

Webinar pipeline in the CRM

The stages “Webinar clients → Live attendee → Watched recording” fill in automatically. The team reaches people while they still remember the webinar.

09

Result in the ad account

Once the pixels received only real sign-ups, Meta found the right audience faster. Cost per lead dropped from €13.19 to €7.62.

Results

What changed

  • Cost per lead €13.19 → €7.62 (−42%): Meta now clearly understands its audience.
  • Webinar sign-up conversion +10%.
  • Numbers match across the ad account, the bot and the CRM.
  • Repeated clicks and drop-offs before Start no longer distort pixel learning.
  • 4,300+ bot events automatically updated CRM stages.
For your business

Are your ads counting the wrong people too?

Describe the task that takes up your time and the result you want. I'll tell you how to automate it with the tools you already use: CRM, chatbots, ad accounts.

Discuss your task