Webclat / GTM Practice

GTM's preview shows my tag firing, so why does the event never show up in GA4?

Quick answer

Preview only confirms the tag executed inside the container - it does not confirm GA4 accepted the hit. The gap is almost always one of three things: the GA4 Configuration tag has not fired on the same page, the Measurement ID points at the wrong property, or an ad blocker or Consent Mode denial is silently dropping the network request after GTM already logged the tag as fired. Check the actual request in the Network tab, not just Preview, before assuming the fix is in GTM at all.

Why this happens

GTM Preview (Tag Assistant) reports on the container's own execution model - it logs a tag as "Fired" the moment its trigger condition is met and its own JS runs without throwing an error. It has no visibility into what happens after that JS hands the payload to the browser's network layer. A GA4 Event tag can legitimately "fire" and still never produce data in GA4's Realtime or standard reports for reasons entirely outside GTM: the request can be blocked by the browser, rejected by consent gating, or accepted by Google but attributed to the wrong property.

The single most common cause is a GA4 Event tag firing before, or without a link to, the GA4 Configuration tag. If the Configuration Tag field is left blank or points at a different Measurement ID than production, gtag.js still sends the event, just under a client ID or property nobody is looking at.

Fix it

  1. Open GTM Preview, click the GA4 event tag, and instead of trusting "Fired," open the Network tab and find the actual request to google-analytics.com/g/collect or region1.google-analytics.com/g/collect.
  2. Confirm the request status is 200/204 and check the query string for tid= - it must exactly match the Measurement ID (format G-XXXXXXX) you are checking in GA4. A mismatched or stale ID is the most common single cause.
  3. If no /g/collect request appears at all despite "Fired" showing in Preview, check the GA4 Event tag's "Configuration Tag" field - it must point at your live GA4 Configuration tag, not be blank or point at a duplicate or test container.
  4. Check Consent Mode: if analytics_storage is denied when the tag fires, gtag.js still sends a request but as a consent-less ping that will not populate standard reports the same way - confirm your CMP is granting consent in the test session.
  5. In GA4, check Admin > Data Streams > your stream to confirm the Measurement ID matches, and check Admin > Data Settings > Data Filters for an internal-traffic filter that could be excluding your test hits from standard (not Realtime) reports.

How to verify it worked

With Preview still open, use DebugView (Admin > DebugView, or temporarily add a debug_mode parameter to the GA4 tag) - a correctly landing event shows up in DebugView within seconds, tagged with your device. If DebugView shows it but standard reports do not after 24-48 hours, that is normal processing latency, not a broken tag. If DebugView shows nothing, the network request never reached GA4 successfully - go back to the Network tab and read the actual response code from the collect request.

Still stuck after working through this?

Send us what you are seeing in Preview and the Network tab. We trace GTM containers for a living and can usually tell you what is actually happening in one look.

Ask a GTM Engineer