What Is Browser Fingerprinting? How Websites Track You Without Cookies
Browser fingerprinting is a tracking technique that identifies and tracks users by collecting information about their web browser configuration, hardware, and software settings. Unlike cookies, which store a unique identifier on your device, browser fingerprinting creates a unique profile based on dozens of attributes that together form a digital “fingerprint” — without storing anything on your device.
This makes browser fingerprinting far more persistent and difficult to block than traditional tracking methods. You can clear cookies, but you can’t easily change your browser’s fingerprint.
Table of Contents
- How Browser Fingerprinting Works
- Types of Browser Fingerprinting
- What Data Is Collected
- Why Websites Use Browser Fingerprinting
- Browser Fingerprinting and Proxies
- How to Check Your Browser Fingerprint
- Techniques to Reduce Fingerprinting
- Anti-Detect Browsers
- The Future of Browser Fingerprinting
- FAQ
How Browser Fingerprinting Works
When you visit a website, your browser automatically shares a wealth of information with the server. Individually, each data point is innocuous. But combined, they create a surprisingly unique identifier.
Here’s a simplified example of how it works:
// A website runs JavaScript to collect fingerprint data
const fingerprint = {
userAgent: navigator.userAgent,
language: navigator.language,
screenResolution: `${screen.width}x${screen.height}`,
colorDepth: screen.colorDepth,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
plugins: Array.from(navigator.plugins).map(p => p.name),
canvas: getCanvasFingerprint(),
webgl: getWebGLFingerprint(),
audioContext: getAudioFingerprint(),
fonts: getInstalledFonts(),
hardwareConcurrency: navigator.hardwareConcurrency,
deviceMemory: navigator.deviceMemory,
touchSupport: navigator.maxTouchPoints,
doNotTrack: navigator.doNotTrack,
};
// Hash all data into a single identifier
const hash = hashFunction(JSON.stringify(fingerprint));
// Result: "a8f5e7d3c2b1..." - unique to your browser configurationResearch by the Electronic Frontier Foundation (EFF) found that 83.6% of browsers had a unique fingerprint, and for browsers with Flash or Java enabled, the uniqueness rate rose to 94.2%.
Types of Browser Fingerprinting
Canvas Fingerprinting
The most common technique. Websites draw a hidden image using the HTML5 Canvas API. Due to differences in GPU, graphics driver, operating system, and font rendering, the resulting image varies slightly across devices.
function getCanvasFingerprint() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// Draw text and shapes
ctx.textBaseline = 'top';
ctx.font = '14px Arial';
ctx.fillStyle = '#f60';
ctx.fillRect(125, 1, 62, 20);
ctx.fillStyle = '#069';
ctx.fillText('Browser Fingerprint', 2, 15);
ctx.fillStyle = 'rgba(102, 204, 0, 0.7)';
ctx.fillText('Browser Fingerprint', 4, 17);
// Convert to data URL - this will differ across devices
return canvas.toDataURL();
}Even though the same text and shapes are drawn, the pixel-level output varies due to hardware and software differences — creating a unique fingerprint.
WebGL Fingerprinting
WebGL (Web Graphics Library) exposes detailed information about the GPU:
function getWebGLFingerprint() {
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl');
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
return {
vendor: gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL),
renderer: gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL),
extensions: gl.getSupportedExtensions(),
maxTextureSize: gl.getParameter(gl.MAX_TEXTURE_SIZE),
maxViewportDims: gl.getParameter(gl.MAX_VIEWPORT_DIMS),
};
}
// Example output: { vendor: "Google Inc. (NVIDIA)", renderer: "ANGLE (NVIDIA GeForce RTX 4090)..." }AudioContext Fingerprinting
The Web Audio API processes audio signals slightly differently across devices:
function getAudioFingerprint() {
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const oscillator = audioContext.createOscillator();
const analyser = audioContext.createAnalyser();
const gain = audioContext.createGain();
const scriptProcessor = audioContext.createScriptProcessor(4096, 1, 1);
gain.gain.value = 0; // Mute the output
oscillator.type = 'triangle';
oscillator.connect(analyser);
analyser.connect(scriptProcessor);
scriptProcessor.connect(gain);
gain.connect(audioContext.destination);
// Capture and hash the audio processing result
oscillator.start(0);
// ... process and hash the output
}Font Fingerprinting
The set of fonts installed on your system is surprisingly unique:
function detectFont(fontName) {
const testString = 'mmmmmmmmmmlli';
const testSize = '72px';
const baseFonts = ['monospace', 'sans-serif', 'serif'];
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const baseWidths = baseFonts.map(font => {
ctx.font = `${testSize} ${font}`;
return ctx.measureText(testString).width;
});
return baseFonts.some((baseFont, i) => {
ctx.font = `${testSize} '${fontName}', ${baseFont}`;
return ctx.measureText(testString).width !== baseWidths[i];
});
}
// Test for hundreds of fonts
const fontsToTest = ['Arial', 'Verdana', 'Calibri', 'Consolas', ...];
const installedFonts = fontsToTest.filter(detectFont);TLS Fingerprinting (JA3/JA4)
This operates at the network level, before JavaScript even runs. When your browser establishes a TLS connection, the specific cipher suites, extensions, and their ordering create a unique fingerprint:
# JA3 fingerprint components:
TLSVersion + Ciphers + Extensions + EllipticCurves + EllipticCurvePointFormats
# Example JA3 hash:
# Chrome 120: e7d705a3286e19ea42f587b344ee6865
# Firefox 121: b32309a26951912be7dba376398abc3bThis is particularly relevant for web scraping because anti-bot services use TLS fingerprints to detect automated tools like Python’s requests library, which has a completely different TLS fingerprint than a real browser.
What Data Is Collected
A comprehensive browser fingerprint can include 50+ attributes:
Browser Information
- User agent string
- Browser name and version
- Supported MIME types
- Installed plugins and extensions
- Do Not Track setting
- Cookie and JavaScript enabled status
System Information
- Operating system and version
- CPU architecture and core count
- RAM amount (approximate)
- Screen resolution and color depth
- Available screen area (minus taskbar)
- Device pixel ratio
- Touch support and max touch points
Graphics
- Canvas rendering hash
- WebGL vendor and renderer
- Supported WebGL extensions
- GPU model (via WebGL debug info)
Fonts and Media
- Installed fonts list
- Audio processing signature
- Supported media codecs
- Speech synthesis voices
Network and Location
- Timezone and UTC offset
- Language preferences
- Connection type (via Network Information API)
- IP address (though this changes with proxies)
Behavioral
- Typing patterns
- Mouse movement characteristics
- Scroll behavior
- Touch gesture patterns
Why Websites Use Browser Fingerprinting
Fraud Detection
Banks and payment processors use fingerprinting to detect account takeovers. If someone logs into your account from a completely different browser fingerprint, it triggers additional security checks.
Bot Detection
Anti-bot services like Cloudflare, Akamai, and PerimeterX use fingerprinting to distinguish human visitors from automated scrapers. This is why using headless browsers without proper fingerprint management often fails.
Ad Tracking
After cookie restrictions (Safari’s ITP, Firefox’s ETP, Chrome’s Privacy Sandbox), advertisers increasingly rely on fingerprinting to track users across sites for targeted advertising.
Account Security
Platforms detect multiple accounts operated by the same person by comparing browser fingerprints. This is a major challenge for social media managers using social media proxies.
Content Personalization
Some sites use fingerprinting for legitimate personalization — remembering preferences without cookies.
Browser Fingerprinting and Proxies
Here’s the critical insight: proxies change your IP address but do NOT change your browser fingerprint. This is why using proxies alone is often insufficient for:
- Managing multiple accounts (platforms see the same fingerprint across accounts)
- Avoiding bot detection (anti-bot systems check fingerprint + IP together)
- Maintaining anonymity (your fingerprint persists even when your IP changes)
The Fingerprint + Proxy Matrix
| Scenario | IP | Fingerprint | Detection Risk |
|---|---|---|---|
| No proxy | Same | Same | Easily tracked |
| Proxy only | Different | Same | Partially protected |
| Anti-detect browser only | Same | Different | Partially protected |
| Proxy + Anti-detect browser | Different | Different | Best protection |
For maximum protection, combine residential or mobile proxies with an anti-detect browser that manages fingerprints for each profile.
How to Check Your Browser Fingerprint
Several tools let you see what information your browser exposes:
- AmIUnique — Academic research project showing your fingerprint uniqueness
- EFF’s Cover Your Tracks — Tests tracking and fingerprinting protection
- Our Browser Fingerprint Tester — Check your browser’s fingerprint attributes
Testing Your Fingerprint Programmatically
from playwright.sync_api import sync_playwright
def check_fingerprint():
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto('https://amiunique.org/fingerprint')
# Extract fingerprint uniqueness
result = page.text_content('.unique-result')
print(f"Fingerprint uniqueness: {result}")
browser.close()
check_fingerprint()Techniques to Reduce Fingerprinting
Browser-Level Protection
Firefox (Enhanced Tracking Protection) Firefox includes built-in fingerprinting protection:
- Go to Settings → Privacy & Security → Enhanced Tracking Protection → Strict
- This blocks known fingerprinting scripts
Tor Browser The Tor Browser is specifically designed to make all users look identical:
- Uniform window size
- Restricted JavaScript APIs
- Disabled WebGL and Canvas APIs
- Same fonts and plugins across all users
Brave Browser Brave randomizes certain fingerprint attributes:
- Canvas and WebGL outputs are randomized per-session
- Audio fingerprinting is blocked
- Font fingerprinting is limited
Extension-Based Protection
Canvas Blocker — Randomizes canvas fingerprint
Trace — Modifies multiple fingerprint vectors
Privacy Badger — Blocks known fingerprinting trackers
uBlock Origin — Can block fingerprinting scriptsCode-Level Countermeasures for Developers
// Overriding navigator properties (for testing/development)
Object.defineProperty(navigator, 'hardwareConcurrency', {
get: () => 4 // Always report 4 cores
});
Object.defineProperty(navigator, 'deviceMemory', {
get: () => 8 // Always report 8GB
});
// Intercepting Canvas fingerprinting
const originalToDataURL = HTMLCanvasElement.prototype.toDataURL;
HTMLCanvasElement.prototype.toDataURL = function(type) {
const context = this.getContext('2d');
// Add slight noise to the canvas
const imageData = context.getImageData(0, 0, this.width, this.height);
for (let i = 0; i < imageData.data.length; i += 4) {
imageData.data[i] += Math.random() * 2 - 1; // ±1 to red channel
}
context.putImageData(imageData, 0, 0);
return originalToDataURL.apply(this, arguments);
};Anti-Detect Browsers
Anti-detect browsers are the most comprehensive solution for managing browser fingerprints. They let you create multiple browser profiles, each with a completely unique fingerprint.
Popular options include:
- Multilogin — Pioneer in the space, enterprise-grade
- GoLogin — Affordable alternative with cloud profiles
- AdsPower — Popular for social media management
- Incogniton — Free tier available
These tools manage:
- Canvas and WebGL fingerprints
- User agent and platform info
- Screen resolution and color depth
- Timezone and language
- Font lists
- WebRTC leak prevention
- Proxy assignment per profile
Read our detailed anti-detect browser guide for setup tutorials.
Browser Fingerprinting in Practice: Real-World Examples
How Social Media Platforms Use Fingerprinting
Platforms like Facebook, Instagram, and TikTok use browser fingerprinting extensively:
- Account linking — Detecting multiple accounts operated by the same person by matching fingerprints
- Ban evasion detection — When a banned user creates a new account, their fingerprint connects them to the banned account
- Suspicious login detection — Flagging logins from a dramatically different fingerprint
- Bot detection — Identifying automated tools that lack realistic fingerprint attributes
This is why managing multiple social media accounts requires both unique proxies and unique fingerprints per account.
How E-Commerce Sites Use Fingerprinting
Online retailers leverage fingerprinting for:
- Fraud prevention — Flagging orders from fingerprints associated with chargebacks
- Price personalization — Some retailers show different prices based on user profiles (controversial but real)
- Bot detection — Identifying web scrapers and sneaker bots
- Coupon abuse prevention — Detecting users creating multiple accounts for repeat discounts
How Ad Networks Use Fingerprinting
With third-party cookies declining, fingerprinting has become critical for:
- Cross-site tracking — Following users across different websites without cookies
- Attribution — Connecting ad views to conversions
- Frequency capping — Limiting how many times a user sees an ad
- Audience building — Creating targeting segments based on browsing behavior
The Entropy of Fingerprint Attributes
Not all fingerprint attributes contribute equally to identification. Here’s how much information each attribute typically provides:
| Attribute | Entropy (bits) | Uniqueness Contribution |
|---|---|---|
| User Agent | 10-12 bits | High |
| Installed Fonts | 12-15 bits | Very High |
| Canvas Hash | 8-12 bits | High |
| Screen Resolution | 4-6 bits | Medium |
| Timezone | 3-4 bits | Low-Medium |
| Language | 2-4 bits | Low |
| Color Depth | 1-2 bits | Low |
| WebGL Renderer | 10-14 bits | Very High |
| Audio Fingerprint | 6-10 bits | High |
With just 33 bits of entropy, you can uniquely identify every person on Earth (2^33 > 8 billion). Most browser fingerprints contain 40-60+ bits of entropy, making them extremely unique identifiers.
The Future of Browser Fingerprinting
Google’s Privacy Sandbox
Google is deprecating third-party cookies in Chrome and replacing them with privacy-preserving APIs. However, this may inadvertently increase reliance on fingerprinting for tracking.
Client Hints
The User-Agent Client Hints API is replacing the traditional user agent string with a more controlled disclosure mechanism. Websites must explicitly request information, giving browsers more control over what’s shared.
Increasing Browser Protections
Browsers are progressively limiting fingerprinting vectors:
- Safari restricts Canvas, WebGL, and font enumeration
- Firefox blocks known fingerprinting scripts
- Chrome plans to reduce user agent information
Fingerprinting Arms Race
As browsers add protections, fingerprinters develop new techniques:
- Network timing fingerprints
- Battery API fingerprinting (now deprecated in most browsers)
- Accelerometer/gyroscope fingerprinting on mobile
- CSS rendering differences
This cat-and-mouse dynamic will continue as privacy regulations tighten globally.
FAQ
Is browser fingerprinting legal?
In most jurisdictions, browser fingerprinting falls into a legal gray area. Under GDPR, fingerprinting is considered a form of tracking that requires user consent, similar to cookies. The ePrivacy Directive also covers fingerprinting. However, enforcement varies, and many sites use fingerprinting without explicit consent. For businesses, it’s best to disclose fingerprinting in privacy policies and provide opt-out mechanisms.
Can I completely prevent browser fingerprinting?
No single method can completely prevent fingerprinting. You can reduce your uniqueness by using privacy-focused browsers (Tor, Brave), disabling JavaScript (which breaks most sites), or using anti-detect browsers. The Tor Browser comes closest to preventing fingerprinting by making all users appear identical, but it’s slow and many sites block Tor traffic.
Do VPNs protect against browser fingerprinting?
No. VPNs only change your IP address and encrypt your traffic. They don’t modify any browser fingerprint attributes. A website can still identify you through your unique combination of browser settings, hardware characteristics, and rendering differences even when you’re using a VPN. You need an anti-detect browser or fingerprint-spoofing tools alongside a VPN or proxy.
How unique is my browser fingerprint?
Studies show that 80-95% of browsers have a unique fingerprint. The combination of just a few attributes (user agent, screen resolution, timezone, installed fonts, canvas hash) is usually enough to create a unique identifier. You can check your uniqueness at AmIUnique or our browser fingerprint tester.
Does incognito mode prevent fingerprinting?
No. Incognito/private mode only prevents local storage of cookies, history, and form data. It does not change any fingerprint attributes. Your browser still exposes the same hardware, rendering, and configuration information in incognito mode as in normal mode.
Concerned about your browser fingerprint? Try our Browser Fingerprint Tester to see exactly what your browser reveals, or explore anti-detect browser guides for setup tutorials.
- 10 Myths About Web Scraping That Need to Die in 2026
- Are Proxies Legal? Understanding the Law Around Proxy Servers
- Best Proxy Providers 2026: Ultimate Comparison Guide
- 15 Best Web Scraping Tools in 2026: Expert Comparison
- 403 Forbidden Error: What It Means & How to Fix It
- 407 Proxy Authentication Required: Fix Guide
Related Reading
- 10 Myths About Web Scraping That Need to Die in 2026
- Are Proxies Legal? Understanding the Law Around Proxy Servers
- Best Proxy Providers 2026: Ultimate Comparison Guide
- 15 Best Web Scraping Tools in 2026: Expert Comparison
- 403 Forbidden Error: What It Means & How to Fix It
- 407 Proxy Authentication Required: Fix Guide