Web Scraping & Automation

Automate and scrape at scale without detection

Why traditional scraping and automation gets blocked

Anti-bot systems like Cloudflare, DataDome, PerimeterX, and Akamai have moved far beyond IP-based detection. They analyze browser fingerprints, JavaScript execution environments, TLS handshakes, and behavioral patterns. A basic Puppeteer or Selenium setup running headless Chrome is trivially detected — the navigator.webdriver flag, missing browser plugins, and uniform rendering output give it away immediately.

Donut Browser gives your automation real browser profiles with authentic fingerprints. Each profile runs a full browser engine — not a patched headless Chrome — with over 50 spoofed parameters that pass detection services like Pixelscan, IPHey, and fingerprint.com. The free local REST API and MCP server let you manage profiles, proxies, and groups. With the Pro plan, you can also launch profiles, receive Chrome DevTools Protocol ports, and connect Puppeteer or Playwright for full browser automation — including AI-driven workflows with Claude and other LLMs.

Every profile maintains persistent sessions between runs. When you stop and restart a profile via the API, cookies, local storage, and login state are preserved. This lets you build long-running workflows that accumulate browsing history and maintain account sessions over time — something disposable headless browser instances cannot do.

Key Features

Local REST API

Full REST API running on localhost:10108. Manage profiles, proxies, groups, and browser settings programmatically — free for all users. Pro plan adds browser manipulation: launch profiles, receive Chrome DevTools Protocol ports, and connect your automation framework. Token-based authentication keeps the API secure.

MCP Server with 30+ Tools

Built-in MCP (Model Context Protocol) server with over 30 tools. Free tools cover profile management, proxy configuration, VPN control, fingerprint updates, and extension management. Pro plan unlocks browser manipulation tools — launch and control profiles through natural language with Claude or any MCP-compatible LLM.

Fingerprints That Pass Detection

Each profile generates an authentic fingerprint covering Canvas, WebGL, AudioContext, fonts, screen dimensions, hardware specs, and WebRTC. These fingerprints pass Pixelscan, IPHey, and fingerprint.com checks. Even headless mode retains full fingerprint spoofing.

Proxy Per Profile

Assign HTTP, HTTPS, SOCKS4, or SOCKS5 proxies to individual profiles. Each profile maintains its proxy across sessions. Combine with unique fingerprints for complete identity isolation per automation instance.

Puppeteer & Playwright Compatible

Launch a profile via the API, get the Chrome DevTools Protocol port, and connect Playwright or Puppeteer with a single line. Use your existing automation scripts — no SDK or wrapper library required. Works with Selenium too. Requires Pro plan.

Headless Mode

Launch profiles in headless mode via the API for server and CI/CD environments. Headless profiles use the same fingerprint spoofing as headed profiles, so anti-bot systems cannot distinguish them from regular browser sessions. Requires Pro plan.

Automate with the Local API

Donut Browser exposes a local REST API on port 10108 that lets you manage and control browser profiles programmatically. Profile management is free. With the Pro plan, launch profiles, connect with Playwright or Puppeteer, and automate with full fingerprint protection.

Playwright
import { chromium } from 'playwright';

// Step 1: List available profiles
const profilesRes = await fetch('http://localhost:10108/v1/profiles', {
  headers: { 'Authorization': 'Bearer YOUR_API_TOKEN' },
});
const { profiles } = await profilesRes.json();
console.log(`Found ${profiles.length} profiles`);

// Step 2: Launch a profile and get the CDP port
const profileId = profiles[0].id;
const runRes = await fetch(`http://localhost:10108/v1/profiles/${profileId}/run`, {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ headless: false }),
});
const { remote_debugging_port } = await runRes.json();

// Step 3: Connect Playwright to the running profile
const browser = await chromium.connectOverCDP(
  `http://127.0.0.1:${remote_debugging_port}`
);
const context = browser.contexts()[0];
const page = context.pages()[0] || await context.newPage();

// Each profile has a unique fingerprint — automate without detection
await page.goto('https://example.com');
console.log(await page.title());

Core Features — Always Free

Everything you need to get started, without creating an account

Set as Default Browser
Proxy Support (HTTP/SOCKS5)
VPN Support (WireGuard, OpenVPN)
Unlimited Local Profiles
Profile Management API & MCP
Open Source

FAQ

Frequently Asked Questions