Analytics core
The GA4 core,
without the identity.
Views, visits, estimated devices, engaged time, bounce — trends over 15 to 92 days, deploy markers, top pages, sources, countries and devices, and a realtime view that refreshes itself. Every number carries its badge: exact, estimated or suppressed. It is the reporting core you expect — derived server-side, with nothing stored on the visitor's device.
Overview
The whole site, on one honest screen.
Views, visits, estimated devices, engaged time (median) and bounce — with 15–92 day trends, deploy markers pinned to the timeline, and top pages, sources, countries and devices one scroll away.
Devices are labeled estimated device-days, not people — NAT collisions undercount, IPv6 churn fragments, and the badge says so. Rows below the k-anonymity floor (n ≥ 5) are suppressed on every screen, including this one.
Realtime
Right now, on your collector.
Active visitors over a 5-minute window, a live page list, live sources and a 30-minute sparkline — auto-refreshing, served by the collector on your own hardware. No sampling lag, no third-party relay: the counts are live because the data never left your server.
Live pages & sources
See which path each active visitor is on and where they came from — refreshes without you asking.
30-minute sparkline
The last half hour at a glance, so a campaign spike or an incident is visible before support tickets say so.
Pages report
Every path, graded on six columns.
Per-path: views, engaged time (median), exit rate, scroll depth, frustration score and per-page CWV p75 — sortable on every column, badge-checked on every number.
| Path | Views | Engaged (median) | Exit | Scroll depth | Frustration | CWV p75 |
|---|---|---|---|---|---|---|
| / | 11,204 | 2:58 | 32% | 71% | 0.14 | 2.1 s good |
| /pricing | 5,411 | 3:24 | 41% | 64% | 0.31 | 2.6 s needs-imp. |
| /blog/cookieless-analytics | 3,905 | 4:02 | 18% | 83% | 0.05 | 1.9 s good |
| /checkout/payment | 1,101 | 1:47 | 55% | 58% | 0.52 | 2.8 s needs-imp. |
Metric-definition tooltips sit on every column header — click any number's badge to see exactly what was measured, how, and whether it is exact, estimated or suppressed.
Acquisition
Where traffic comes from, classified server-side.
Referrer classification, UTM extraction, country and device resolution all happen in the collector — with PII scrubbing on URLs and titles before anything is stored.
| Channel | Views | Share |
|---|---|---|
| direct | 21,281 | |
| search | 14,015 | |
| social | 6,229 | |
| referral | 5,710 | |
| campaign | 4,671 |
UTM tables
Full source · medium · campaign tables, extracted server-side from the landing URL — no client-side URL rewriting, no query strings stored raw.
Countries & devices
Country comes from the edge-supplied header, device and browser from the user agent, viewport buckets included — all aggregate, all badge-labeled.
PII scrubbing
Emails become [email], card-length digit runs become [num], API keys become [key] — in URLs and titles, before storage, tested end-to-end.
Engaged time, done honestly
Time that stops when the reader does.
Wall-clock time-on-page is noise. Observer measures active-visible time: Page-Visibility-aware, paused the moment the tab hides, kept alive by 15-second heartbeats and closed out with a final exit beacon. Median plus full distribution on every page — the honest engagement metric, and the denominator behind duration goals.
Paused on hide
A hidden tab is not reading. The heartbeat stops when Page-Visibility says so, and wall-clock drift never poisons the median.
Auto-tracked on top
Outbound links and file downloads are captured automatically — no extra markup — and appear as events on the session timeline.
The reporting core,
minus the surveillance.
Traffic analytics ships in the default tier — every number badged, nothing stored on the visitor's device, no consent banner. Access is granted after an NDA; we deploy together with your DevOps team, on your hardware.