Quick answer: GA4 reports fewer users and sessions than Universal Analytics because the two tools count differently — GA4 uses Active Users instead of Total Users, unifies the same person across devices, doesn't reset sessions at midnight or on a new campaign source, and models/thresholds data for privacy. A gap of roughly −10% on sessions (range −10% to +20%) is considered normal. Only a drop larger than that, or a sudden cliff, points to an actual tracking bug.
This post explains each cause, shows you how to sanity-check the gap, and lists the red flags that mean something is genuinely broken. For the big-picture comparison, start with GA4 vs Universal Analytics: key differences.
What gap is "normal"?
Benchmarking studies that compared the same sites in both tools found that about half of properties fell between a 10% decrease and a 20% increase in sessions when moving to GA4. For users, GA4 typically reports a noticeably lower number. So before you open a support ticket: a GA4 number that's ~10% under your old UA number is expected behavior, not a defect.
The trap is comparing the wrong metrics. "Users" in UA and "Users" in GA4 are different calculations — comparing them directly is like comparing Fahrenheit to Celsius because both say "degrees."
Why users are lower
1. Active Users vs Total Users
UA's headline metric was Total Users — anyone who triggered any hit. GA4's headline metric is Active Users — users who had at least one engaged session (10+ seconds, a conversion, or 2+ pageviews). Stricter definition, smaller number, same audience.
2. Cross-device de-duplication
If one person visited on their phone in the morning and their laptop at night, UA usually counted two users. GA4, using signals like Google Signals and User-ID, often resolves them to one. More accurate, lower count.
3. Consent and cookie loss
GA4 deployments are typically wired to a Consent Mode v2 setup. When users decline analytics cookies, GA4 may collect nothing or only modeled pings — whereas many older UA installs fired regardless. If your consent banner went live around the same time as GA4, some of the "drop" is simply traffic you're no longer (and shouldn't be) counting. See the Consent Mode v2 audit checklist.
Why sessions are lower
4. Different session reset rules
This is the big one. Universal Analytics started a new session when:
- the clock passed midnight, and
- a returning visitor arrived with a new campaign source (e.g. clicked an email, then later a Google ad).
GA4 does neither. A GA4 session only ends after 30 minutes of inactivity. So a visitor who, under UA, would have generated three sessions in a day might generate just one in GA4. Fewer sessions, identical behavior.
This also means GA4 sessions are estimated (modeled from the session_start event and a unique session ID) rather than counted exactly, which adds small differences of its own.
Modeling & thresholding
5. Data thresholding hides small cohorts
To prevent identifying individuals, GA4 withholds rows when a segment is too small (often when Google Signals is on). Those users still exist but vanish from certain reports, making totals look lower in demographic, age, or detailed breakdowns. This is a reporting effect, not lost data — full explanation in GA4 data thresholding.
When it IS a bug
Structural differences explain a gap up to ~20%. Beyond that, investigate. Red flags:
- A sudden cliff — traffic was steady, then dropped 40%+ on a specific date. Usually a broken tag, a GTM publish, or a site deploy that removed the snippet.
- A huge "(unassigned)" or "(not set)" channel — sessions are being recorded but not attributed. Fix per how to fix unassigned traffic in GA4.
- Self-referrals or missing pages — cross-domain or subdomain tracking is broken. See the cross-domain audit.
- Duplicate page_views — double-tagging inflates rather than deflates, but it's a sign the install is wrong either way.
- Identity space confusion — Blended vs Observed vs Device-only reporting identity changes user counts; see reporting identity explained.
The fastest way to separate "normal gap" from "real bug" is a structured audit. Snifflytics checks tag firing, key events, attribution, and thresholding automatically, or follow the step-by-step audit walkthrough.
FAQ
Is a 10% drop from UA to GA4 normal?
Yes. Around a 10% reduction in sessions is typical, and many sites land anywhere from −10% to +20%. Users often drop more because of the Active vs Total definition.
Does GA4 count users across devices?
Yes — when Google Signals or User-ID is enabled, GA4 unifies the same person across devices into one user, where UA usually counted them separately.
Why are my GA4 sessions so much lower than UA?
Mostly because GA4 doesn't start a new session at midnight or when a returning visitor arrives from a new campaign source. UA did both, inflating its session count.
How do I know if the drop is a bug, not just GA4 being GA4?
If the gap exceeds ~20%, appears as a sudden cliff, or comes with a large "(unassigned)" channel, treat it as a tracking issue and audit the tag, channels, and cross-domain setup.