How to track booked calls from Meta ads (Pixel + Conversions API)
By Christopher Robinson · Updated · 7 min read
Short answer
Fire Meta's standard Schedule event when a call is actually booked — not when the calendar opens — from both the browser Pixel and the Conversions API, with the same event ID so Meta counts it once. Then optimize your campaign for Schedule. That's what lets Meta find people who book, not just click.

Which Meta event should a booked call be?
Use the standard Schedule event for a confirmed booking and Lead for a form submission. Fire Schedule only when the booking is created — not when the calendar opens — so Meta learns from real buyers. Track the calendar opening separately as a custom event if you want it for reporting.
| Moment | Meta event | Optimize for it? |
|---|---|---|
| Booking confirmed | Schedule | Yes |
| Form / quiz submitted | Lead | Yes, for lead campaigns |
| Calendar opened | Custom (e.g. BookingOpen) | No |
| Landing page viewed | PageView / ViewContent | No |
Why use the Conversions API as well as the Pixel?
Browser pixels miss conversions blocked by ad blockers, iOS privacy features and in-app browsers. The Conversions API sends the same event from your server, with hashed email and phone, so Meta still counts it. Sending both with a shared event_id lets Meta de-duplicate them into one conversion.
How do you send booked calls server-side from Cal.com or Calendly?
Add a webhook for “booking created” that points to a small server function. Verify the webhook signature, read the booker's email and phone, hash them with SHA-256, and post a Schedule event to the Conversions API with event_id set from the booking ID. Pass the browser's _fbp and _fbc cookies through booking metadata for the best match.
- Webhook trigger: booking created
- Verify the signature with your webhook secret
- event_name: Schedule, action_source: website
- event_id: the same ID the browser Pixel used
- Hashed email and phone, plus fbp/fbc
How do you test that it works?
Open Events Manager → your pixel → Test events, add the test code to your server, then make a real booking. You should see Schedule arrive from both Browser and Server, marked as deduplicated. Check Event Match Quality after a few days; aim for “Good” or better by sending email and phone.
What about Google Ads and Microsoft Ads?
Send the same booking moment to Google Ads as a conversion with enhanced conversions (hashed email/phone) and to Microsoft Ads as a UET goal with the book_appointment event. Use one data layer event for the booking and let Google Tag Manager route it, so every platform counts the same thing.