GA4 setup

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

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 free

Get 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 & pricing

Datahound 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