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.
| Metric | Formula | Source | GA4 / GSC label |
|---|---|---|---|
Sessions | GA4 sessions (raw) | GA4 Data API · sessions | Sessions No transformation. Matches GA4 1:1. |
Users | GA4 activeUsers (raw) | GA4 Data API · activeUsers | Active users |
Avg. Engagement Time | userEngagementDuration ÷ sessions | GA4 Data API | Average engagement time per session Matches GA4's headline KPI tile. Excludes idle / background time. |
Avg. Session Duration (incl. idle) | sessionDuration ÷ sessions | GA4 Data API · averageSessionDuration | Average 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 · bounceRate | Bounce rate |
Engagement Rate | engagedSessions ÷ sessions | GA4 Data API · engagementRate | Engagement rate |
Key Events / Purchases | GA4 keyEvents / purchaseRevenue (raw) | GA4 Data API | Key events, Purchases |
Clicks / Impressions / CTR / Position | GSC raw values; CTR = clicks ÷ impressions | Search Console API | N/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.
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
- Open GA4 → Reports → Acquisition → Traffic acquisition for the same date range.
- Compare the top KPI tiles (Sessions, Users, Engagement rate, Avg engagement time per session). They should match Glarify line-for-line.
- 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.
- Time mismatches? You're almost certainly comparing the wrong GA4 column — see the first discrepancy card above.