Launches Chromium instances with real-device fingerprints through standard Playwright APIs, designed for multi-account operations and web automation that needs to avoid detection. Each browser session gets unique Canvas, WebGL, Audio, and 30+ other fingerprint categories pulled from actual devices. Works well for managing multiple social media accounts, rotating scraper identities, or running AI agents that need persistent browser profiles across sessions. The MCP server mode lets Claude and other AI agents control fingerprint browsers directly through tool calls. Solid choice when you need browser automation that doesn't immediately get flagged by anti-bot systems.
npx -y skills add antibrow/anti-detect-browser-skills --skill anti-detect-browser --agent claude-codeInstalls into .claude/skills of the current project.
Launch Chromium instances with real-device fingerprints via standard Playwright APIs. Each browser gets a unique, consistent digital identity - undetectable by anti-bot systems.
anti-detect-browserhttps://antibrow.comhttps://antibrow.com/api/v1/https://antibrow.com/docsnpm install anti-detect-browser
import { AntiDetectBrowser } from 'anti-detect-browser'
// Get your API key at https://antibrow.com
const ab = new AntiDetectBrowser({ key: 'your-api-key' })
const { browser, page } = await ab.launch({
fingerprint: { tags: ['Windows 10', 'Chrome'] },
profile: 'my-account-01',
proxy: 'http://user:pass@host:port',
})
// Standard Playwright API from here — zero learning curve
await page.goto('https://example.com')
await browser.close()
A profile saves cookies, localStorage, and session data across launches. Same profile name = same stored state next time.
// First launch — fresh session
const { page } = await ab.launch({ profile: 'shop-01' })
await page.goto('https://shop.example.com/login')
// ... login ...
await browser.close()
// Later — session restored, already logged in
const { page: p2 } = await ab.launch({ profile: 'shop-01' })
await p2.goto('https://shop.example.com/dashboard') // no login needed
Each launch fetches a real fingerprint collected from actual devices. Over 30 categories (Canvas, WebGL, Audio, Fonts, WebRTC, WebGPU, etc.) with 500+ individual parameters.
// Windows Chrome, version 130+
await ab.launch({
fingerprint: { tags: ['Windows 10', 'Chrome'], minBrowserVersion: 130 },
})
// Mac Safari
await ab.launch({
fingerprint: { tags: ['Apple Mac', 'Safari'] },
})
// Mobile Android
await ab.launch({
fingerprint: { tags: ['Android', 'Mobile', 'Chrome'] },
})
Available filter tags: Microsoft Windows, Apple Mac, Android, Linux, iPad, iPhone, Edge, Chrome, Safari, Firefox, Desktop, Mobile, Windows 7, Windows 8, Windows 10
When running many browsers simultaneously, each window gets a floating label, title prefix, and unique theme color.
await ab.launch({
profile: 'twitter-main',
label: '@myhandle', // floating label + window title
color: '#e74c3c', // unique window border color
})
Route each browser through a different proxy for geo-targeting or IP rotation.
await ab.launch({
proxy: 'socks5://user:pass@us-proxy.example.com:1080',
fingerprint: { tags: ['Windows 10', 'Chrome'] },
profile: 'us-account',
})
Monitor headless sessions from the https://antibrow.com dashboard. Useful for debugging AI agent actions or letting team members observe.
const { liveView } = await ab.launch({
headless: true,
liveView: true,
})
console.log('Watch live:', liveView.viewUrl)
// Share this URL — anyone with access can see the browser screen
Already have Playwright scripts? Add fingerprints without changing your workflow.
import { chromium } from 'playwright'
import { applyFingerprint } from 'anti-detect-browser'
const browser = await chromium.launch()
const context = await browser.newContext()
await applyFingerprint(context, {
key: 'your-api-key',
fingerprint: { tags: ['Windows 10', 'Chrome'] },
profile: 'my-profile',
})
const page = await context.newPage()
await page.goto('https://example.com')
Run as an MCP server so AI agents can launch and control fingerprint browsers via tool calls.
{
"mcpServers": {
"anti-detect-browser": {
"command": "npx",
"args": ["anti-detect-browser", "--mcp"],
"env": { "ANTI_DETECT_BROWSER_KEY": "your-api-key" }
}
}
}
Available tools:
| Tool | What it does |
|---|---|
launch_browser | Start a new fingerprint browser session |
close_browser | Close a running session |
navigate | Go to a URL |
screenshot | Capture the current screen |
click / fill | Interact with page elements |
evaluate | Run JavaScript on the page |
get_content | Extract text from the page or a specific element |
start_live_view | Stream the browser screen to https://antibrow.com dashboard |
stop_live_view | Stop live streaming |
list_sessions | List all running browser instances |
list_profiles | List all saved profiles |
const accounts = [
{ profile: 'twitter-1', label: '@brand_main', color: '#1DA1F2' },
{ profile: 'twitter-2', label: '@support', color: '#FF6B35' },
{ profile: 'twitter-3', label: '@personal', color: '#6C5CE7' },
]
for (const acct of accounts) {
const { page } = await ab.launch({
fingerprint: { tags: ['Windows 10', 'Chrome'] },
proxy: getNextProxy(),
...acct,
})
await page.goto('https://twitter.com')
}
for (const url of urlsToScrape) {
const { browser, page } = await ab.launch({
fingerprint: { tags: ['Desktop', 'Chrome'], minBrowserVersion: 125 },
proxy: rotateProxy(),
})
await page.goto(url)
const data = await page.evaluate(() => document.body.innerText)
saveData(url, data)
await browser.close()
}
const { page, liveView } = await ab.launch({
headless: true,
liveView: true,
profile: 'price-monitor',
fingerprint: { tags: ['Windows 10', 'Chrome'] },
})
// Share the live view URL with your team
console.log('Dashboard:', liveView.viewUrl)
while (true) {
await page.goto('https://shop.example.com/product/123')
const price = await page.textContent('.price')
if (parseFloat(price) < targetPrice) notify(price)
await page.waitForTimeout(60_000)
}
Base URL: https://antibrow.com/api/v1/ — all endpoints require Authorization: Bearer <api-key> header.
| Method | Endpoint | Description |
|---|---|---|
GET | /fingerprints/fetch | Fetch a fingerprint matching filter criteria. Returns { dataUrl } — download the presigned URL for full fingerprint data. |
GET | /fingerprints/versions | List available browser versions |
Query parameters for /fingerprints/fetch: tags, id, minBrowserVersion, maxBrowserVersion, minWidth, maxWidth, minHeight, maxHeight
| Method | Endpoint | Description |
|---|---|---|
GET | /profiles | List all profiles |
POST | /profiles | Create a new profile (server assigns a random fingerprint). Returns profile info including dataUrl for immediate fingerprint data download. |
GET | /profiles/:name | Get profile details with dataUrl for fingerprint data download |
DELETE | /profiles/:name | Delete a profile |
POST /profiles request body:
{ "name": "my-profile", "tags": ["Windows 10", "Chrome"] }
POST /profiles response (201):
{
"name": "my-profile",
"tags": ["Windows 10", "Chrome"],
"ua": "Mozilla/5.0 ...",
"browserVersion": 131,
"width": 1920,
"height": 1080,
"createdAt": "2025-01-01T00:00:00.000Z",
"dataUrl": "https://r2.example.com/fingerprints/..."
}
The dataUrl is a presigned R2 URL (valid for 10 minutes) pointing to the full fingerprint JSON data (~9MB). Download it directly — no additional API call needed.
https://antibrow.com (free tier: 2 browser profiles)npm install anti-detect-browserFull documentation: https://antibrow.com/docs
sickn33/antigravity-awesome-skills
moizibnyousaf/ai-agent-skills
github/awesome-copilot