Hardware fingerprint
What Your Browser Says About Your Hardware
CPU cores, memory bucket, GPU tier, touch points, battery state, and the Web Bluetooth / USB / Serial / HID surfaces.
Hardware profile
Reading signal in your browser...
The hardware signals anti-bot vendors watch
- Cores = 0. Headless Chrome on some cloud shapes reports zero; instant bot.
- Cores = 1. Extremely rare on real devices in 2026; heavy scrutiny.
- Memory bucket = 0.25 GB on a desktop UA. Impossible; misconfigured container.
- maxTouchPoints = 0 on a mobile UA. Contradiction; something is spoofed.
- Battery reported on a Firefox UA. Impossible; you're not really Firefox.
Consistent hardware profiles for scrapers
Pick a profile that matches your target audience. A modern Windows laptop is: 8 cores, 8 GB memory (bucketed), 0 touch points, discrete or integrated GPU. A modern iPhone is: 6 cores, no deviceMemory (Safari), 5 touch points, Apple GPU. Mixing signals across those profiles is what gets you caught.
Frequently asked questions
→What is navigator.hardwareConcurrency?
The number of logical CPU cores available to the browser. Real machines report values like 4, 8, 12, or 16. Zero is a classic headless leak. Extremely high values (64+) usually mean a cloud VM with an oversized instance, unusual on the general web.
→Why does deviceMemory only show a few values?
It's bucketed to 0.25, 0.5, 1, 2, 4, or 8 GB by spec, to reduce entropy. A real 32 GB machine reports 8. But it's still a useful signal, and Firefox / Safari don't expose it at all, so its presence identifies you as Chromium-family.
→Is the Battery API still available?
In Chromium and its derivatives, yes. Firefox removed it in 2016 and Safari never shipped it, both citing fingerprinting concerns. If a Firefox UA reports a Battery API present, you're looking at a spoofed / instrumented browser.
→What can Web Bluetooth / USB / HID reveal?
Their availability alone hints at the browser + platform. Web Bluetooth ships on desktop Chromium (with the OS-level toggle enabled) and is absent on Firefox. Web Serial and WebHID are Chromium-only. These are cheap, coarse platform signals.
→How do I spoof hardware for scraping?
hardwareConcurrency and deviceMemory are read-only. You can override them at page load via Object.defineProperty, and stealth plugins do exactly that. Match them to a plausible profile: e.g. 8 cores + 8 GB for a modern laptop, don't set 128 cores.