Google Analytics Discrepancies

Overview

Discrepancies between Convert and Google Analytics (GA4) visitor counts are common and usually expected. They stem from fundamental differences in how and when each tool counts visitors.

Convert Counts More Than GA

This is the most common scenario. Convert's tracking script loads synchronously in the <head>, counting visitors almost immediately. GA typically loads later (async, via GTM, etc.).

Why the gap exists:

  • Short-session visitors (bounces) may leave before GA fires
  • If a visitor closes the tab in the first few seconds, Convert has already counted them but GA has not
  • Mobile users on slow connections may abandon before GA loads
  • Browser "back" button usage during this window is counted by Convert but missed by GA
  • Ad blockers may slow down or block GA while Convert still fires

This is particularly impactful for:

  • Mobile users (slower connections)
  • Users with ad blockers
  • Quick-bounce visitors
  • Single-page views where users immediately navigate away

GA Consent Mode and pscdl=denied

When the project setting "Do not wait for page_view event" is enabled and GA consent is not yet granted, Convert sends experience_impression with pscdl=denied. GA receives the event but filters it out of reports because analytics storage is denied.

Solution: Enable the default setting to wait for the first GA page_view. This ensures impressions are reported only after consent is granted and data flows properly.

Note: On sites using CMPs (Consent Management Platforms), the first GA page_view can still occur before consent is granted. In such cases, the resulting experience_impression may carry pscdl=denied — this is expected CMP timing behavior.

GA Counts More Than Convert

This is rare but can happen:

  • GA session timeout — If configured to be very short (e.g., 5 minutes), the same visitor returning after timeout is counted as new by GA, while Convert maintains the true unique count via its cookie
  • Network failures — Temporary issues affecting Convert's tracking but not GA (rare since GA is already loaded by the time Convert sends)

Reducing the Gap

OptionEffectTrade-off
Move GA/GTM bootstrap inline near top of <head> (keep async)Shrinks or eliminates the gapSlightly more bytes in critical path
Add <link rel="preconnect"> to googletagmanager.comCuts DNS/TLS time on mobileModest gain — measure first
Fire GA in an Initialization – All Pages trigger in GTMRuns as soon as GTM bootsRequires GTM container change
Accept the gap, treat Convert as the early-exit indicatorNo code changeMust document rationale for stakeholders
Align GA session timeout to 20 minRemoves edge case where GA keeps sessions alive longerAlters GA Avg. Session Duration

Key Takeaway

The discrepancy indicates Convert's tracking is working correctly — it captures all visitors including ultra-short sessions. GA's delayed tracking misses some visitors due to its loading and consent constraints. This gap can be a valuable early-exit signal in your analytics.