Services
Google Ads Management Meta Ads Management Website Design & Build Local SEO Social Media Management Tracking & ConversionsAd Platform Tracking
Meta Pixel + CAPI TikTok CAPI LinkedIn CAPI Snapchat CAPI Pinterest CAPI Quora Pixel Bing + UET TagGoogle Ecosystem
Google Ads Tracking GA4 Setup & Audit Google Tag ManagerAdvanced Solutions
Server-Side Tracking Looker Studio Offline ConversionA Canadian B2B SaaS for manufacturing companies was using Calendly embedded on their pricing page for demo bookings. GA4 showed 80% of demo bookings as "direct" traffic. Their sales team knew demos were coming from Google Ads and LinkedIn but the data said otherwise.
Calendly embeds run in an iframe from calendly.com. When a user selects a time slot and submits their information inside the Calendly iframe, a new browser context is created. Any redirect that happens after booking goes through calendly.com, stripping all UTMs and resetting the GA4 session. The GA4 session_id, client_id, and attribution context were all lost at the moment of booking.
Calendly's iframe architecture breaks GA4 session continuity because the booking action happens on calendly.com, not your domain. The Calendly postMessage API is the only way to intercept the booking event from within your page context. Storing UTMs in sessionStorage on page load and reading them at booking time is the standard pattern for preserving attribution through iframe booking widgets.
“80% of our demo bookings showed as 'direct' in GA4 — we knew that was wrong. Saifur found that the Calendly embed iframe was breaking our session attribution. He set up a postMessage listener to capture the booking event and preserve the original UTM attribution. Now 91% of demos are correctly attributed.”