---
title: "Anti-Detect Browser for Web Scraping — Donut Browser"
description: "Drive real, persistent browser profiles from Puppeteer, Playwright or Selenium over CDP, or from an AI agent over MCP. Free, with no request quota to buy."
url: "https://donutbrowser.com/use-cases/automation/"
---

1. [Home](https://donutbrowser.com/)

2. [Use Cases](https://donutbrowser.com/use-cases)

3. Scrape and automate without detection.

GDPR

CCPA

Hosted in the EU

# Scrape and automate without detection.

Anti-detect browser API for Puppeteer, Playwright, Selenium, and AI agents: free, local, and built on Chrome DevTools Protocol.

[Download Free →](https://donutbrowser.com/#download)

3,751

## Why a real anti-detect browser beats puppeteer-stealth and undetected-chromedriver

> Cloudflare, DataDome, PerimeterX, and Akamai stopped looking at IPs years ago. They read the browser itself: fingerprint, TLS, JavaScript runtime, and how the cursor moves. A patched headless Chrome is the easiest signal in the world to flag.

Donut Browser is a free anti-detect browser with a real engine: Wayfern, not headless Chromium with a stealth plugin. Cloudflare sees a real browser, not a bot signature. DataDome's heuristics see a normal user session. It's a drop-in puppeteer-stealth alternative, playwright-stealth alternative, and undetected-chromedriver alternative, without the cat-and-mouse patching.

Talk to it over a local REST API and an MCP browser server. Pro plans expose a Chrome DevTools Protocol port per profile, so your existing Puppeteer, Playwright, or Selenium scripts work unchanged. Pair it with a residential proxy browser setup for full identity isolation, and use the same profiles for [running many identities at once](https://donutbrowser.com/use-cases/multi-account) or for [ad-ops automation](https://donutbrowser.com/use-cases/affiliate-marketing).

## Stop fighting fingerprint checks. Start scraping.

Free anti-detect browser. Free local REST API. Free MCP server. Pro unlocks the CDP endpoint for Puppeteer, Playwright, and Selenium.

Download Free → [View on GitHub](https://github.com/zhom/donutbrowser)

Features

## Key Features

01

### Anti-detect browser API on localhost

REST API on localhost:10108 for profiles, proxies, and CDP launch. Token-auth, no cloud round-trips, no SDK lock-in.

02

### MCP browser server for AI browser automation

30+ MCP tools for Claude browser automation and any MCP-compatible LLM. Plug LLM browser control into agents and let them drive sessions.

03

### Stealth browser scraping that actually passes

Cloudflare sees a real browser, not a bot signature. DataDome's heuristics see a normal user session: bypass Cloudflare browser checks, bypass DataDome browser checks, bypass PerimeterX.

04

### Residential proxy browser, one IP per scraper

HTTP, HTTPS, SOCKS4, SOCKS5 per profile, persistent across runs. Unique headless browser fingerprint per identity for full isolation.

05

### Puppeteer anti-detect, Playwright anti-detect, Selenium anti-detect

Launch a profile, get the Chrome DevTools Protocol port, connectOverCDP, done. Your existing scripts run as-is. Pro plan.

06

### Headless that doesn't snitch

Headless mode keeps the full fingerprint spoof, so puppeteer not detected by Cloudflare and playwright pass fingerprint check work the same on a server. Pro plan.

## Drive a real anti-detect browser from plain Playwright

One REST call launches a Donut profile and returns a Chrome DevTools Protocol port. Plain connectOverCDP attaches Playwright, Puppeteer, or Selenium: no SDK, no stealth plugin, no patched Chromium. The wayfern npm package re-exports Playwright with humanized mouse, typing, and scroll hooks already wired in.

Playwright

Copy

```
// npm i wayfern playwright
import { chromium } from 'wayfern';

// Launch a profile via the REST API and read its CDP port.
const run = await fetch(`http://localhost:10108/v1/profiles/${profileId}/run`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.DONUT_API_KEY}` },
}).then(r => r.json());

// Plain Playwright connection, no manual CDP wiring.
const browser = await chromium.connectOverCDP(`http://127.0.0.1:${run.remote_debugging_port}`);
const page = browser.contexts()[0].pages()[0];

await page.goto('https://example.com');
console.log(await page.title());
```

[Read the docs →](https://donutbrowser.com/docs/rest-api)

## Watch one call launch a whole fleet

One batch request launches every profile at once, each a real browser you drive with Playwright over its own port. Scroll in and watch it run.

donut@local

running Replay

$

Scripted preview of a batch launch. No live request is made from this page.

Always free

## Everything runs on your machine, no account required

The full profile toolkit works out of the box, with nothing to sign up for and nothing sent to us

- Set as Default Browser

- Proxy Support (HTTP/SOCKS5)

- VPN Support (WireGuard)

- Unlimited Local Profiles

- Profile Management API & MCP

- Open Source

## Questions, answered.

### 01 Is this really a puppeteer-stealth alternative and undetected-chromedriver alternative?

Yes, and a different category. puppeteer-stealth and undetected-chromedriver patch a headless Chrome to hide automation markers. Donut Browser ships a real anti-detect browser engine (Wayfern) with native fingerprint randomization, and exposes it over CDP. There are no plugin hooks to detect, no navigator.webdriver to wipe; you connect Puppeteer, Playwright, or Selenium over Chrome DevTools Protocol to a normal-looking browser process.

### 02 How do I bypass Cloudflare and DataDome without writing a custom solver?

You usually don't need a solver. Launch a profile with a residential proxy, get the CDP port from the REST API, and drive it with Playwright or Puppeteer. Cloudflare sees a real browser, not a bot signature. DataDome's heuristics see a normal user session. If a site challenges you anyway, slow down, add humanized interaction, and rotate profiles; each one is a different identity.

### 03 What is the MCP browser server and what can Claude do with it?

MCP (Model Context Protocol) is the open standard for tool-using LLMs. Donut Browser ships a built-in MCP server with 30+ tools. Free tools cover profiles, proxies, VPN, fingerprints, and extensions. Pro tools cover launch, navigate, click, type, and read DOM: that's Claude browser automation, AI-driven web scraping, and LLM browser control with no glue code.

### 04 How do Puppeteer, Playwright, and Selenium connect?

Call POST /v1/profiles/{id}/run, read remote_debugging_port from the response, then connectOverCDP('http://127.0.0.1:') in Playwright or puppeteer.connect({ browserURL }) in Puppeteer. Selenium attaches the same way via debuggerAddress. No custom SDK, no wrapper library, no rebuilding your scraper.

### 05 How do I scrape without getting blocked at scale?

Distribute work across many profiles, each with its own residential proxy and headless browser fingerprint. That beats raw IP rotation because each profile is a separate browser identity, not just a different exit node. Add natural pacing between actions. Sessions persist between runs, so you can spread a job across hours or days without losing login state.

### 06 Does headless mode still spoof the fingerprint?

Yes. Headless profiles run the same anti-detect engine as headed ones. Set headless: true on the launch endpoint and your CI/CD jobs get the same Pixelscan-class profile as your desktop runs. Pro plan.

### 07 Is the API free?

Profile, proxy, group, tag, version, and MCP management endpoints are free forever and run locally on port 10108. The CDP-launch endpoint (the one that gives Puppeteer/Playwright/Selenium a port to attach to) is on the Pro plan.
