Review · Headless browser

Puppeteer review

Chrome DevTools Protocol automation for Node, with the largest stealth-plugin ecosystem in scraping.

Puppeteer logo

Chrome DevTools team · Apache 2.0 (open source)

8.5/10

2,692 words · 12 min read

Price from
Free
Category
Headless browser
Best for
Chrome-only automation and stealth-plugin workflows
Platforms
Node.js (Chrome & Firefox)

Puppeteer review: the short version

Puppeteer is a headless browser from Chrome DevTools team, and in our 2026 assessment it scores 8.5/10 overall. It is at its best for chrome-only automation and stealth-plugin workflows, it starts at Free, and it expects rotating residential per context, ISP proxies for logged-in sessions behind it. Apache-2.0. Same compute profile as Playwright: RAM and CPU dominate the bill.

The rest of this review covers how it actually works, what it costs at realistic volumes, which proxy type to pair it with, how it behaves against anti-bot systems, where it breaks, and which alternatives make more sense for adjacent workloads. Every figure below reflects list pricing and hands-on testing rather than vendor marketing copy.

  • +puppeteer-extra-plugin-stealth
  • +Raw CDP access for deep control
  • +proxy-chain for authenticated rotation
  • +Enormous community and snippet base

What Puppeteer is and how it works

## Puppeteer review: the short version

Puppeteer is a headless browser from Chrome DevTools team, and in our 2026 assessment it scores 8.5/10 overall. It is at its best for chrome-only automation and stealth-plugin workflows, it starts at Free, and it expects rotating residential per context, ISP proxies for logged-in sessions behind it. Apache-2.0. Same compute profile as Playwright: RAM and CPU dominate the bill.

The rest of this review covers how it actually works, what it costs at realistic volumes, which proxy type to pair it with, how it behaves against anti-bot systems, where it breaks, and which alternatives make more sense for adjacent workloads. Every figure below reflects list pricing and hands-on testing rather than vendor marketing copy.

- puppeteer-extra-plugin-stealth

- Raw CDP access for deep control

- proxy-chain for authenticated rotation

- Enormous community and snippet base

## What Puppeteer is and how it works

Puppeteer's advantage is not the API — it is the ecosystem that grew around it. puppeteer-extra-plugin-stealth applies two dozen patches (navigator.webdriver, chrome.runtime, WebGL vendor strings, permissions queries, plugin arrays) that remove the most commonly checked headless tells, and it remains the fastest way to get a scraper past casual bot detection without paying for an unlocker.

The proxy model is the main operational constraint. Chromium takes a single --proxy-server flag per launch and does not accept inline credentials, so per-request rotation usually means running proxy-chain locally: it opens an authenticated upstream tunnel and exposes a credential-free local endpoint that Chrome accepts. That indirection is cheap but it is real plumbing you must monitor.

In 2026 the honest recommendation is Playwright for new projects and Puppeteer where an existing stealth chain already works. Both drive the same engine; Puppeteer wins on community snippets and antidetect integration, Playwright wins on contexts, multi-engine coverage and debugging.

## Puppeteer scorecard and measured performance

Scores below are relative to the other tools in this directory, not to software in general — a 6 for scale still means a tool that handles more traffic than most projects will ever generate. The performance figures come from crawling a mixed basket of static HTML, JavaScript-rendered commerce and lightly protected listing pages from three regions.

Read them alongside your own target list. The tool almost never determines success rate on its own; the combination of exit IP quality, request fingerprint and request pacing does, which is why two teams running the same framework routinely report success rates thirty points apart.

## Throughput, rendering and resource profile

Throughput numbers only mean something with the cost attached. Puppeteer delivers 8 – 35 pages/min per worker, and can render JavaScript, which is convenient and roughly five to twenty times more expensive per page than a plain fetch.

Use these figures to size infrastructure before committing to a plan or a proxy contract. Work backwards from records per day, apply a realistic success rate, add a retry factor of 1.2–1.6, and only then choose concurrency.

## Puppeteer pricing and real cost per thousand pages

Apache-2.0. Same compute profile as Playwright: RAM and CPU dominate the bill.

Browsers are expensive twice over. Compute runs 250–600 MB of RAM and a meaningful share of a vCPU per context, and the page pulls images, fonts, media and analytics that a parser never needs. Blocking those resource types typically removes 60–80% of transferred bytes, which on residential bandwidth at $2–$8 per GB is usually the largest single saving available. Budget 8–40 pages per minute per worker and size the fleet from there.

A useful discipline: express every option as cost per thousand usable records, not cost per month. A plan that looks cheap and delivers a 60% success rate is more expensive than a premium option at 95%, because the failures consume bandwidth, retries, engineering attention and calendar time.

## Best proxies for scraping with Puppeteer

A headless browser generates a coherent browser fingerprint, which means the IP becomes the weakest link. Attach the proxy at the context or profile level so each identity keeps one exit for its whole session — a browser that changes country mid-session is a louder signal than one on a mediocre IP. For anonymous scraping use rotating residential with a sticky window that outlives the page flow; for logged-in work use a static ISP IP and never rotate it.

With Puppeteer specifically, identity attaches through per-browser proxy via --proxy-server; per-request rotation via a proxy-chain bridge. Get that wiring right before tuning anything else — a rotation bug that reuses one exit across a thousand requests will look exactly like a bad proxy provider.

## How Puppeteer handles anti-bot systems

Modern bot management scores the browser and the network together: WebGL and canvas hashes, audio context, font enumeration, timezone-versus-IP coherence, mouse entropy and TLS fingerprint all feed one risk value. A default headless build fails several of those checks immediately. Patch the obvious tells, keep locale and timezone consistent with the exit country, and accept that against top-tier protection an unlocker API or a commercial antidetect browser is cheaper than an in-house arms race.

Practically, treat detection as a budget rather than a binary. Measure success rate per domain daily, escalate a domain one tier at a time — better headers, then better IPs, then a browser, then an unlocker — and stop at the first tier that clears your threshold. Escalating everything to the most expensive tier is the most common and most costly mistake in scraping operations.

## Scaling Puppeteer in production

Fleet operations decide whether browser scraping is viable. Recycle contexts every 20–50 pages to contain memory creep, run one browser process per few contexts rather than one giant instance, cap navigation timeouts hard, and always run with --disable-dev-shm-usage in containers. Track pages-per-GB and pages-per-vCPU-hour as first-class metrics; they tell you when to move a workload back to plain HTTP.

- Track success rate, cost per thousand records and bytes per page as your three primary metrics

- Retire proxy sessions automatically on repeated failures instead of retrying blindly

- Deduplicate URLs before dispatch — duplicates cost bandwidth, credits and rate-limit headroom

- Validate content, not just HTTP status: a 200 that returns a consent wall is a failed fetch

- Keep a second fetching path warm so a vendor incident degrades throughput instead of stopping it

## Puppeteer pros and cons

No scraping tool is universally correct; each one trades cost, control and maintenance in a different ratio. Puppeteer makes the following trade explicitly.

## Who should use Puppeteer — and who should not

Choose Puppeteer when your workload looks like chrome-only automation and stealth-plugin workflows and your team is comfortable with Node.js (Chrome & Firefox). It fits organisations that have already decided whether they are buying outcomes or building capability, because it sits clearly on one side of that line: you build, you operate, and you keep the margin.

Look elsewhere if you need managed challenge solving, because the anti-bot arms race will otherwise become a permanent engineering line item.

## Compliance and responsible collection

Collecting publicly accessible data is broadly lawful in most jurisdictions, but the surrounding obligations are real: respect robots.txt where it expresses the publisher's intent, avoid authentication walls you have not been granted access to, never collect personal data without a lawful basis under GDPR or equivalent, and keep request rates low enough that you never degrade the target's service.

Reputable proxy providers enforce KYC precisely because misuse of their networks is their liability as well as yours. Document what you collect, why, how long you retain it and who can access it. For AI training corpora, record licensing and provenance per source — that record is increasingly the first thing an auditor or enterprise customer asks to see.

Puppeteer scorecard and measured performance

Scores below are relative to the other tools in this directory, not to software in general — a 6 for scale still means a tool that handles more traffic than most projects will ever generate. The performance figures come from crawling a mixed basket of static HTML, JavaScript-rendered commerce and lightly protected listing pages from three regions.

Read them alongside your own target list. The tool almost never determines success rate on its own; the combination of exit IP quality, request fingerprint and request pacing does, which is why two teams running the same framework routinely report success rates thirty points apart.

Puppeteer scorecard (out of 10)
CriterionScoreAssessment
Ease of adoption8/10A day or two of ramp-up
Scale ceiling6/10Best under a few hundred thousand pages
Anti-bot resilience7/10Good with the right proxies
Documentation8/10Adequate; community fills the gaps
Value for money9/10Exceptional cost per page

Throughput, rendering and resource profile

Throughput numbers only mean something with the cost attached. Puppeteer delivers 8 – 35 pages/min per worker, and can render JavaScript, which is convenient and roughly five to twenty times more expensive per page than a plain fetch.

Use these figures to size infrastructure before committing to a plan or a proxy contract. Work backwards from records per day, apply a realistic success rate, add a retry factor of 1.2–1.6, and only then choose concurrency.

Puppeteer measured behaviour, 2026 test conditions
MetricObservedNotes
Throughput8 – 35 pages/min per workerPer worker or per plan tier, on a stable target
JavaScript renderingFull (Chrome)Rendering multiplies cost 5–20× versus plain HTTP
Memory footprint230 – 550 MB per browserSizing input for container limits
Success profileGood with stealth plugin plus residential exitsDepends far more on proxy quality than on the tool
Proxy supportPer-browser proxy via --proxy-server; per-request rotation via a proxy-chain bridgeHow identity is attached to a request

Puppeteer pricing and real cost per thousand pages

Apache-2.0. Same compute profile as Playwright: RAM and CPU dominate the bill.

Browsers are expensive twice over. Compute runs 250–600 MB of RAM and a meaningful share of a vCPU per context, and the page pulls images, fonts, media and analytics that a parser never needs. Blocking those resource types typically removes 60–80% of transferred bytes, which on residential bandwidth at $2–$8 per GB is usually the largest single saving available. Budget 8–40 pages per minute per worker and size the fleet from there.

A useful discipline: express every option as cost per thousand usable records, not cost per month. A plan that looks cheap and delivers a 60% success rate is more expensive than a premium option at 95%, because the failures consume bandwidth, retries, engineering attention and calendar time.

Puppeteer pricing, 2026 list rates
PlanPriceWhat you get
Puppeteer (self-hosted)$0Chrome/Chromium automation, CDP access
puppeteer-extra + stealth$0Fingerprint evasion plugin chain
Browserless / managed Chromefrom $30 / moHosted Chrome endpoints, concurrency limits

Best proxies for scraping with Puppeteer

A headless browser generates a coherent browser fingerprint, which means the IP becomes the weakest link. Attach the proxy at the context or profile level so each identity keeps one exit for its whole session — a browser that changes country mid-session is a louder signal than one on a mediocre IP. For anonymous scraping use rotating residential with a sticky window that outlives the page flow; for logged-in work use a static ISP IP and never rotate it.

With Puppeteer specifically, identity attaches through per-browser proxy via --proxy-server; per-request rotation via a proxy-chain bridge. Get that wiring right before tuning anything else — a rotation bug that reuses one exit across a thousand requests will look exactly like a bad proxy provider.

Which proxy type to pair with this tool, by target difficulty
Target profileProxy typeTypical priceWhy
Internal APIs, open data, docs sitesDatacenter$0.30 – $2.00 / IP / moNo consumer-IP requirement; cheapest possible bandwidth
Mid-tier commerce, listings, forumsRotating residential$1.00 – $8.00 / GBReal ISP-assigned IPs clear reputation checks
Logged-in accounts, dashboardsISP / static residential$1.50 – $6.00 / IP / moOne stable identity per account, held for months
App-only endpoints, hardest anti-botMobile (4G/5G)$4.00 – $20.00 / GBCarrier CGNAT makes per-IP blocking costly for the target
Everything already blockedUnlocker API$0.50 – $3.00 / 1k requestsChallenge solving handled provider-side, billed per success

Authenticated rotation with proxy-chain

import puppeteer from "puppeteer-extra";
import Stealth from "puppeteer-extra-plugin-stealth";
import { anonymizeProxy } from "proxy-chain";

puppeteer.use(Stealth());

const upstream = "http://user-country-de-session-42:pass@gate.provider.net:7000";
const local = await anonymizeProxy(upstream); // credential-free endpoint

const browser = await puppeteer.launch({
  headless: "new",
  args: [`--proxy-server=${local}`, "--no-sandbox", "--disable-dev-shm-usage"],
});

const page = await browser.newPage();
await page.setRequestInterception(true);
page.on("request", (r) =>
  ["image", "font", "media"].includes(r.resourceType()) ? r.abort() : r.continue(),
);
await page.goto("https://example.com", { waitUntil: "domcontentloaded" });

How Puppeteer handles anti-bot systems

Modern bot management scores the browser and the network together: WebGL and canvas hashes, audio context, font enumeration, timezone-versus-IP coherence, mouse entropy and TLS fingerprint all feed one risk value. A default headless build fails several of those checks immediately. Patch the obvious tells, keep locale and timezone consistent with the exit country, and accept that against top-tier protection an unlocker API or a commercial antidetect browser is cheaper than an in-house arms race.

Practically, treat detection as a budget rather than a binary. Measure success rate per domain daily, escalate a domain one tier at a time — better headers, then better IPs, then a browser, then an unlocker — and stop at the first tier that clears your threshold. Escalating everything to the most expensive tier is the most common and most costly mistake in scraping operations.

Scaling Puppeteer in production

Fleet operations decide whether browser scraping is viable. Recycle contexts every 20–50 pages to contain memory creep, run one browser process per few contexts rather than one giant instance, cap navigation timeouts hard, and always run with --disable-dev-shm-usage in containers. Track pages-per-GB and pages-per-vCPU-hour as first-class metrics; they tell you when to move a workload back to plain HTTP.

  • +Track success rate, cost per thousand records and bytes per page as your three primary metrics
  • +Retire proxy sessions automatically on repeated failures instead of retrying blindly
  • +Deduplicate URLs before dispatch — duplicates cost bandwidth, credits and rate-limit headroom
  • +Validate content, not just HTTP status: a 200 that returns a consent wall is a failed fetch
  • +Keep a second fetching path warm so a vendor incident degrades throughput instead of stopping it

Puppeteer pros and cons

No scraping tool is universally correct; each one trades cost, control and maintenance in a different ratio. Puppeteer makes the following trade explicitly.

Puppeteer — strengths against weaknesses
StrengthsWeaknesses
Largest library of anti-detection patchesOne proxy per browser instance without a bridge
Direct CDP means nothing is off-limitsChrome-only in practice
Lightweight API most Node developers already knowStealth plugins lag behind new detection waves
Works with antidetect browsers over CDPPlaywright now leads on tooling and multi-engine support

Who should use Puppeteer — and who should not

Choose Puppeteer when your workload looks like chrome-only automation and stealth-plugin workflows and your team is comfortable with Node.js (Chrome & Firefox). It fits organisations that have already decided whether they are buying outcomes or building capability, because it sits clearly on one side of that line: you build, you operate, and you keep the margin.

Look elsewhere if you need managed challenge solving, because the anti-bot arms race will otherwise become a permanent engineering line item.

Compliance and responsible collection

Collecting publicly accessible data is broadly lawful in most jurisdictions, but the surrounding obligations are real: respect robots.txt where it expresses the publisher's intent, avoid authentication walls you have not been granted access to, never collect personal data without a lawful basis under GDPR or equivalent, and keep request rates low enough that you never degrade the target's service.

Reputable proxy providers enforce KYC precisely because misuse of their networks is their liability as well as yours. Document what you collect, why, how long you retain it and who can access it. For AI training corpora, record licensing and provenance per source — that record is increasingly the first thing an auditor or enterprise customer asks to see.

Puppeteer FAQs

How do I rotate proxies per page in Puppeteer?+

Launch a new browser per proxy, or front an authenticated gateway with proxy-chain and restart the local endpoint between sessions.

Does the stealth plugin defeat Cloudflare?+

Not reliably in 2026. It clears basic headless checks; managed challenges need an unlocker API or a hardened antidetect browser plus residential IPs.

Puppeteer or Playwright for scraping?+

Playwright for new builds — per-context proxies and better tracing. Puppeteer if you already depend on its stealth chain.

Keywords covered

scraping proxy providers · proxy for web crawler · puppeteer proxy authentication · rotating proxies for scraping

Puppeteer alternatives

Playwright logo

Playwright

9.3/10

Headless browser · Microsoft

Headless Chromium, Firefox and WebKit with per-context proxies — the default engine for JavaScript-rendered scraping targets.

Price from
Free
Platforms
Node · Python · .NET · Java
Best for
Dynamic, JS-rendered and login-gated pages
Proxies
Per-browser and per-context HTTP/SOCKS5 proxies with username auth
  • + Per-context proxy rotation
  • + Network interception and request blocking
  • + Auto-wait removes flaky sleeps
  • + Codegen and trace viewer for debugging
Browserbase & Stagehand logo

Browserbase & Stagehand

8.3/10

Managed platform · Browserbase

Managed headless browser infrastructure with session replay, plus an AI agent layer that drives pages from natural language.

Price from
free tier · from $39 / mo
Platforms
Cloud · Playwright/Puppeteer CDP · Stagehand SDK
Best for
AI browser agents and teams that refuse to run a browser fleet
Proxies
Built-in residential proxies per session, or bring your own
  • + Connect existing Playwright code over CDP
  • + Live view and session replay for debugging
  • + Stagehand act/extract/observe primitives
  • + Captcha solving and stealth mode built in
Crawlee logo

Crawlee

9.0/10

Crawling framework · Apify

Batteries-included crawler for Node and Python with automatic proxy rotation, session pooling and per-session ban tracking.

Price from
Free
Platforms
Node.js · Python
Best for
Production crawlers built fast, with ban handling included
Proxies
First-class ProxyConfiguration with rotation, tiers and automatic retirement of banned sessions
  • + SessionPool with automatic ban detection
  • + Tiered proxy configuration (cheap first, expensive on retry)
  • + Unified request queue across HTTP and browser crawlers
  • + Adaptive crawler picks HTTP vs browser per page

Puppeteer head-to-head comparisons

Related articles

All articles →

Related free proxy tools

All tools →

Trusted partners