Bot Watch
The detection model, plainly
GA4 already filters out known crawlers — Googlebot, Bingbot, and a list of about a thousand others. What gets through are the bots that don't identify themselves: scrapers using headless Chrome, automated SEO tools, content harvesters, and the occasional rogue script. Those leave behavioural fingerprints, which is what this dashboard reads.
The signals we use
Engagement rate — the share of sessions GA4 classifies as "engaged" (≥10 seconds active, or a conversion, or 2+ pageviews). Bots rarely qualify, so a slice of traffic with engagement rate below 30% is statistically bot-heavy. The site-wide average for genuine traffic typically sits between 55% and 70%.
Views per session — humans typically view 1–2 pages per session. Scrapers can hit 20 or 50, often in seconds. Anything above 4 is worth investigating.
Geographic concentration — a sudden spike from a single country that's not normally a major contributor is a classic VPN/proxy/datacenter pattern.
Channel outliers — bots often arrive as Direct/(none) (no UTM, no referrer) or via specific paid networks. Channels with engagement well below the property average are suspect.
What this doesn't catch
Sophisticated bots that simulate human behaviour — slow scrolling, randomised dwell times, full page parsing — can defeat behavioural detection. For those, you need either explicit user-agent allowlisting (which GA4 doesn't fully expose) or IP-level filtering (which requires server-side analytics). This is a strong heuristic, not a forensic tool.
Also: a low engagement rate isn't always bots. An ad campaign sending people to a landing page they immediately leave looks the same. Use this alongside Channel Mix and the per-page view to distinguish.
What "filter on" actually does
When the suite-wide filter is enabled, other dashboards will preferentially show engagedSessions instead of sessions as the headline metric, and display a small 🤖 filtered pill in the header so it's clear which view is active. The underlying GA4 data isn't modified — the filter just selects a different lens.