These are the codes the beacon reports about the browser it is running in. A code is an observation, not a verdict: the scorer correlates them with the transport and behaviour planes and owns the final number.
The weight column here is only this plane’s contribution to the client sub-score. The rules that turn them into a verdict are on How a visit is scored. This page has the automation markers and the headless tells; the browser claim probes and the consistency checks and human evidence have their own pages.
A beacon whose hostname is not in Settings › Measured sites still adds time on site, but none of the codes on these three pages is used. This stops a stranger’s page, loaded in a visitor’s browser, from reporting that visitor as automation.
| Code | Weight | What it means |
|---|---|---|
automation_webdriver | 100 | The navigator webdriver flag is true |
automation_cdc | 100 | chromedriver’s marker property on window or document |
automation_playwright | 100 | A Playwright binding |
automation_puppeteer | 100 | A Puppeteer binding |
automation_selenium | 100 | A Selenium, webdriver, driver or fxdriver binding |
automation_nightmare | 100 | The Nightmare binding |
automation_phantom | 100 | A PhantomJS binding |
automation_domauto | 100 | A DOM automation controller |
Hiding these is a one-line patch that every serious scraper applies. They are cheap, they catch the lazy majority, and they are the reason the other planes exist.
Figure 1 — five families of observation, one scorer. The beacon reports raw measurements and the server does the comparing, because the server holds the authoritative User-Agent and a client cannot suppress a comparison it never performs.
headless_rendererWebGL renderer is a software rasteriser
headless_notif_contradictionNotification permission says denied while the permissions API says prompt
headless_no_window_chromeNo browser-specific window object under a Chrome User-Agent
headless_zero_outerThe outer window width or height is zero
headless_no_languagesThe languages list is missing or empty
headless_no_pluginsZero plugins under a desktop Chrome User-Agent
headless_no_concurrencyHardware concurrency is zero or absent under a Chrome User-Agent
headless_screen_eq_availAvailable screen size exactly equals screen size on a desktop User-Agent
headless_no_chrome_runtimeNo runtime object under a Chrome User-Agent
Only the strong four — the renderer, the missing window object, the notification contradiction and the zero outer size — plus any automation marker set the headless boolean. The weak ones each have a real population of genuine humans behind them, and a boolean that is wrong for real visitors is worse than no boolean.
Detection
- The fingerprint cluster
- Automation & headless signals
- Browser claim probes
- Consistency & human evidence