Back to blog

What Is Browser Fingerprinting? How It Works, Techniques, and How To Prevent It

Share article:

Browser fingerprinting identifies and tracks your browser by its configuration, not by anything stored on your device. It works even when cookies are cleared or blocked. For users, that makes it a persistent privacy concern; for developers running automation, it's an access obstacle. This article covers how it works, the techniques, why sites use it, and how to reduce yours.

An image of a purple background with colored lines going across, a square with a fingerprint icon in the middle

TL;DR

  • Browser fingerprinting identifies you by combining configuration and hardware signals your browser exposes, like fonts, screen size, and GPU behavior, rather than storing anything on your device, so clearing cookies doesn't affect it.
  • Sites collect these signals through JavaScript and HTTP headers, hash them into one identifier, and match that hash on your next visit, tolerating small changes as your browser updates.
  • Techniques like canvas, WebGL, AudioContext, and font enumeration each read a different browser capability, and combining several of them narrows down who you could possibly be.
  • Sites use fingerprinting for both legitimate purposes, fraud prevention and bot detection, and less welcome ones, advertising and access control, so the same signal that stops a stolen card also flags a legitimate scraper.
  • Reducing your fingerprint means blending into a crowd rather than standing out, and for automation specifically, means keeping your browser's fingerprint and your proxy's geography consistent with each other.

What is browser fingerprinting?

Browser fingerprinting is when a website runs a script that reads the configuration and hardware signals your browser exposes, things like screen size, installed fonts, timezone, and GPU quirks, and combines them into a single identifier. From that point on, the site uses that identifier to recognize you on future visits. No cookie required, no popup to click through; it just works off what your browser was already telling it.

Browser fingerprinting is stateless. Cookies get stored on your device, which is why clearing them in your settings actually does something. A fingerprint doesn't work that way. Nothing gets written to your machine. It's recalculated from scratch every time you show up, built from whatever your browser happens to be broadcasting about itself right now. There's no file to delete, because there was never a file to begin with.

Browser fingerprinting is the browser-shaped slice of a bigger idea, device fingerprinting, which covers anything a device gives away, not just what a browser tab exposes. This one sticks to the browser side, since that's the part every website actually interacts with.

None of this is some sneaky leak either. Browsers expose configuration data because they have to. A page needs your screen resolution to lay itself out, your timezone to show the right time, your installed fonts to render text without falling back to Comic Sans. Fingerprinting just repurposes information that was always heading out the door for a completely unrelated reason.

And no single piece of it gives you away on its own. Plenty of people share your timezone. Plenty share your screen resolution too. It's the combination that narrows things down; each extra signal shrinks the pool of people who could plausibly be you, until you're the only one left standing in it. That's entropy, in the least mathy way to put it: more distinct details, smaller crowd to hide in.

How browser fingerprinting works

Strip away the mystique, and it's a pretty basic four-step loop, run every single time you show up:

  • Collect. A script runs in your browser and asks a bunch of APIs to describe themselves: your fonts, your GPU, your screen resolution. Meanwhile, the server's reading whatever came in the HTTP headers: user agent, language, timezone. Nobody's hacking anything; everything here is stuff your browser was going to say regardless.
  • Hash. All those individual answers get mashed together into one identifier and stored server-side. Doesn't matter that timezone and screen resolution have nothing to do with each other; they all go into the same blender.
  • Compare. Next time you show up, the whole thing runs again from scratch, new hash, and the site checks it against whatever hashes it's already got sitting in storage.
  • Identify. Close enough match, and the site linked this visit back to your last one. No cookie involved anywhere in that chain.

One thing worth knowing: your fingerprint isn't actually static. Browsers update, fonts get added or removed, and a decent fingerprinting system expects that. It's built to tolerate some drift rather than demanding a pixel-perfect match every time; otherwise it'd lose track of you the moment you installed a browser update, which would defeat the entire point.

It's also worth knowing that passive signals are things the site picks up without lifting a finger: headers, your IP, whatever your TLS handshake reveals on the way in. Active signals need actual work done in your browser, JavaScript running rendering tests, poking at APIs, generating something to measure. Same end goal, very different level of effort on the site's side, and it's exactly why TLS fingerprinting gets treated as its own thing rather than just another item on the browser fingerprinting list.

Browser fingerprinting techniques

Different techniques poke at different parts of your browser, but they're all chasing the same thing: something specific enough about your setup that not many other people share.

Canvas fingerprinting

The page quietly asks your browser to draw some text or shapes onto a hidden canvas element, nothing you ever see. How that drawing actually comes out, down to individual pixels, depends on your GPU, your drivers, and how your system renders fonts, so two different machines rarely produce identical output.

What makes this one so widely used isn't cleverness; it's that it's invisible and it barely changes. You'd never notice it happening, and the result stays consistent across your sessions, which is exactly what makes canvas fingerprinting worth understanding if you're trying to figure out where your own uniqueness is coming from.

WebGL fingerprinting

Same idea as canvas, just aimed at 3D rendering instead of 2D. The page has your browser render something through WebGL, and the result exposes your graphics hardware and driver characteristics along the way.

The entropy here runs higher than canvas, mostly because GPUs vary a lot more than font rendering does. There's a wider spread of hardware out there, which means WebGL fingerprinting narrows the crowd down faster than canvas alone would.

AudioContext fingerprinting

This one uses the Web Audio API to process a signal internally, no speaker involved, nothing plays, nothing you'd hear even with the volume cranked up. But tiny differences in how your particular audio stack processes that signal come out slightly different across machines, and that output becomes the identifier. Quietly effective, in the most literal sense possible. Worth a look if you want the mechanics behind AudioContext fingerprinting specifically.

Font enumeration

Sites can figure out which fonts you've got installed by measuring how rendered text takes up space, since a font substitution changes those measurements even when the visible text looks the same. Your installed font list tends to track your OS, your locale, and whatever software you've bothered to install over the years, which makes it a surprisingly personal fingerprint on its own. More on how that measurement actually works over in the font fingerprinting entry.

Platform, language, plugin list, hardware concurrency, device memory – none of these mean much by themselves. Plenty of people share your platform. Plenty share your language too. But stack them together, and they start narrowing things down the same way every other signal here does.

Where this one gets interesting is inconsistency. When these values contradict each other, say, a plugin list that doesn't match the claimed browser, that's one of the more reliable signals bot detection systems lean on.

Timezone, locale, and screen signals

Timezone offset, screen resolution, color depth, whether the device supports touch – on their own, these are pretty mundane. But mismatches are where they get useful for detection: a timezone that doesn't line up with the IP's geolocation is a common tell, and it's one of the easier ones for a site to check automatically.

Purple thumbs up icon

Match fingerprint to geography

Decodo residential proxies give your automation an IP that actually matches its fingerprint profile.

Browser fingerprinting vs. other tracking methods

Browser fingerprinting doesn't operate alone. Sites usually stack it against a few other tracking methods, and knowing where each one starts and stops tells you a lot about why fingerprinting is such a headache to deal with.

Cookies are the obvious comparison, since most people's mental model of "getting tracked" is basically cookies. But they work almost opposite to fingerprinting. A cookie is a file stored on your device, and you can see it, block it, or nuke it whenever you want. A fingerprint is derived and recalculated fresh every visit from your browser's configuration, so there's nothing sitting on your machine to go delete. Cookies are also consent-gated under GDPR in a pretty unambiguous way at this point.

IP tracking is the other one people lump in with fingerprinting, and it's genuinely a different animal. An IP changes when you switch networks, and it can be shared across a household, an office, an entire VPN exit node full of strangers. A fingerprint doesn't care about any of that; it persists across networks, since it's tied to your browser's configuration rather than your connection. On their own, each one has an obvious gap. Combined, they cover for each other's weaknesses, which is exactly why sites pair them so often.

TLS fingerprinting is the one that confuses people, because it sounds like the same thing as browser fingerprinting, wearing a different name. It isn't. Browser fingerprinting happens at the application layer, JavaScript running inside your browser, after a connection's already been made. TLS fingerprinting happens at the network layer, reading the handshake itself, before a single byte of the actual page has loaded. A site running both can catch something a browser-fingerprint-only setup would miss entirely: a browser fingerprint that looks perfectly normal, paired with a JA3 signature that doesn't match what it's claiming to be. That mismatch is one of the more reliable tells in the whole detection stack, and it's a big part of why spoofing just one layer rarely works.

Method

What's collected

Where it lives

Can the user clear it

What it survives

Cookies

A stored identifier the site issues you

A file on your device

Yes, anytime

Nothing, once deleted

Browser fingerprinting

Configuration and hardware signals (fonts, GPU, screen, etc.)

Nowhere, recalculated each visit

Not really, only by changing the underlying signals

Cookie clearing, private browsing, most manual resets

IP tracking

Your network's public IP address

Your ISP or network, not your device

Yes, by changing networks or using a proxy

Cookie clearing, but not a network change

TLS/JA3 fingerprinting

Handshake behavior (cipher order, extensions, etc.) at connection time

Nowhere, recalculated per connection

Only by changing the TLS client itself

Everything above, since it happens before the page even loads

The pattern across all four rows is the same: the things you can clear are stored somewhere. The things you can't are derived from what your setup does.

Why websites use browser fingerprinting

Not every site running fingerprinting is trying to track your every move for ad money. There's a real range here, and pretending otherwise is how you end up with vague privacy scare articles.

  • Fraud prevention and account security. Fingerprinting flags a login coming from a device that's never touched your account before, catches account takeover attempts, and feeds into payment fraud screening. If your bank's ever made you jump through an extra verification step on a new laptop, that's this.
  • Bot and automation detection. Headless browsers and automation frameworks tend to give themselves away through fingerprint irregularities, missing fonts, WebGL output that doesn't look like a real GPU, plugin lists that don't add up. This is a big part of how modern anti-bot systems work, and it's also the piece that turns into a problem the moment you're the one running the automation instead of defending against it.
  • Advertising and analytics. This is where fingerprinting earns most of its bad reputation. It's cross-site tracking that keeps working even after someone's blocked or cleared their cookies, which is what makes people uneasy in the first place.
  • Content and access control. Paywall enforcement, geo-restriction, catching someone running five free trial accounts off one device. Less headline-grabbing than the fraud or ad-tracking use cases, but it's everywhere.

It's the same signal doing all of this. A fingerprinting system flagging a stolen credit card and one flagging your legitimate price-monitoring script are running the exact same checks under the hood. The tech doesn't know or care which side of that line you're on; it just knows your fingerprint looked inconsistent with what a real user's browser usually looks like. That's not a flaw in the system; it's just what happens when one tool gets pointed at two very different problems.

Browser fingerprinting and web automation

Spin up a default headless browser, and it announces itself almost immediately, usually without you doing anything wrong on purpose. navigator.webdriver sits there set to true, basically waving a flag. WebGL and canvas output often come back missing or inconsistent, because there's no real GPU driver doing the rendering the way there would be on an actual machine. Fonts that any normal desktop would have installed just aren't there. Plugin lists don't match what a real install of that browser would report. None of these individually screams "bot," but stacked together, they might as well.

The real failure mode is contradiction, not absence. A fingerprint with a Windows user agent paired with Linux font metrics is more detectable than one that's just plainly a headless browser being itself. Same story with a US timezone sitting behind a German IP. Detection systems aren't looking for "this fingerprint looks automated," they're looking for "this fingerprint doesn't add up." Which means naive spoofing usually makes things worse, not better. You've patched one attribute and left ten others screaming that something's off.

This is also why proxies alone don't solve this. Rotating your IP while sending an identical fingerprint on every single request is trivially easy to catch, the IP changes, nothing else does, and that mismatch is the kind of pattern detection systems are built to notice. If the goal is matching your fingerprint's geography to where your traffic is actually coming from, the residential proxy and the fingerprint need to agree with each other, not just coexist.

A coherent setup doesn't focus on problems as they show up and more acts like a browser built for this from the ground up, the way Camoufox approaches it: consistent fingerprint profiles, geography and locale that actually line up with the IP behind them, rather than a stock headless browser wearing a costume. And for targets running the more aggressive end of fingerprint-based blocking, that's usually the point where handling it transparently with Site Unblocker beats trying to out-engineer the detection yourself.

None of this is really guessable from first principles, though. Rather than assuming your setup is clean, actually test it and see what a fingerprinting benchmark reports back, since that's the only way to know whether you've built something coherent.

How to test your browser fingerprint

A fingerprinting test doesn't tell you "yes" or "no." It tells you how unusual your setup looks against a big pile of other people's browsers, and which specific attributes are doing the most damage.

A few public testers cover this well, each leaning a different direction:

  • AmIUnique gives you a straightforward uniqueness score plus a breakdown of which attributes are contributing the most to it.
  • EFF Cover Your Tracks frames things more from the privacy-and-tracking angle, useful if you're trying to understand what advertisers specifically can pull from you.
  • CreepJS goes deeper into consistency checks, not just what your fingerprint contains, but whether it actually holds together.

How to prevent or reduce browser fingerprinting

For everyday privacy

Firefox, Brave, and Tor all do something here, but not the same something. Firefox ships fingerprinting resistance you can turn on, which normalizes a bunch of the more identifying signals rather than exposing your real values. Brave does a version of this by default, no flag-flipping required. Tor Browser goes furthest, actively trying to make every user's fingerprint look as close to identical as possible, which is really the only approach that attacks the problem instead of just tweaking around its edges.

Here's the counterintuitive part: piling on privacy extensions or tweaking a dozen settings can make you more identifiable, not less. A heavily customized setup is rare, and rare is exactly what a fingerprint latches onto. Blending in with a huge crowd of identical-looking Tor users beats standing out with an unusual combination of "privacy" tweaks nobody else happens to have.

Worth being honest about the ceiling here too: this is reduction, not elimination. Every browser has to expose something to function, so "fingerprinting protection" really means shrinking the crowd you're identifiable within, not disappearing from it entirely.

For developers and automation

Different problem, different toolkit. An antidetect browser gives you a managed, internally consistent fingerprint profile instead of the contradiction-riddled mess a stock headless browser tends to produce. That consistency is the whole value proposition, matching what a real device would actually report, not just hiding the fact that it's automated. Multilogin, Dolphin Anty, and AdsPower are the usual names in this space, and if you want the fuller comparison, our antidetect browsers roundup covers that ground properly.

But here's the part an antidetect browser genuinely can't solve by itself: the browser controls your fingerprint, and the proxy controls your network identity, and those are two separate systems that both need to agree with each other. A German fingerprint profile sitting behind a US residential IP is still a mismatch, still detectable, no matter how internally consistent that fingerprint looks in isolation. Locale and timezone in the browser have to line up with where the residential proxies are actually placing you, or you've just moved the contradiction from "obviously a bot" to "a bot with a passport that doesn't match its accent."

For anyone running multiple accounts, add profile rotation and persistence into the mix too, so each identity stays coherent and separate over time rather than bleeding into the others.

The honest framing to hold onto through all of this: the goal isn't a fingerprint that looks absent; that's its own red flag. It's one that looks ordinary. An antidetect browser paired with a proxy that matches its geography is what "ordinary" looks like from the outside.

Final thoughts

Browser fingerprinting watches what your browser does instead of storing anything on your machine, which is exactly why clearing cookies or going incognito does nothing to it. For everyday privacy, that means blending into a crowd beats trying to vanish from one. For automation, it means a fingerprint that holds together beats one that's been patched into looking normal, since detection systems hunt for contradictions, not missing pieces. If you're building something that needs to look like a real, consistent visitor, Decodo's residential proxies and Web Scraping API are your go-to choices for solving this problem.

Purple fingerprint icon

Skip the fingerprint maintenance

Decodo's Web Scraping API handles rendering and blocking so you're not maintaining a fingerprint stack yourself.

Share article:

About the author

Zilvinas Tamulis

Technical Copywriter

A technical writer with over 4 years of experience, Žilvinas blends his studies in Multimedia & Computer Design with practical expertise in creating user manuals, guides, and technical documentation. His work includes developing web projects used by hundreds daily, drawing from hands-on experience with JavaScript, PHP, and Python.

Connect with Žilvinas via LinkedIn

All information on Decodo Blog is provided on an as is basis and for informational purposes only. We make no representation and disclaim all liability with respect to your use of any information contained on Decodo Blog or any third-party websites that may belinked therein.

Frequently asked questions about browser fingerprinting

What is browser fingerprinting in simple terms?

Browser fingerprinting is when a website collects details your browser reveals, such as screen size, installed fonts, timezone, and graphics rendering behavior, then combines them into a single identifier. That identifier recognizes you on return visits without anything being stored on your device. It works passively, drawing on configuration data your browser already shares so pages can render correctly.

Is browser fingerprinting legal?

Legality varies by jurisdiction. Under GDPR and the ePrivacy Directive, browser fingerprinting generally requires user consent, since it accesses information generated by a device, similar to how cookie consent rules work. Enforcement has been inconsistent, though, and outside the EU, browser fingerprinting is often less clearly regulated than cookies are. This is general information, not legal advice, so check with a legal professional for guidance specific to your situation.

Can browser fingerprinting be blocked?

Browser fingerprinting can be reduced, but rarely eliminated entirely. Privacy-focused browsers like Firefox, Brave, and Tor normalize the most identifying signals, helping you blend in rather than stand out. Even so, every browser exposes some surface for fingerprinting, since it has to share configuration data to function. Counterintuitively, unusual extensions or nonstandard settings can make you more unique, not less, so blending in beats customizing aggressively.

How is browser fingerprinting different from cookies?

Cookies are small files stored on your device that you can view, block, or delete at any time. A fingerprint works differently: it's derived from your browser's configuration each time you visit, generated fresh rather than stored, so there's nothing sitting on your device to clear. See the comparison table above for how browser fingerprinting stacks up against cookies, IP tracking, and TLS fingerprinting.

How accurate is browser fingerprinting?

Accuracy depends on how many signals get combined and how unusual your configuration is. A common setup, a default browser on a popular OS, is harder to distinguish from thousands of similar users. A rare combination of fonts, screen resolution, and hardware details narrows that pool fast. Modern fingerprinting systems also tolerate some drift, so a fingerprint doesn't need to match exactly across visits to still link back to the same browser.

How to bypass CreepJS: tested methods and benchmark results

CreepJS is a browser fingerprinting audit tool used to test how detectable your automated browser is. If you’re trying to bypass CreepJS or improve browser fingerprinting, it helps you spot inconsistencies across signals like WebGL, fonts, and navigator data. This guide shows what actually gets flagged and how to fix the parts that still give your browser away.

How to Bypass PerimeterX: Detection Methods, Tools, and Practical Workarounds

PerimeterX, now HUMAN, is a cybersecurity platform that employs multiple detection techniques to accurately identify and block threats to web applications. Since numerous high-traffic websites rely on PerimeterX, it's almost inevitable that developers will encounter it when web scraping. This guide explains how PerimeterX detects bots, how to bypass it (tools and strategies), and how to troubleshoot common failures.

Code panel showing HTML request beside 'Proxies enabled' and 'Your data is ready!' cards on dark gradient background

Web Scraping Without Getting Blocked: A Practical Guide for 2026

Web scraping without getting blocked is one of the hardest challenges you might face. Whether you’re a business conducting market research or a solopreneur working on your next big thing, most scrapers fail not because the code is wrong, but because websites now run layered detection that flags bots before a single byte of HTML is returned. This guide breaks down all the detection layers, including network, TLS, browser, and behavioral, and delivers the best techniques on how to overcome each.

© 2018-2026 decodo.com (formerly smartproxy.com). All Rights Reserved