Automation & headless signals

The codes the beacon reports when a browser is being driven by software or has no screen.

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.

Only listed hostnames contribute signals

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.

01 · Definitive automation markers
CodeWeightWhat it means
automation_webdriver100The navigator webdriver flag is true
automation_cdc100chromedriver’s marker property on window or document
automation_playwright100A Playwright binding
automation_puppeteer100A Puppeteer binding
automation_selenium100A Selenium, webdriver, driver or fxdriver binding
automation_nightmare100The Nightmare binding
automation_phantom100A PhantomJS binding
automation_domauto100A DOM automation controller
Presence is certainty. Absence means nothing at all.

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.

02 · Headless-browser tells
automationmarkersheadlesstellsengine claimprobesconsistencycross-checkshumanpresenceTHE SCORER OWNS THE VERDICTa code is an observation, never a verdict on its own automation markersheadless tellsengine claim probesconsistency cross-checkshuman presenceTHE SCORER OWNS THEVERDICTa code is an observation, never averdict on its own

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_renderer

WebGL renderer is a software rasteriser

Weight
90
Why the weight is what it is
A consumer desktop browser with no GPU is a container
headless_notif_contradiction

Notification permission says denied while the permissions API says prompt

Weight
45
Why the weight is what it is
No real profile is in both states at once
headless_no_window_chrome

No browser-specific window object under a Chrome User-Agent

Weight
40
Why the weight is what it is
Strong, but trivially faked
headless_zero_outer

The outer window width or height is zero

Weight
40
Why the weight is what it is
Also legitimately zero in some cross-origin frames
headless_no_languages

The languages list is missing or empty

Weight
25
Why the weight is what it is
Real browsers always populate it
headless_no_plugins

Zero plugins under a desktop Chrome User-Agent

Weight
20
Why the weight is what it is
Modern Chrome exposes five PDF entries
headless_no_concurrency

Hardware concurrency is zero or absent under a Chrome User-Agent

Weight
15
Why the weight is what it is
Some privacy-focused browsers clamp this value
headless_screen_eq_avail

Available screen size exactly equals screen size on a desktop User-Agent

Weight
10
Why the weight is what it is
Also true of Linux kiosks and full-screen presentations
headless_no_chrome_runtime

No runtime object under a Chrome User-Agent

Weight
10
Why the weight is what it is
Its presence on ordinary pages has changed across releases

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

Loghound is open source and MIT licensed. Questions about the Opensolr half — the account, the indexes, the plan — go to opensolr.com/contact; questions about the software itself belong on GitHub.

Loghound Documentation