Skip to main content
Profiles are browser fingerprint configurations. Each profile defines a unique browser identity that helps avoid detection.

What’s in a Profile?

A profile contains:
  • User Agent - Browser identification string
  • Screen Resolution - Display dimensions
  • WebGL - Graphics fingerprint
  • Canvas - Canvas rendering fingerprint
  • Audio - Audio context fingerprint
  • Fonts - Available system fonts
  • Timezone - Browser timezone
  • Language - Browser language settings
  • Hardware - CPU cores, device memory

Why Profiles Matter

Websites use fingerprinting to:
  • Detect automation/bots
  • Track users across sessions
  • Enforce rate limits
  • Block suspicious activity
BCTRL profiles make each session look like a unique, real user.

Using Profiles

Automatic Profile

By default, each session gets a fresh profile:
const session = await playwright.connect({
  apiKey: '...',
  sessionOptions: {
    useStealth: true  // Enables anti-detection
  }
});
// New unique profile created automatically

Reuse a Profile

Persist identity across sessions:
// First session - save profile ID
const session1 = await playwright.connect({ apiKey: '...' });
const profileId = session1.profileId;  // Save this
await session1.close();

// Later - reuse the same profile
const session2 = await playwright.connect({
  apiKey: '...',
  sessionOptions: {
    profile: { id: profileId }
  }
});
// Same fingerprint, cookies, localStorage as session1

Pre-created Profiles

Create profiles via API for specific configurations:
// Create profile with specific settings
const profile = await client.profiles.create({
  os: 'macos',
  browser: 'chrome',
  language: 'en-US',
  timezone: 'America/New_York'
});

// Use it
const session = await playwright.connect({
  apiKey: '...',
  sessionOptions: {
    profile: { id: profile.id }
  }
});

Stealth Mode

Enable stealth mode for additional anti-detection:
const session = await playwright.connect({
  apiKey: '...',
  sessionOptions: {
    useStealth: true
  }
});
Stealth mode:
  • Patches common automation detection points
  • Hides WebDriver flags
  • Mimics real browser behavior
  • Randomizes timing patterns

Human-like Behavior

Add realistic mouse movements:
const session = await playwright.connect({
  apiKey: '...',
  sessionOptions: {
    humanize: true,
    humanizePersonaId: 42  // Optional: specific movement pattern
  }
});
With humanize: true:
  • Mouse moves in natural curves (Bezier)
  • Random micro-movements
  • Realistic click timing
  • Human-like scrolling

Personas

There are 125 movement personas (0-124), each with different characteristics:
  • Movement speed
  • Curve patterns
  • Click behavior
  • Scroll style
// Slow, careful movements
sessionOptions: { humanize: true, humanizePersonaId: 0 }

// Fast, direct movements
sessionOptions: { humanize: true, humanizePersonaId: 100 }

Proxy Integration

Combine profiles with proxies for location-specific identity:
const session = await playwright.connect({
  apiKey: '...',
  sessionOptions: {
    useStealth: true,
    useProxy: true,
    proxyCountry: 'US'  // IP from United States
  }
});
The profile’s timezone and language will match the proxy location.

Profile Persistence

What’s saved in a profile:
DataPersisted
FingerprintYes
CookiesYes
LocalStorageYes
SessionStorageNo (cleared on close)
CacheNo
HistoryNo

Best Practices

Always enable useStealth: true for sites with bot detection.
Save and reuse profile IDs to maintain login state across sessions.
When using proxies, ensure profile timezone/language matches the proxy location.
Each website account should have its own profile to avoid detection.

Anti-Detection Checklist

For maximum stealth:
const session = await playwright.connect({
  apiKey: '...',
  sessionOptions: {
    useStealth: true,       // ✓ Stealth patches
    humanize: true,         // ✓ Human-like mouse
    useProxy: true,         // ✓ Clean IP
    proxyCountry: 'US',     // ✓ Consistent location
    screen: {               // ✓ Common resolution
      width: 1920,
      height: 1080
    }
  }
});