🛡️ Fingerprint Defense - Validated against 31+ detection systems
⚡ Zero Config - Auto-detects timezone, locale, language from proxy IP
🔍 LiveURL - Visual debugging and real-time monitoring
Connect to cloud Chrome with your familiar Puppeteer or Playwright code — no deployment, no maintenance, fingerprint-level isolation. BotCloud isolates your real device fingerprint from third-party tracking while helping teams validate their fingerprint defense mechanisms.
Why privacy teams pick BotCloud:
- Protect local device fingerprints - Cloud-based isolation prevents your device fingerprint from being exposed to third-party tracking and fingerprinting.
- No more desktop babysitting because cloud browsers stay patched and geo-distributed out of the box.
- Existing scripts keep working (Puppeteer, Playwright, Selenium, CDP) with minimal tweaks for privacy testing.
- Mandatory proxy plus region controls with usage-based billing make compliance reviews easy.
💡 Pricing: Billing is usage-based (1 minute = 1 quota unit). Contact your service provider for the latest rates. ⚖️ Review the Legal Disclaimer and Responsible Use Guidelines before onboarding.
🌐 Learn more: Visit bots.win for documentation, pricing, and support.
import puppeteer from "puppeteer-core";
const params = new URLSearchParams({
token: process.env.BOTCLOUD_TOKEN,
"--proxy-server": process.env.BOTCLOUD_PROXY,
device_type: "mac",
});
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://cloud.bots.win?${params.toString()}`,
});
const page = await browser.newPage();
await page.goto("https://example.com");
await browser.close();- Get a token from your service provider
- Prepare a proxy in format
username:password@host:port - Connect using Puppeteer, Playwright, or CDP
- Close the browser when done to free quota
| Detection System | Status |
|---|---|
| CreepJS | ✅ Pass |
| Cloudflare Turnstile | ✅ Pass |
| DataDome | ✅ Pass |
| FingerprintJS Pro | ✅ Pass |
| PerimeterX | ✅ Pass |
| Kasada | ✅ Pass |
Our fingerprint engine maintains consistency across 31+ detection vectors including canvas, WebGL, audio context, font enumeration, and hardware concurrency.
- Intelligent fingerprint binding with User Data for persistent identity
- Fresh fingerprint assignment for each session without User Data
View Fingerprint Management Guide →
BotCloud auto-detects timezone, language, and locale from your proxy IP:
// Just provide your proxy - we handle the rest
const params = new URLSearchParams({
token: process.env.BOTCLOUD_TOKEN,
"--proxy-server": "user:[email protected]:8080"
});
// Browser automatically uses Asia/Tokyo timezone, ja-JP locale- Your local device fingerprint stays isolated in the cloud—third parties never see your real device
- No
navigator.webdriverflag - No Chrome DevTools Protocol exposure points
- WebRTC and DNS requests route through your proxy
- Zero IP leaks from any browser API
| Parameter | Example | Required |
|---|---|---|
token |
user-token-abc123 |
✅ |
--proxy-server |
user:[email protected]:4600 |
✅ |
device_type |
mac / win / android |
Optional (default: mac) |
user_data_id |
udd_xxxxxxxxxxxx |
Optional |
BotCloud supports 50+ CLI parameters for timezone, locale, fingerprint variation, and more.
📖 View full CLI parameter reference →
LiveURL provides real-time browser visualization for debugging automated workflows.
const cdp = await page.createCDPSession();
cdp.on("liveComplete", () => console.log("User done"));
const { liveURL } = await cdp.send("liveURL", { timeout: 120000 });
console.log(`Open: ${liveURL}`);
await new Promise(resolve => cdp.on("liveComplete", resolve));📖 View full LiveURL documentation →
| Endpoint | Method | Description |
|---|---|---|
/api/quota |
GET | Check remaining quota |
/api/usage |
GET | Get usage statistics |
/api/history |
GET | Retrieve session history |
/api/user-data |
POST | Create persistent User Data |
/api/user-data |
GET | List User Data entries |
/api/user-data/:id |
DELETE | Delete User Data |
| Framework | Language | Example |
|---|---|---|
| Puppeteer | Node.js | examples/puppeteer/node/quickstart.mjs |
| Playwright | Node.js | examples/playwright/node/quickstart.mjs |
| Playwright | Python | examples/playwright/python/quickstart.py |
| CLI Config | Node.js | examples/cli/node/custom-config.mjs |
| LiveURL | Node.js | examples/liveurl/node/puppeteer-liveurl.mjs |
| User Data | Node.js | examples/user-data/node/user-data.mjs |
| CDP | Go | examples/cdp/go/chromedp-quickstart.go |
| CDP | Java | examples/cdp/java/CdpQuickstart.java |
| CDP | Ruby | examples/cdp/ruby/ferrum-quickstart.rb |
BotCloud supports direct CDP connections from any language with WebSocket support:
| Language | Library | Example |
|---|---|---|
| Go | chromedp (recommended) | examples/cdp/go/chromedp-quickstart.go |
| Go | rod (low-level API) | examples/cdp/go/rod-quickstart.go |
| Java | Native WebSocket (Java 11+) | examples/cdp/java/CdpQuickstart.java |
| Ruby | Ferrum | examples/cdp/ruby/ferrum-quickstart.rb |
Each example includes detailed comments explaining library-specific considerations and compatibility notes.
BotCloud enforces one active connection per token. For parallel sessions, request multiple tokens from your service provider.
Always wrap browser operations in try/finally:
let browser;
try {
browser = await puppeteer.connect({ browserWSEndpoint });
// Your automation here
} finally {
if (browser) await browser.close();
}Track these metrics:
- Remaining quota - Alert below 10 units
- Active sessions - Track concurrent usage
- Disconnect reasons - Check
/api/history
| Error | Cause | Fix |
|---|---|---|
400 Bad Request |
Malformed proxy | Check user:pass@host:port format |
401 Unauthorized |
Invalid token | Verify token or request new one |
403 Forbidden |
No quota or limit reached | Check quota, close idle sessions |
500 / 503 |
Server issue | Retry, contact support if persistent |
- Website: bots.win
- Examples:
examples/ - Fingerprint Guide:
docs/fingerprint.md - CLI Parameters:
docs/cli-parameters.md - LiveURL Guide:
docs/liveurl.md - API Reference:
docs/api-reference.md - Legal:
DISCLAIMER.md|RESPONSIBLE_USE.md