Skip to content

Tracking & attribution engineeringClient work

Booked Calls and CRM Sales Invisible to Meta: Server-Side Conversions From Calendly and GoHighLevel

Server-side Meta conversions from Calendly and GoHighLevel: booked calls and CRM sales sent to Meta CAPI, deduplicated against the browser event.

For
Coaches and info-product sellers
Checked

Sounds familiar?

Tick what applies to you

The situation Tracking & attribution engineering
Why does Meta show no conversions when my bookings and CRM sales are happening?

Tick the lines that describe your case.

Describe my task

How I solve it

What I build

I build the return path from a booked call or a CRM sale back into Meta. Each booking becomes a server-side Lead (or Purchase) sent to Meta Conversions API with the click identity attached and the contact details hashed. It shares one event_id with the browser event on the thank-you page, so the two legs deduplicate instead of double-counting, and Meta learns from real bookings rather than page views.

The process

How it works

6 steps. Scope and a fixed price are agreed before the first one.

  1. Read the funnel

    The landing page, the booking step, the CRM and the thank-you page — and where identity is currently lost.

  2. Capture identity early

    The click ids (fbc, fbp) and the session are captured on the page and carried into the booking and the CRM record.

  3. Build the server leg

    The booking webhook is verified, parsed, and sent from a Cloudflare Worker to Meta CAPI.

  4. Deduplicate

    PII is hashed with SHA-256; the server event and the browser Lead share a deterministic event_id.

  5. Prove it live

    A real booking is traced end to end: one Lead, the right value, the click id attached.

  6. Hand over

    A written map of the path, the event definition and the read-back so your team can run it.

Handover

What you get

  • One server-side conversion per booking or CRM sale, deduplicated against the browser event.
  • Click identity attached (fbp, fbc, UTM campaign tags) so the booking joins back to the ad.
  • Hashed contact details only — no raw name, email or phone leaves your systems for Meta.
  • A bidder that learns from booked calls, not from the cheapest event on the page.
  • A written map and handlers so the path is owned by you, not by a vendor.

Built with

  • Calendly and booking webhooks
  • GoHighLevel / LeadConnector API
  • Cloudflare Workers (TypeScript)
  • Meta Pixel and Conversions API
  • GTM
  • your landing stack (WordPress / Elementor or similar)

Proof

Done before, with dates and numbers

Client work Done for real clients. Client details are anonymised.

Before → after

The browser-only Lead on the thank-you page matched at EMQ 7.1; the server-side booking Lead reached 9.3 on the same funnel and the same events, with the two sharing an event_id for deduplication — read from the Meta signal at delivery in June 2026.

  • Spain-based 1:1 coaching business

    delivered Jun 2026, closed Aug 2026 with a 5.0 review

    Calendly booking → Cloudflare Worker → Meta CAPI Lead, deduplicated against the browser Lead; browser Lead EMQ 7.1 vs booking Lead 9.3. The same audit proved the tracking was fine and the ad was the real problem — 94 clicks, 0 leads.

  • Meta Pixel, Conversions API and attribution work on Upwork

    34 contracts since 2016, 7 of them started in 2024–26

    browser + server dedup, client-owned Workers, ad-level attribution.

Rated 5 out of 5 on Upwork.

Very responsive, professional, and REALLY knows his stuff. I had an issue with meta ads attribution and [he] did a great job fixing it!

Oliver H. Upwork · 2026

What you can look at

A redrawn flow — booking → HMAC-verified webhook → Worker → Meta CAPI, with deduplication against the browser Lead — plus a redacted payload on synthetic data showing the shared event_id and hashed fields.

Client details anonymised. Figures read from live platform APIs in June 2026. This is the booking path; I am the founder of Fixel Pixel, disclosed as one option, not the only route.

Price and timeline

What it costs and how it runs

A single booking-to-Meta path is a bounded Focused Fix, from USD 450, with the exact scope and a fixed price agreed in writing before any work starts. If it is not clear yet whether the tracking or the ad is at fault, the honest first step is a Working Session (USD 195) or a read-only Tracking Health Check (USD 395) with a written verdict in two working days after kickoff. Discussing the task is free.

QuoteFixed before work starts

Price
Focused Fix from USD 450 for one bounded conversion path. If the cause is unclear, start with a Working Session (USD 195) or a read-only Tracking Health Check (USD 395). Discussing the task is free.
Timeline
A bounded build with a fixed quote before it starts. In the dated case the pipeline was delivered 2026-06-21 and closed 2026-08-26 with a 5.0 review.
First step
Describe the task. I reply within one working day, free, and tell you which option fits — or that you can fix it yourself.
Describe a task like this

A note from Daniilbefore you decide

When you don’t need this

If Meta’s one-click Conversions API already sees your bookings and the numbers agree with your CRM within the tolerance you can live with, a custom path adds work you don’t need — I’ll say so. And if the problem is the ad, not the tracking, no conversion path will fix it. In the dated case the audit’s own answer was that tracking worked and the ad did not, and I told the client that instead of selling a rebuild. One habit worth keeping: never authorise server-side CAPI with a personal user token.

— Daniil

Questions

What people ask about this

Calendly or GoHighLevel — which do you support?

Both, and other booking and CRM tools. The pattern is the same: a verified webhook builds the server event and it is matched back to the page session.

Will you send personal data to Meta?

No. Contact details are hashed before they leave; the event carries hashed identifiers and the click id, not raw data.

How do you avoid counting the booking twice?

The browser Lead and the server Lead share one `event_id`, so Meta keeps one and drops the duplicate.

Do I need my own server?

Not necessarily. The Worker can run on your own Cloudflare account so you own it, or be hosted and watched by me.

What if the bookings are actually measured and the ad is the problem?

Then that is what the audit will say. I will not sell a conversion rebuild for an ad problem.

Daniil Maximkin

Hi, I’m Daniil.

I work with you from defining the problem to implementation and handover. You talk to the person who does the work. I work in English and Russian.

Have a task like this?

Describe your task

The first answer is free, within one working day. Or write directly: next@taskfordaniel.com