Skip to content
Anti-Bot

What Is Fingerprint Reconnect Stability?

Pim

Pim · Scrappey Research

July 30, 2026 5 min read

What Is Fingerprint Reconnect Stability? - conceptual illustration
On this page

Fingerprint reconnect stability is whether a browser returns a consistent fingerprint across reloads, reconnects, and sessions. A genuine device is deterministic: the same canvas or audio computation produces the same result every time it runs, which is exactly what lets a site recognise a returning visitor even after cookies are cleared. The counter-intuitive part for automation is that instability is itself a signal. A fingerprint value that changes on every read - because an anti-fingerprinting tool randomises it per call - violates the determinism a real browser shows, and that anomaly can flag a session as suspicious. Over-aggressive randomisation can make a client more identifiable, not less.

Quick facts

DefinitionSame fingerprint across reloads / reconnects / sessions
Real browsersDeterministic - identical output on repeated reads
Instability signalPer-read hash changes flagged as anomalous (too much noise)
Measured byCreepJS-style stable + fuzzy identifiers across reloads
Design principleA stable, plausible profile beats per-call randomisation

Why instability is a red flag

On a real device, reading the canvas or audio fingerprint twice gives the same answer - the computation is deterministic for that hardware and software. Some privacy tools defend against tracking by injecting random noise so the value differs on every read. Detectors exploit that: a simple check renders a known pattern and verifies the pixels, and per-call noise makes the output deviate from the deterministic baseline, exposing the modification. When consecutive reads disagree, a consistency tool reports the value as unstable. So randomisation that is too aggressive trades one signal (a unique fingerprint) for a louder one (an impossible, ever-changing fingerprint).

How tools measure persistence

Consistency tools such as CreepJS collect raw signals across many APIs and compute more than one identifier from them: a stable, exact identity hash plus a looser, fuzzy hash that groups similar browsers. Comparing those identifiers across reloads and sessions answers the persistence question - does this profile stay the same when it should? A genuine browser holds steady; a profile whose values drift between reads stands out. The same tools pair this with consistency checks that look for values contradicting each other, so an unstable fingerprint and an internally inconsistent one are flagged by the same machinery.

Why stability matters for scraping

The practical lesson is that blending in is about coherence and stability, not noise. A profile drawn from a real browser population and kept consistent across a session looks ordinary; one that scrambles its fingerprint on every request looks like nothing a real user runs. This is also why a profile should return the same fingerprint when it reconnects through the same network and TLS context - a fingerprint that resets unpredictably between reconnects is as anomalous as one that changes mid-session. Stability is the goal; randomisation is the tell.

Stability is checked per layer, and the layers disagree independently

Reconnect stability is not one property but several, measured at different layers of the stack, and a session can be stable at one layer while drifting at another.

LayerWhat must stay constantWhat drift indicates
TLSThe JA4 class of the ClientHello across every connectionRequests in one session originating from more than one client stack
HTTP/2SETTINGS values, window sizes, pseudo-header orderA different client library handling some requests
NetworkThe exit address, or at least its ASN and countryPer-request proxy rotation inside a single logical session
BrowserCanvas, WebGL, audio, and font readingsA fresh device profile generated per page load
LocaleTimezone, languages, and their agreement with the exit IPEnvironment settings applied inconsistently between requests

The subtle case is TLS, where the correct expectation is not literal byte-identity. Browsers deliberately shuffle the order of some ClientHello extensions on every connection as part of anti-ossification behaviour, so a genuine browser produces a ClientHello that varies in ordering while remaining constant in its cipher list, supported groups, and ALPN set. A client that emits a byte-identical ClientHello every single time is as anomalous as one that changes cipher suites between requests - stability has to be measured on the properties that ought to be stable, not on the raw bytes.

Why rotation applied at the wrong granularity backfires

Rotation is a sound idea applied at the wrong scope more often than not. The intuition that varying identity reduces trackability is correct across sessions and wrong within one, because a session is defined by continuity: one visitor, one device, one network path, for the duration of a visit. Real users do not acquire new GPUs between page loads, and their exit address does not change halfway through a checkout flow.

When rotation happens per request rather than per session, the resulting pattern is not anonymity but impossibility. A sequence of requests carrying one cookie while presenting several canvas hashes, several TLS profiles, or several countries describes a device that cannot exist. This is the same lesson as cross-API coherence, extended along the time axis: coherence has to hold across requests as well as across APIs.

The correct granularity is the session boundary. Pin one device profile, one exit address, one locale, and one client stack for the whole of a logical session; change all of them together when a new session begins. That gives variety between sessions without producing contradictions inside one.

Getting this right is largely a state-management problem rather than a fingerprinting one - it requires whatever issues proxies and whatever runs browsers to agree on what a session is and to keep them bound together. Managed web data APIs expose exactly this as a session primitive, which is why session-scoped stability tends to be a configuration choice there rather than an infrastructure project.

Code example

javascript
// The determinism a detector expects: read the same fingerprint twice and
// compare. A real browser returns identical results; a value randomised per
// call by an anti-fingerprinting tool differs - and that instability is the
// anomaly.
function canvasHash() {
  const c = document.createElement('canvas');
  const ctx = c.getContext('2d');
  ctx.textBaseline = 'top';
  ctx.font = '14px Arial';
  ctx.fillText('fingerprint-stability-check', 2, 2);
  return c.toDataURL();
}

const a = canvasHash();
const b = canvasHash();
// a === b  on a genuine browser (stable / deterministic)
// a !== b  signals per-call noise - an obvious, self-defeating tell
console.log('stable:', a === b);

Related terms

Concept map

Concept map

How Fingerprint Reconnect Stability 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 · Anti-Bot
Building map…

Frequently asked questions

What is fingerprint reconnect stability?

It is whether a browser produces the same fingerprint across reloads, reconnects, and sessions. Real devices are deterministic and return consistent values, which is what lets sites recognise returning visitors; a profile whose fingerprint changes unpredictably is anomalous.

Why is a changing fingerprint a problem?

Because genuine browsers are deterministic. An anti-fingerprinting tool that randomises a value on every read makes it change between consecutive reads, which no real browser does. Detectors check for that instability, so over-aggressive randomisation becomes a detection signal of its own.

How do tools detect unstable fingerprints?

A common method renders a known pattern and verifies the exact pixels; injected per-call noise makes the output deviate from the deterministic baseline. Consistency tools like CreepJS also compare identifiers across reloads and report values that differ between reads as unstable.

Is randomising my fingerprint a good idea for scraping?

Generally no. Blending in favours a stable, plausible profile drawn from a real browser population and kept consistent across a session. Scrambling values per request produces an impossible, ever-changing fingerprint that stands out rather than hides.

Should a real browser produce a byte-identical TLS ClientHello every time?

No. Major browsers randomise the ordering of some ClientHello extensions on each connection to prevent middleboxes from ossifying around a fixed layout. A client that emits an identical ClientHello on every connection is exhibiting behaviour real browsers stopped exhibiting. What should stay constant is the substance - the cipher list, supported groups, and ALPN set - not the byte order.

Last updated: 2026-07-30 · Facts last verified: 2026-07-30