fingerprintby Scraping Central
Menu

Free · Client + server view · No signup

The full browser fingerprint report

One page, every signal a website can read from your browser. Canvas, WebGL, audio, fonts, WebRTC, client hints, hardware, storage, TLS, and the exact HTTP request your server sees. Reflected back to you, side by side.

60+ signalsClient + serverNo loggingDeep-dive per topic

Running fingerprint checks in your browser…

User-Agent

The claim your browser opens with

A single string that names your browser, version, and OS. The first thing every anti-bot script reads, and one of the easiest to spoof, and get wrong.

Go deeper →

Running fingerprint checks in your browser…

Client hints

The structured UA of the future

Chromium sends UA info in a set of Sec-CH-UA-* headers and exposes it via navigator.userAgentData. Two views, one truth, they'd better agree.

Go deeper →

Client hints (JavaScript view)

From navigator.userAgentData

Requesting high-entropy client hints...

Client hints (server view)

From the Sec-CH-UA-* headers the browser sent to the server

Fetching /api/headers.php...

Canvas

Your GPU rendering, hashed

Draw text and shapes on a hidden canvas, read the pixels back, hash them. Stable across sessions, unique across GPUs, near-impossible to spoof without hardware.

Go deeper →

Running fingerprint checks in your browser…

WebGL

Your unmasked GPU vendor and model

WEBGL_debug_renderer_info exposes a string like ANGLE (NVIDIA, GeForce RTX 4060). If it says SwiftShader or llvmpipe, you're headless on a server.

Go deeper →

Running fingerprint checks in your browser…

Audio

Your DynamicsCompressor DSP signature

An offline audio context rendering a triangle wave through a compressor. The floating-point output is CPU-specific and cheap to hash.

Go deeper →

Audio fingerprint

Rendering 44100 offline samples...

Fonts

Which fonts you have installed

Probed with a width-comparison trick that needs no permission. The exact combination is often unique enough to identify you across sites.

Go deeper →

Font enumeration

Probing 134 fonts...

Hardware

Cores, memory, GPU tier, battery

What your browser lets scripts read about the machine: CPU cores, deviceMemory bucket, touch points, battery state, and the Web Bluetooth / USB / HID surfaces.

Go deeper →

Hardware profile

Reading signal in your browser...

Display

Resolution, DPI, color, refresh rate

Screen size, DPR, color depth, gamut, HDR, orientation, plus CSS media-query preferences and a rough measured refresh rate.

Go deeper →

Screen & display

Measuring refresh rate over ~300 ms...

Timezone & locale

Your time and language, in detail

IANA timezone, UTC offset, navigator.languages, locale, calendar system, numbering system, and first day of the week. The classic proxy-mismatch signal.

Go deeper →

Timezone & locale

Reading signal in your browser...

Media devices & codecs

Cameras, microphones, codecs

Device counts from enumerateDevices (no labels), plus the codec matrix from canPlayType. The codec answers narrow down browser + OS + version.

Go deeper →

Media devices & codecs

Reading signal in your browser...

Permissions

Every well-known permission state

Silent query for geolocation, notifications, camera, mic, midi, clipboard, sensors, and more. The set of supported names is browser-specific.

Go deeper →

Permissions

Querying browser permission states...

Storage

Which persistence surfaces you expose

Cookies, localStorage, sessionStorage, IndexedDB, Cache Storage, Service Worker, WebSQL, and the storage quota bucket.

Go deeper →

Storage APIs

Reading signal in your browser...

Plugins & MIME

What navigator.plugins says

Modern Chrome exposes the internal PDF Viewer here; Firefox and Safari expose different sets. Empty on a Chrome UA is a classic headless leak.

Go deeper →

Plugins & MIME types

Reading signal in your browser...

WebRTC leak

Are your LAN and public IPs exposed?

RTCPeerConnection gathers ICE candidates that reveal your LAN and post-NAT public IPs. Bypasses many VPN configurations.

Go deeper →

WebRTC leak check

Gathering ICE candidates (up to 2 s)...

HTTP headers

Exactly what you sent to the server

Server-side dump of the HTTP request your browser just made: standard headers, client hints, Sec-Fetch-* metadata, IP, and privacy signals.

Go deeper →

HTTP headers

Fetching /api/headers.php...

TLS & HTTP transport

Your TLS handshake, reflected back

Version, cipher suite, ALPN, and HTTP/1.1 vs HTTP/2 vs HTTP/3, whatever the front-end server chose to expose. Plus any JA3 / JA4 headers from the edge.

Go deeper →

TLS & HTTP transport

Fetching /api/tls.php...

How to read the report

The overview at the top runs 20 headless-detection heuristics and produces a bot score. Everything below it is a raw readout, grouped by signal category, so you can copy the value, compare it against the browser you're targeting, and find the exact mismatch. Each section links to a deep-dive page with more context, spoofing tips, and FAQs.

Client-side signals

User-Agent, canvas, WebGL, audio, fonts, hardware, screen, locale, permissions, storage, plugins, WebRTC. All read by JavaScript in your browser. No network calls beyond fetching /api/headers.php and /api/tls.php.

Server-side signals

HTTP request headers, client hints as sent on the wire, IP, TLS version and cipher, HTTP protocol version. Reflected back by our PHP endpoints; nothing is stored or logged.

Programmatic version

Hit /api/check from your HTTP client for a headers-only bot score. Good for curl / Python / Go without a browser.

What we don't have

Full JA3/JA4 unless the edge proxy publishes them, real TCP-layer probes (need kernel access), and any commercial IP reputation feed. For those, pair this tool with your proxy provider's dashboard.

Frequently asked questions

What is a browser fingerprint?

A browser fingerprint is the combination of signals a website can read from your browser, User-Agent, screen size, fonts, canvas rendering, WebGL hardware, timezone, language, plugins, and dozens of other properties. Together those signals are usually unique enough to identify a specific device, even with cookies disabled. Sites use this for tracking and for bot detection.

Why is my scraper being detected even with proxies?

Proxies only change your IP. They don't change your fingerprint. If your headless browser still reports navigator.webdriver=true, missing chrome.runtime, an unusual WebGL renderer like 'Google SwiftShader', or a timezone that doesn't match the proxy's country, you're flagged regardless of how clean the IP is. Run the test on this page to see what you're actually leaking.

How do I make my headless browser undetectable?

Start with stealth plugins (puppeteer-extra-plugin-stealth, playwright-stealth, undetected-chromedriver). Then patch the obvious leaks: spoof navigator.webdriver, fix the WebGL UNMASKED_RENDERER_WEBGL string, match timezone and language to your proxy, ensure window.chrome exists, and check that Notification.permission isn't stuck on 'denied'. Test after each fix using this page.

Can a website really see my GPU?

Yes, via the WebGL UNMASKED_RENDERER_WEBGL extension, sites can read your real GPU vendor and model. Headless browsers running in cloud VMs typically report things like 'Google SwiftShader' or 'llvmpipe', which is an instant bot signal. Spoofing this requires patching the WebGL extension at the driver level.

What is canvas fingerprinting?

A site draws text and shapes onto a hidden HTML canvas, then reads back the pixel data and hashes it. Tiny differences in your GPU, drivers, anti-aliasing, and font rendering produce a stable hash unique to your hardware. Two clean Chrome installs on identical OSes will still produce different hashes if the GPUs differ.

Does this tool send my fingerprint to a server?

Almost entirely client-side. Canvas, WebGL, audio, fonts, WebRTC, hardware, screen, permissions, storage, plugins, timezone, and locale all run in your browser and never leave it. Two sections do call the server, /http-headers and /tls, because HTTP request headers and TLS handshake data aren't visible to JavaScript. Those endpoints (/api/headers.php and /api/tls.php) reflect the request back to you and store nothing.

Is browser fingerprinting legal?

Yes, but disclosure is regulated under GDPR (EU) and similar privacy laws, sites using fingerprinting for tracking generally need consent. For bot detection (your case as a scraper) it's universal and unregulated.

How do I generate a fake but realistic User-Agent?

Don't randomize blindly, bot detectors check whether your User-Agent string matches your other signals. A Windows UA with a macOS timezone and Linux WebGL renderer is a giveaway. Pick a real, current UA (Chrome on Windows is safest), then make sure platform, languages, timezone, and screen size all match a real machine with that UA. The /user-agent page on this site shows what your current UA actually claims.

Learning web scraping?

Foundations, static scraping, dynamic web, and APIs. A full curriculum on getting past bot detection.

Start the curriculum →

AI Summary

Summarize this page in your favorite LLM