A Calendly booking reaches Google Ads through GA4 or through Google Tag Manager: Calendly's GA4 integration sends invitee_meeting_scheduled, which you import from GA4 as Calendly's help suggests, or the Calendly embed posts calendly.event_scheduled to your page, where Google Tag Manager fires the Google Ads conversion. When Calendly sits on your site, use the embed route, because the booking then counts on your domain, next to the ad click.
Calendly's own GA4 integration
Check 1: Is Calendly connected to your GA4 web stream?
G- (find it), and select Save.Check 2: Does a test booking send invitee_meeting_scheduled?
invitee_meeting_scheduled in the event count by event name (Realtime report). Calendly also sends page, day, time and routing form events (full list); only the booking is a lead. Standard reports can take up to 24 hours.(direct). Read what direct means in GA4 before you judge your ads by that report.Check 3: Which booking event is your key event?
invitee_meeting_scheduled, or the event your page sends in check 6.utm_ parameters the embed reads from your page URL and no gclid, and without cross-domain measurement a visit to another domain is a new user and a new session.The Calendly embed and Google Tag Manager
Check 4: Is Calendly embedded with widget.js, not a bare iframe?
https://assets.calendly.com/assets/external/widget.js. Only that embed messages your page; an iframe pasted on its own does not support event tracking via postMessage.Check 5: Does your page push each booking into the data layer?
<script>
window.addEventListener('message', function (e) {
if (e.origin !== 'https://calendly.com') return;
if (!e.data || e.data.event !== 'calendly.event_scheduled') return;
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'calendly_booking',
booking_id: e.data.payload.invitee.uri.split('/').pop()
});
});
</script>https://calendly.com, as Calendly's own example does, and pushes calendly_booking with booking_id, the last part of the invitee URI. No name or email leaves the embed: the calendly.event_scheduled payload holds only the event and invitee URIs.calendly_booking never shows in check 9, go back to check 4.Check 6: Do your conversion tags fire on that event?
calendly_booking (custom event trigger) and attach it to a Google Ads Conversion Tracking tag with your Conversion ID and Conversion Label (Google's setup) and to a Google Analytics: GA4 Event tag (GA4 events in Tag Manager).booking_id in the Ads tag's Transaction ID, which Google uses to skip duplicate conversions, and a Google tag or Conversion Linker tag on every page, which keeps the ad click in first-party cookies on your domain.Bookings on calendly.com
Check 7: Does a booking on calendly.com return to your site?
Check 8: Is calendly.com an unwanted referral?
calendly.com under Domain and click Save.calendly.com in the list. Google built it for visitors who return to your site from a third-party domain, such as a payment processor; without it, the redirect from check 7 shows calendly.com as a referral source.Test
Check 9: Does one test booking count once?
calendly_booking, or the thank-you page view, once in Tag Assistant with both tags fired on it, then one key event in GA4 Realtime. Reading the tags is covered in checking conversion tags in Tag Assistant.After each booking counts once
A booking is a lead, not a patient or a sale. The next step is telling Google Ads which bookings showed up and paid, so bidding learns from those, which is where closed-loop attribution starts. The system I deliver for that sends Google only a click id, a conversion value and a timestamp.
Tags
Frequently asked questions
Does Calendly integrate directly with Google Ads?
Its help routes Google Ads through GA4: Calendly documents a Google Analytics (GA4) integration and points to Google's steps for importing GA4 conversions into Google Ads. For bookings in an embed, the calendly.event_scheduled message the embed posts to your page can fire a Google Ads conversion tag from Google Tag Manager.
Can I track a Calendly embed with Google Tag Manager?
Calendly says it has no direct Google Tag Manager integration, but its embed posts calendly.event_scheduled to your page with window.postMessage. A Custom HTML tag can listen for that message and push a data layer event that triggers your tags. An iframe pasted on its own sends no such messages.
Why do Calendly bookings show as direct in GA4?
Calendly's help says GA shows the source as (direct) when the scheduling link carries no UTM tags. The booking also happens on calendly.com, and without cross-domain measurement GA4 counts a visit to another domain as a new user and a new session.
Which Calendly plans include the Google Analytics integration?
Professional, Standard, Standard Plus, Teams, Teams Plus and Enterprise, and only Owners and Admins can set it up. Each Calendly organization connects one GA4 Measurement ID, which cannot differ by user or team.