---
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 remote MCP. Free local API, 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, built on Chrome DevTools Protocol, with a free local REST API.

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

3,885

## 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 free local REST API. Pro plans add remote MCP for AI agents and 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. Pro unlocks remote MCP and 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

### Remote MCP 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. Pro plan.

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

- 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 remote MCP and what can Claude do with it?

MCP (Model Context Protocol) is the open standard for tool-using LLMs. Donut Browser exposes 30+ tools over remote MCP, which relays each call through Donut cloud to your desktop app. They cover profiles, proxies, VPN, fingerprints, and extensions, plus launch, navigate, click, type, and read DOM: that's Claude browser automation, AI-driven web scraping, and LLM browser control with no glue code. Remote MCP is included in the Pro, Team and Enterprise plans.

### 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, and version 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. Remote MCP for AI agents needs the Pro plan or higher.
