Web Scraping APIs

What Is Browser Fingerprinting?

What Is Browser Fingerprinting? — conceptual illustration
On this page

Browser fingerprinting is a technique that identifies and tracks a visitor by combining dozens of small, observable characteristics of their browser and device into a single distinctive signature. Think of it like recognizing someone by their height, voice, and gait rather than their name tag. Unlike cookies, a fingerprint is built from data the browser exposes by default — User-Agent (the browser's self-description), installed fonts, canvas and WebGL rendering quirks (tiny differences in how your hardware draws graphics), audio context output, screen resolution, TLS handshake order (TLS is the encryption layer behind https) — and persists even when the user clears cookies or switches to incognito mode.

Quick facts

Also known asDevice fingerprinting, passive fingerprinting
Common signalsCanvas, WebGL, AudioContext, fonts, TLS/JA4, HTTP/2 frames
Used byCloudflare, DataDome, PerimeterX, Akamai, fraud-prevention vendors
Cookie-freeYes — fingerprints survive incognito mode and cookie clearing

How browser fingerprinting works

Sites collect fingerprint data through two channels. Active fingerprinting runs JavaScript in the browser to read APIs that report details about your setup: `navigator.userAgent`, `screen.width`, `Intl.DateTimeFormat().resolvedOptions()` (your timezone and locale), a hashed result from drawing a hidden test image (canvas), the name of your graphics chip (WebGL renderer), AudioContext outputs, and the list of installed fonts. Passive fingerprinting reads what the browser sends automatically, without being asked: the order of HTTP/2 frames, the cipher and extension order in the TLS ClientHello — the first message your browser sends to set up encryption — which produces the JA3/JA4 fingerprint, plus the exact casing and order of HTTP headers. Each signal alone is weak — millions of users share the same User-Agent — but combine fifteen of them and you have a 30-bit identifier that's unique among hundreds of millions of visitors. (30 bits means it can tell apart roughly a billion possibilities.)

Why fingerprinting matters for scraping

Fingerprinting is how modern anti-bot systems tell a real Chrome user from Playwright pretending to be one. Even if your scraper rotates IPs, sets a real User-Agent, and uses a headless browser (a browser running with no visible window), mismatches between the layers leak the truth. The giveaway is always an inconsistency. A Linux Chrome User-Agent paired with a Windows TLS fingerprint is a tell. A canvas hash that matches none of the millions seen from real Chrome installs is a tell. A `navigator.plugins` array of length zero in a browser that should have plugins is a tell. Anti-bot scoring engines add up these signals and decide whether to serve the page, challenge with a CAPTCHA, or block outright.

Why fingerprint consistency is hard to achieve

A single signal like the User-Agent tells only part of the story. What fingerprinting systems actually evaluate is whether all the signals agree with each other: whether the TLS fingerprint matches the browser named in the User-Agent, whether the canvas hash matches what a real installation of that browser produces, whether the timezone matches the network's location, and whether the language headers line up. When automation tooling reports values that don't naturally occur together, the inconsistency is what stands out. Keeping every layer internally consistent across a real browser stack is genuinely difficult engineering — which is why fingerprinting-aware browser-automation services exist. For authorized workflows on sites you are permitted to access, they maintain consistent, real-browser configurations so the layers stay coherent rather than ad hoc.

Privacy and ethical context

Fingerprinting was originally developed for fraud prevention — banks use it to detect stolen credentials being replayed from a new device. It's also widely used for ad tracking, which has drawn regulatory pushback under GDPR and the ePrivacy Directive (EU privacy laws). Browsers are pushing back too: Safari's ITP, Firefox's resistFingerprinting mode, and Chrome's Privacy Sandbox all aim to flatten the most identifying signals — making everyone look more alike. For scraping, this is good news — as real users become harder to tell apart, fingerprints become harder for sites to rely on.

Code example

javascript
// A few of the signals a fingerprinting script collects and hashes.
const signals = {
  userAgent: navigator.userAgent,
  platform: navigator.platform,
  languages: navigator.languages,
  hardwareConcurrency: navigator.hardwareConcurrency,
  deviceMemory: navigator.deviceMemory,
  timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
  screen: [screen.width, screen.height, screen.colorDepth],
  // Canvas, WebGL, fonts and audio add many more entropy bits.
};

// These are combined into one stable hash that survives cookie clearing.
const fingerprint = JSON.stringify(signals);

Related terms

What Is Anti-Bot Detection?
Anti-bot detection is the set of techniques websites use to tell automated traffic apart from real human visitors — and then block, challeng…
What Is Cloudflare Turnstile?
Cloudflare Turnstile is a service that checks whether a visitor is a real human, but without showing the kind of puzzle a normal CAPTCHA doe…
What Is a Headless Browser?
A headless browser is a real web browser — Chrome, Firefox, or WebKit — that runs without a visible window, driven entirely by code instead …
What Is a Web Scraping API?
A web scraping API is a hosted HTTP service that visits a web page for you and hands back the result — rendered HTML, JSON, or already-parse…
What Is an Anti-Scraping Mechanism?
An anti-scraping mechanism is any technical control a website uses to detect, slow down, or block automated requests (bots) instead of real …
What Is WebGL Fingerprinting?
WebGL fingerprinting reads identifying information directly from the GPU. WebGL is the browser feature that lets web pages draw 3D graphics …
What Is AudioContext Fingerprinting?
AudioContext fingerprinting plays a silent waveform through the Web Audio API, then reads back the resulting floating-point samples and hash…
What Is Function.toString() Inspection?
Function.prototype.toString() inspection is a technique anti-bot scripts use to identify JavaScript functions that have been modified at run…
What Is a WebRTC IP Leak?
A WebRTC IP leak is when your browser quietly reveals your real IP address — even though you set up a proxy to hide it. It is the most-overl…
What Is WASM Fingerprinting?
WebAssembly (WASM) fingerprinting is a newer anti-bot technique that identifies a browser by measuring how its actual CPU behaves, instead o…
What Is Font Fingerprinting?
Font fingerprinting identifies a device by working out which fonts are installed on it and measuring how that device draws text. The idea is…
What Is Math & JS Engine Fingerprinting?
Math fingerprinting identifies a browser by running math functions (sin, cos, tan, exp, log, pow) on fixed inputs and reading the very last …
What Is Fingerprint Lie Detection?
Fingerprint lie detection is the practice of verifying that the signals a browser reports are internally consistent and untampered, rather t…
What Is Timing & Cache Side-Channel Fingerprinting?
Timing-based fingerprinting uses high-resolution clocks to measure how long operations take, turning microarchitectural and rendering behavi…
What Is Fingerprint Clustering?
Fingerprint clustering is the practice of grouping fingerprints from millions of real visitors by similarity, then rejecting any new visitor…
What Is JA4 Fingerprinting?
JA4 is a way to identify a browser by the fingerprint of its TLS handshake — TLS being the encryption layer behind https. It replaced the ol…
What Is Fingerprint Entropy?
Fingerprint entropy is a way to measure how much a browser attribute gives away about who you are, counted in bits. Think of entropy as "how…
How Does Deobfuscation Work?
Deobfuscation is the process of turning deliberately unreadable code back into something a human can read and reason about. Obfuscators scra…
What Is WebGPU Fingerprinting?
WebGPU fingerprinting reads identifying data from the modern navigator.gpu API. WebGPU is the newest browser standard for talking to your GP…
What Is Client Hints Fingerprinting?
User-Agent Client Hints (UA-CH) are a set of structured HTTP headers plus a matching JavaScript API that report the same browser and operati…
What Is a Timezone / IP Mismatch?
A timezone/IP mismatch is when the location a browser claims and the location of its IP address disagree. Anti-bot systems (the software sit…
What Is navigator.webdriver?
navigator.webdriver is a standardized boolean that returns true when the browser is being controlled by automation. Think of it as a built-i…
What Is JA3 Fingerprinting?
JA3 is a method for fingerprinting a TLS client by hashing the fields of its Client Hello. TLS is the encryption layer behind https, and the…
What Is HTTP/3 / QUIC Fingerprinting?
HTTP/3 / QUIC fingerprinting identifies a client from the QUIC transport layer that HTTP/3 runs on. QUIC is the modern transport beneath HTT…
What Is Hardware Fingerprinting?
Hardware fingerprinting reads device capability signals - CPU cores, RAM, and screen metrics - that JavaScript exposes directly. These are v…
What Is CDP Detection?
CDP detection is the family of techniques anti-bot scripts use to tell that a browser is being driven through the Chrome DevTools Protocol (…
What Is Incognito Detection?
Incognito detection is the set of techniques that reveal whether a browser is in private / incognito mode. Private mode is the browser featu…
What Is Media Devices Fingerprinting?
Media devices fingerprinting reads the list of cameras, microphones, and speakers a browser reports via navigator.mediaDevices.enumerateDevi…
What Is Speech Synthesis Fingerprinting?
Speech synthesis fingerprinting reads the list of text-to-speech voices exposed by window.speechSynthesis.getVoices(). "Text-to-speech" mean…
What Is Stack Depth Fingerprinting?
Stack depth fingerprinting measures the maximum JavaScript recursion depth a browser allows before throwing a RangeError: Maximum call stack…
What Is CSS Media Query Fingerprinting?
CSS media query fingerprinting reads operating-system and device preferences through window.matchMedia(). A media query is a yes/no question…
What Is Screen Resolution Fingerprinting?
Screen resolution fingerprinting reads the display measurements a browser reports - screen.width/height, availWidth/availHeight, colorDepth,…
How Do You Devirtualize an Obfuscated JavaScript VM?
Devirtualization is the process of recovering a readable program from JavaScript that has been compiled into a tiny interpreter — a virtual …
What Is a User Agent?
A user agent is a short text string a client sends in the User-Agent HTTP header to tell a server what software is making the request. Every…

Concept map

How Browser Fingerprinting connects

The terms most directly tied to this one. Hover a node to see its neighbours, click to preview, drag to rearrange.

0 terms · 0 connections
You are here · Web Scraping APIs
Building map…

Frequently asked questions

How unique is a browser fingerprint?

EFF's Cover Your Tracks finds that 80–90% of browsers have a fingerprint that's unique within their visitor set — meaning no one else in that group looks the same. The exact uniqueness depends on how many signals are collected; fifteen well-chosen signals are enough to identify most users.

Does using a VPN change my fingerprint?

A VPN changes your IP address, not your fingerprint. The canvas hash, TLS signature, screen resolution, and fonts stay exactly the same. Sites can link the VPN IP to the unchanged fingerprint, and the mismatch between location and device often gets you flagged.

Why can't a single signal be changed to hide automation?

Any one signal can be set to an arbitrary value, but anti-bot vendors check whether the signals agree with each other. Changing the User-Agent without TLS, canvas, WebGL, and Audio also lining up produces a combination that doesn't exist on any real device — which is itself a strong signal that the request is automated.

What's a TLS fingerprint?

It's the JA3 or JA4 hash derived from the order and contents of the TLS ClientHello — the first packet a client sends to start an encrypted connection. Chrome, Firefox, Safari, curl, and Python's requests each send a recognizably different ClientHello, so sites use it to spot non-browser clients no matter what User-Agent they claim.

Last updated: 2026-05-31