Skip to main content
Analytics methodology

How we compute analytics metrics — and where they differ from GA4

Every number on /app/analytics maps to a documented GA4 or GSC formula. This page lists the formulas, the source dimensions, and the five known reasons your numbers may not match Google's UI line-for-line.

Metric definitions

Exact formula, source dimension, and the GA4/GSC label each metric maps to. Click the link icon on any row to copy a deep link to that definition.

MetricFormulaSourceGA4 / GSC label
Sessions
GA4 sessions (raw)GA4 Data API · sessionsSessions
No transformation. Matches GA4 1:1.
Users
GA4 activeUsers (raw)GA4 Data API · activeUsersActive users
Avg. Engagement Time
userEngagementDuration ÷ sessionsGA4 Data APIAverage engagement time per session
Matches GA4's headline KPI tile. Excludes idle / background time.
Avg. Session Duration (incl. idle)
sessionDuration ÷ sessionsGA4 Data API · averageSessionDurationAverage session duration
Legacy GA metric. Always longer than engagement time because it includes tabbed-out / idle time.
Bounce Rate
GA4 bounceRate (session-weighted)GA4 Data API · bounceRateBounce rate
Engagement Rate
engagedSessions ÷ sessionsGA4 Data API · engagementRateEngagement rate
Key Events / Purchases
GA4 keyEvents / purchaseRevenue (raw)GA4 Data APIKey events, Purchases
Clicks / Impressions / CTR / Position
GSC raw values; CTR = clicks ÷ impressionsSearch Console APIN/A — GSC only
Dimension is landingPage (not landingPagePlusQueryString) to avoid splitting one page across ?utm_* variants.

Known discrepancies & why

Five categories cover ~every "Glarify and GA4 don't match" question we get.

GA4 ships three different "time" numbers and they are not interchangeable:
  • userEngagementDuration / sessions — what GA4 highlights as Average engagement time per session. Usually 1–3 min.
  • userEngagementDuration / activeUsers — Traffic Acquisition's per active user. Usually 3–6 min.
  • sessionDuration / sessions — legacy averageSessionDuration, includes idle/background time. Often 6–10 min+.

Glarify's Avg. Engagement Time card uses formula #1 to match GA4's headline KPI. The Avg. Session Duration (incl. idle) card uses formula #3 — labeled so you know it will be higher than GA4's engagement-time figure.

An unweighted mean of per-day averages skews when daily volume varies. Glarify always recomputes from raw totals: SUM(numerator) ÷ SUM(denominator). This is what GA4 does for its headline KPI tiles.

GSC's landingPagePlusQueryString dimension splits one logical page across every ?utm_* variant, making the "top page" appear to have a fraction of its real traffic. Glarify queries landingPage and defensively aggregates rows by normalized path.

GSC buckets by Pacific Time; GA4 buckets by the property's reporting timezone. For short windows (1–3 days) at the edges, daily totals will not match exactly. Use 7+ day windows whenever you cross-check.

GA4 may apply sampling on high-cardinality queries; GSC anonymizes long-tail queries as (other). Glarify surfaces sampled responses but does not hide the (other) bucket — the table sums it back into totals so KPIs stay consistent with the GSC UI.

Compare against GA4

Open the exact GA4 report Glarify pulls from, pre-filled with the same date range and the filter you need to reproduce the headline KPIs.

Report path
Reports → Acquisition → Traffic acquisition
Required filter
Session default channel group = Organic Search
Date range
Open this page from /app/analytics to auto-fill
Property

Tip: every metric card on /app/analytics and /app/all-in-one/analytics has a "How we calculate this" link that opens this page with the right anchor, date range, and property already filled in.

Verify any number against GA4

  1. Open GA4 → Reports → Acquisition → Traffic acquisition for the same date range.
  2. Compare the top KPI tiles (Sessions, Users, Engagement rate, Avg engagement time per session). They should match Glarify line-for-line.
  3. For landing-page-level cross-checks, use GA4 → Engagement → Landing page with Session default channel group = Organic Search. This is the exact slice Glarify merges into the GSC landing-page table.
  4. Time mismatches? You're almost certainly comparing the wrong GA4 column — see the first discrepancy card above.