Manually maintaining fingerprint configurations that get detected within hours? Kameleo keeps pace with anti-bot systems automatically, so you stop firefighting and build your actual product.
✅ Validated against real services
We run automated tests frequently. Here are the results with recordings of each run.
View masking report →
💡 Why Kameleo?
Built for developers who want control.
Predictable pricing at any scale
No per-request pricing. Your cost is fixed by the number of concurrent browsers — run 100 million requests a month and pay the same as running one million. At 40 concurrent browsers you know your cost on day one and at 10×. Competitors charge per API call, per minute, or per profile slot; here the economics stay in your control.
Your data, your infrastructure
Your scraped data never leaves your servers. No vendor lock-in. Deploy on any machine: cloud VM, bare metal, or your own datacenter.
Always current
Stop manually re-testing which fingerprint configuration still works this week. We ship Chroma kernels within 5 days of every Chrome stable release. Junglefox (Firefox-based) follows every 2 months. Multikernel support lets you run multiple browser versions simultaneously, no forced upgrades.
Cloud-native by design
Docker images available for both Linux and Windows containers. Run headlessly at scale, deploy across multiple VMs, and integrate with your CI/CD pipeline. Linux container deployments are fully supported, Kameleo is not Windows-only.
Your stack, unchanged
Works with Selenium, Puppeteer, and Playwright with no framework rewrite. SDKs in Python, JavaScript, and C#. Connect to your existing automation code in minutes.
✨ Features
- Fingerprints from real devices, always current — Millions of profiles sourced from real hardware, updated continuously. When anti-bot systems update, so do the fingerprints
- Mobile browser profiles — Engine-level mobile emulation across Android and iOS profiles. Supports Chrome on Android and Safari on iOS out of the box
- Multi-engine browser pool — Run Chroma (Chrome) and Junglefox (Firefox) simultaneously to diversify fingerprints across targets
- Persistent profiles and session warmup — Reuse profiles, import/export cookies. Profiles behave like returning users, reducing block and shadow-ban risk
- Proxy integration — HTTP, HTTPS, SOCKS5, and SSH tunnel support. Geo-location and timezone auto-matched to your proxy IP
- Headless mode — UI-free sessions on Business plan and above; same fingerprint masking quality as headed mode
- Docker containers — Linux and Windows Docker images; horizontal scaling without Windows-only constraints
- Multikernel — pin any browser version — Run multiple Chroma and Junglefox versions side-by-side; upgrade on your schedule
- No device limits — Licensing is per concurrent browser, not per machine. Deploy across as many servers as your workload demands
📊 How we compare
Anti-detect browsers
GUI-first tools built around manual workflows. If you're automating at scale, you'll be working against the grain.
| Feature | Kameleo | Multilogin | GoLogin |
|---|
| Chrome engine | ✅ Chroma | ✅ Mimic | ✅ Chromium-based |
| Firefox engine | ✅ Junglefox | ❌ | ❌ |
| Kernel update speed | ≤5 days | No SLA | No SLA |
| Pricing unit | Concurrent browsers | Profiles | Profiles |
| Typed SDK packages | ✅ Python / JS / C# | ❌ | ❌ |
| Automation frameworks | ✅ Selenium / Puppeteer / Playwright | ✅ Selenium / Puppeteer / Playwright | ✅ Selenium / Puppeteer |
| Headless mode | ✅ | ❌ | ✅ |
| Docker / container deployment | ✅ | ❌ | ❌ |
| Data stays on your servers | ✅ | ❌ | ❌ |
| Free tier | ✅ | ❌ | ✅ |
Cloud-based web unlockers
Cloud-based scraping APIs: all requests routed through vendor infrastructure, costs tied to usage volume.
| Feature | Kameleo | Zyte | ScrapeNinja |
|---|
| Self-hosted | ✅ | ❌ | ❌ |
| Data stays on your infrastructure | ✅ | ❌ | ❌ |
| Per-request pricing | ❌ | ✅ | ✅ |
| Fixed concurrent-browser pricing | ✅ | ❌ | ❌ |
| Bring your own proxy | ✅ | ❌ | ❌ |
| Bring your own Playwright / Selenium / Puppeteer | ✅ | ❌ | ❌ |
| Local API + SDKs (Python / JS / C#) | ✅ | ❌ | ❌ |
| Docker / container deployment | ✅ | ❌ | ❌ |
| Free tier | ✅ | ❌ Trial only | ✅ 100 req/mo |
Open source / community tools
Free to run, but the maintenance cost lands entirely on you — keeping up with every new fingerprinting vector, debugging breakage after Chrome updates, handling the issue backlog yourself.
| Feature | Kameleo | Camoufox | undetected-chromedriver / puppeteer-stealth |
|---|
| Commercial support | ✅ | ❌ | ❌ |
| Chrome engine | ✅ | ❌ | ✅ |
| Firefox engine | ✅ | ✅ | ❌ |
| Evasion method | ✅ C++ engine-level | ✅ C++ engine-level | ⚠️ Binary patch / JS injection |
| Multi-framework SDKs | ✅ Py / JS / C# | Python only | Py / JS |
| Mobile profiles | ✅ | ❌ | ❌ |
| Docker / container deployment | ✅ | ❌ | ❌ |
| Free to use | ✅ Free tier | ✅ Open source | ✅ Open source |
🔌 Integrations
Connect with your favorite automation framework:
Selenium
from selenium import webdriver
# Get the WebDriver URL from Kameleo
ws_endpoint = f'http://localhost:5050/webdriver/{profile.id}'
driver = webdriver.Remote(command_executor=ws_endpoint)
driver.get('https://example.com')
Full Selenium guide →
Puppeteer
import puppeteer from 'puppeteer';
const browser = await puppeteer.connect({
browserWSEndpoint: `ws://localhost:5050/puppeteer/${profile.id}`,
});
const page = await browser.newPage();
await page.goto('https://example.com');
Full Puppeteer guide →
Playwright
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(f'ws://localhost:5050/playwright/{profile.id}')
page = browser.contexts[0].new_page()
page.goto('https://example.com')
Full Playwright guide →
📂 Example Code
Working examples for every common scenario:
| Example | Python | TypeScript | C# |
|---|
| Create, duplicate, update, and launch profiles via the API | View | View | View |
| Delete all profiles from your Kameleo workspace | View | View | View |
| Control a Chrome profile with Selenium over WebDriver | View | View | View |
| Control a Chrome profile with Playwright via CDP | View | View | View |
| Control a Firefox (Junglefox) profile with Playwright | View | View | View |
| Control a Chrome profile with Puppeteer via CDP | View | View | View |
| Attach an HTTP, SOCKS5, or SSH proxy to a browser profile | View | View | View |
| List, add, and delete cookies from a profile via the API | View | View | View |
| Warm up a profile by browsing real sites to collect cookies | View | View | View |
| Take a full-page screenshot of a website using Puppeteer | View | View | View |
| Export and import profiles to/from .kameleo files on disk | View | View | View |
| Launch a profile with CLI args, Selenium options, or prefs | View | View | View |
| Upgrade a profile's browser kernel to the latest version | View | View | View |
| Upload a file to a website using Selenium | — | — | View |
| Automate an iOS/Safari mobile profile with Selenium on desktop | View | View | View |
| Intercept and redirect network traffic using Selenium | — | — | View |
| Intercept, redirect, and replace responses with Playwright | View | View | View |
| Use init scripts, evaluate, screenshots, and video recording | View | View | View |
🏆 Trusted by builders
> "Kameleo's human-like browser automation and great fingerprint masking helped our customers with their scraping and automation projects."
> — Pierluigi Vinciguerra, Co-Founder, Databoutique.com & The Web Scraping Club
> "Kameleo keeps our scraping and automation users unblocked at scale: reliable, low-maintenance, and cost-effective."
> — Jason Grad, Co-Founder of Massive
> "Kameleo and Scrapoxy make scraping undetectable, fast and rock-solid — no bans, no downtime."
> — Fabien Vauchelles, Creator of Scrapoxy
🚀 Start in minutes
Works with your existing Playwright, Puppeteer, or Selenium setup — no framework rewrite required.
1. Install Kameleo:
# Windows
winget install Kameleo.App
# macOS
brew install --cask kameleo
# Docker (Linux & Windows containers available)
docker pull kameleo/kameleo-app:latest
2. Install the SDK:
npm install @kameleo/local-api-client playwright
3. Run your code:
import { KameleoLocalApiClient } from "@kameleo/local-api-client";
import { chromium } from "playwright";
const client = new KameleoLocalApiClient({ basePath: "http://localhost:5050" });
// Pick a real Chrome fingerprint and create a profile
const fingerprints = await client.fingerprint.searchFingerprints("desktop", undefined, "chrome");
const profile = await client.profile.createProfile({ fingerprintId: fingerprints[0].id });
// Connect with Playwright and automate
const browser = await chromium.connectOverCDP(`ws://localhost:5050/playwright/${profile.id}`);
const page = await browser.contexts()[0].newPage();
await page.goto("https://example.com"); // Running undetected ✓
Also available in Python and C#. Supports Selenium, Puppeteer, and Playwright.
❓ FAQ
Is this really free?
Yes! The free tier includes 2 concurrent browsers, 300 minutes of browser usage per month, and 100 cloud profiles. No credit card required to start.
Why on-premise instead of a cloud API?
- Predictable cost at scale — No per-request pricing. At 40 concurrent browsers you pay the same whether you run 1 million or 100 million requests that month
- Data ownership — Your scraped data never leaves your infrastructure
- No scraping rate limits — Only API calls to fetch fingerprints count against limits; your actual scraping traffic is unlimited
- Compliance — Deploy on-premise for sensitive or regulated workloads
How often are browsers updated?
We ship new Chroma kernels within 5 days of every Chrome stable release. Junglefox (Firefox-based) is updated every 2 months. With multikernel support, you can run multiple versions simultaneously.
How is this different from stealth plugins?
Stealth plugins patch browser APIs at the JavaScript level — detectable by anything that runs before your patches or inspects the JS environment itself. Kameleo patches at the C++ engine level inside Chroma and Junglefox, so the masking is applied before any JavaScript ever runs and cannot be unwound from the page context.
When should I use Junglefox instead of Chroma?
Junglefox (Firefox-based) is valuable for two reasons: fingerprint diversity and target-specific detection logic. Some anti-bot systems apply stricter heuristics to Chrome than Firefox, or vice versa. Running a mix of Chroma and Junglefox profiles diversifies your browser engine signature across a session fleet. Junglefox is also the right choice when a target actively distinguishes Chrome from Firefox in its bot-detection stack.
What about headless mode?
Headless mode is available on Business and Enterprise plans. It launches UI-free browser sessions to reduce resource overhead.
How stable is Kameleo for long-running production workloads?
Kameleo is deployed in production by teams running multi-day, high-volume scraping operations. The CLI is designed for unattended runs. If you hit a stability problem, open an issue or reach us on chat and our support team responds directly.
🤝 Contributing
We welcome contributions! Here's how you can help:
- Improve documentation — Found something unclear? Submit a PR to
/docs
- Add detection tests — Know a bot detector we should test against? Check our masking report tests
- Report issues — Open an issue for bugs or feature requests
- Join the community — Ask questions, share feedback, or get help on Discord