Common reasons chat-widget 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>.
- Chat widget loads in a cross-origin iframe - Intercom, Drift, Crisp, Tidio, LiveChat - all render their UI inside iframes hosted on their own domains. GTM on your page cannot see clicks, opens, or message-sends inside the iframe. You need the vendor’s JS API.
- Widget loads asynchronously after DOM Ready - Most chat scripts are loaded with
deferor viasetTimeoutto avoid hurting page-speed scores. A GTM listener attached on DOM Ready often fires before the widget exists. Wait for the widget’s init event or pollwindow.Intercom/window.driftuntil defined. - Multiple chat widgets on the same page - Common during a vendor migration (e.g., adding Drift while leaving Intercom in place for legacy users). Both widgets emit events, your trigger fires twice, and your reports double-count.
- Vendor’s own analytics integration is already active - Intercom/Drift have built-in GA4 integrations. If those are on AND your GTM tag is on, you log every event twice. Pick one.
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 vendor - Right-click the chat icon → Inspect. Look at the iframe’s
srcattribute or the page’swindowglobals (window.Intercom,window.drift,window.$crisp, etc.). - Hook the vendor’s callback API - Intercom:
Intercom('onShow', () => ...). Drift:drift.on('chatOpen', ...). Crisp:$crisp.push(['on', 'chat:opened', ...]). Use a Custom HTML tag in GTM that pushes to dataLayer when the callback fires. - Test in GTM Preview - Open the chat. You should see your dataLayer event in the timeline. If not, the callback wasn’t hooked - most likely because the vendor’s script loaded later than your GTM tag.
How to verify it’s working
- Open GTM Preview/Debug mode
- Navigate to your site
- Trigger the event (open the chat widget and send a test message)
- 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.