How to track a Calendly or booking-widget booking as a conversion
Booking tools like Calendly are usually embedded in an iframe, and GA4 cannot see inside another site's iframe. So a completed booking looks invisible unless you capture the signal the widget sends out.
Why the booking is invisible by default
The widget runs on the provider's domain inside an iframe on your page. Your GA4 tag lives on your domain and, for privacy reasons, cannot read events happening inside that iframe. So the booking completes, but nothing fires on your side. This is the same wall that causes a lot of thank-you page tracking gaps.
Capture the event the widget emits
Good booking tools broadcast a message when a booking completes. Calendly, for example, sends a browser message event such as calendly.event_scheduled. In Google Tag Manager you add a small listener (a Custom HTML tag) that catches that message and pushes a booking_complete event into the data layer.
Fire the GA4 event and mark it a conversion
- Create a GA4 event tag that fires on the
booking_completedata layer event. - Mark it as a key event so it counts as a conversion and can feed Google Ads.
If your provider is not Calendly, check its docs for the equivalent postMessage or callback. Nearly all of them emit one; you just have to listen for it.
Want us to check your tracking in 10 seconds?
Pop in your domain and we will show you what is firing, what is not, and where data is leaking. Free, no signup.
Check my tracking freeGet a plain-English audit
We check your live GA4, Google Tag Manager and consent setup by hand and tell you exactly what is wrong. The audit comes off any build.
See how it works & pricingDatahound are analytics and ad-tracking specialists. We fix broken GA4, Google Tag Manager and server-side tracking so every sale, form and call gets counted. Back to datahound.agency · All tracking guides · Why your thank-you page is not tracking