Quick verdict: CreepJS is the most thorough open-source browser fingerprinting test — it detects more signals than commercial tools like FingerprintJS, plus catches anti-fingerprinting tools themselves (Tor, Brave shields, antidetect spoofs). Use it to validate your antidetect browser setup before deploying to production. The key score: "Trust Score" reflects how consistent and natural-looking your fingerprint is. Below 70% = obvious spoofing; 85%+ = production-ready.
CreepJS runs 30+ tests against your browser:
The "lie detection" piece is what makes CreepJS unique. Most fingerprinting libraries collect signals; CreepJS additionally checks whether the signals make sense together.
For automated testing (e.g., validating antidetect profiles in CI), self-host CreepJS via the GitHub repo.
CreepJS produces several distinct outputs:
Top of the page. 0-100%. Reflects:
Real browsers usually score 95%+. Tor Browser scores ~50% (very consistent within Tor users but extremely rare overall). Antidetect browsers should score 85%+ for production use.
The persistent identifier CreepJS computes. Same value across page reloads, same value across sessions if your fingerprint is stable. Useful for testing that your antidetect profile maintains consistency.
The key panel. CreepJS lists every inconsistency it found:
toString, toDataURL) have been overridden, which CreepJS detects via toString length.Each lie is a vulnerability. For a clean fingerprint, the goal is 0 lies detected.
CreepJS breaks results into ~20 sections (Canvas, WebGL, Audio, Fonts, Headless, ...). Each shows the raw value and any anomalies. Useful for debugging which specific spoof is failing.
| Property | Real Chrome | Good Antidetect | Bad Spoof |
|---|---|---|---|
| Trust Score | 95-99% | 85-95% | 20-70% |
| Lies detected | 0 | 0-2 | 5+ |
| Canvas stability | Stable across reads | Stable | Often unstable |
| WebGL renderer | Real GPU string | Real GPU string (matched) | "Mesa LLVM" or empty |
| navigator.webdriver | undefined | undefined | true (headless tell) |
| Function toString | Native code | Native code | "function() { [patched] }" |
Before deploying antidetect browser profiles to production:
If the hash changes between reloads, your spoof is randomizing too aggressively — an obvious anti-fingerprinting signal. Real users have stable fingerprints across all their sessions.
Adding 5+ pixels of noise per read produces visually-imperceptible but hash-distinct outputs. Real browsers always produce the same hash. CreepJS flags as "Canvas data unstable."
Fix: lower noise (1-2 pixel max) AND seed it deterministically per profile, so the same profile produces the same hash across sessions.
Spoofing the renderer string to "Intel HD Graphics 620" while running on an NVIDIA system — CreepJS notices the WebGL extensions list does not match what an Intel iGPU would actually expose.
Fix: use a renderer string that matches a complete profile (NVIDIA GPU + matching extension list). Antidetect browsers ship preset profiles for this.
Overriding HTMLCanvasElement.prototype.toDataURL with a plain function makes toDataURL.toString() return the patched function source. Real natives return "function toDataURL() { [native code] }".
Fix: use Object.defineProperty + custom toString override that returns the native string. Most antidetect browsers handle this; DIY patches often miss it.
navigator.webdriver = true, missing permissions API, no notifications support. CreepJS flags all of these.
Fix: use stealth plugins (playwright-stealth, undetected-chromedriver).
For a complete pre-deployment audit, run all four. They catch different issues.
Run CreepJS through the SAME proxy your scraper will use. The IP geolocation gets compared to your timezone; if your antidetect browser claims America/Los_Angeles but your proxy IP is in Germany, CreepJS flags it.
Best practice: pair each antidetect profile with a proxy in the matching country. For LTE-mobile workflows, SpyderProxy LTE ($2/IP) supports city-level targeting in 150+ countries.
Related: Canvas fingerprinting, How fingerprints are detected, Top antidetect browsers, Verify your fingerprint.