Common reasons widget-interaction tracking doesn’t fire
- GTM container not published - You imported the container but didn’t click Submit → Publish.
- GTM snippet not installed on your site - The GTM code needs to be in your site’s <head> and <body>.
- Widget renders in a cross-origin iframe - Calendly, Typeform, Tally, HubSpot Meetings, Cal.com, Mailchimp embeds, Klaviyo forms, and dozens of others use iframes hosted on the vendor’s domain. GTM on the parent page cannot see clicks inside. Most vendors expose a JS event API or postMessage hook for this exact reason.
- Widget uses postMessage to communicate - When the widget completes (e.g., a Calendly booking), the iframe posts a message to the parent:
{ event: 'calendly.event_scheduled', payload: {...} }. You need awindow.addEventListener('message', ...)listener that filters by the message origin and event name. - Lazy-loaded widget - Many widget embeds use
data-widget-url+ a deferred load on scroll-into-view to keep page-speed scores up. Listeners attached on DOM Ready miss the iframe entirely. - Vendor changed their event names - Calendly v1 → v2 renamed events (e.g.,
event_scheduledstayed, butevent_type_viewedbecameprofile_page_viewed). If your tracking was set up before a vendor migration, it silently breaks on the upgrade.
Step-by-step debugging checklist
- Verify GTM is installed - Visit your site, right-click → View Page Source, search for “GTM-”. If you don’t see it, GTM isn’t installed.
- Check GTM Preview mode - In GTM, click Preview. Navigate your site and trigger the event. Look for your tag in the Tags Fired section.
- Check the trigger - If the tag shows as “Not Fired”, click on it to see which trigger conditions aren’t met.
- Identify the widget vendor - Inspect the iframe on the live page. The
srctells you the vendor:calendly.com,tally.so,typeform.com, etc. - Open the console and listen for postMessages - Run
window.addEventListener('message', e => console.log(e.origin, e.data)). Interact with the widget. You should see messages from the vendor’s origin. The event name and payload tell you what to hook. - Look up the vendor’s JS event docs - Search “[vendor name] javascript events” - almost every widget vendor publishes one. The docs list event names + the postMessage shape so you can match exactly.
How to verify it’s working
- Open GTM Preview/Debug mode
- Navigate to your site
- Trigger the event (interact with the widget (book a slot, complete a step, etc.))
- Check the GTM debug panel - your tag should appear under “Tags Fired”
- Check GA4 DebugView (GA4 → Admin → DebugView) to confirm the event arrived
Still didn’t work?
Our team can help. Describe what’s happening and we’ll get back to you within 24 hours.