Fingerprinting

Every SessionKit session gets a unique, consistent browser fingerprint that makes it indistinguishable from a real user's browser.

How It Works

When you set fingerprint: 'auto', SessionKit's fingerprint engine:

  1. Selects a realistic device profile (OS, screen size, GPU)
  2. Generates consistent values for all fingerprinting vectors
  3. Applies the fingerprint before any page loads
  4. Maintains consistency across navigations within the session

Fingerprint Modes

const session = await sk.sessions.create({
  fingerprint: 'auto',
})

Generates a random but realistic fingerprint. Best for most use cases.

Custom Fingerprint

Override specific fingerprint values:

const session = await sk.sessions.create({
  fingerprint: {
    platform: 'MacIntel',
    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
    locale: 'en-US',
    timezone: 'America/New_York',
    viewport: { width: 1440, height: 900 },
    screen: { width: 2560, height: 1600 },
    colorDepth: 30,
    hardwareConcurrency: 10,
    deviceMemory: 16,
    webgl: {
      vendor: 'Apple',
      renderer: 'Apple M1 Pro',
    },
  },
})

Profile-Based Fingerprint

Reuse a fingerprint from a saved profile:

const session = await sk.sessions.create({
  profileId: 'prof_abc123', // Loads fingerprint from profile
  fingerprint: 'profile',  // Explicitly use profile's fingerprint
})

Fingerprint Vectors

SessionKit covers all major fingerprinting vectors:

Vector What It Does Consistency
User Agent Browser + OS identification Per-session
Platform navigator.platform value Per-session
Screen Resolution and color depth Per-session
WebGL GPU vendor/renderer + hash Per-session
Canvas 2D canvas rendering hash Per-session
Audio AudioContext fingerprint Per-session
Fonts Installed font detection Per-session
Plugins Navigator plugins list Per-session
Hardware CPU cores, memory, battery Per-session
Timezone Matches proxy geo-location Per-session

Fingerprint Consistency

Within a session, all fingerprint values remain constant. This means:

  • navigator.userAgent returns the same value on every call
  • Canvas renders identically every time
  • WebGL produces the same hash
  • Timezone matches the proxy's geographic location
// These will all return consistent values within a session
await page.evaluate(() => navigator.userAgent)     // Same every time
await page.evaluate(() => navigator.platform)      // Same every time
await page.evaluate(() => navigator.languages)     // Same every time

Anti-Fingerprint Detection

Some sites check for inconsistencies rather than specific values. SessionKit ensures:

  • Timezone ↔ Proxy location match (US proxy = US timezone)
  • Language ↔ Locale match (en-US locale = English language)
  • Screen ↔ Viewport consistency (viewport ≤ screen size)
  • GPU ↔ Platform match (Apple GPU only on Mac/iOS)

Warning: Mixing a US residential proxy with a Japanese timezone will trigger detection. Always let auto mode handle consistency, or ensure your custom values are coherent.