Puppeteer Integration

Puppeteer headless Chrome with residential proxy — one launch option, zero setup overhead

Pass BytesFlows credentials directly into Puppeteer's --proxy-server Chrome flag. Works with puppeteer-extra-plugin-stealth — residential IPs + stealth fingerprinting for maximum evasion.

65M+Residential IPs
74Target countries
HTTP + SOCKS5Proxy protocols
stealth-compatiblePlugin support

Puppeteer proxy code examples

BytesFlows uses standard Chromium proxy flags — compatible with all Puppeteer versions.

puppeteer-proxy.js
const puppeteer = require('puppeteer');

const browser = await puppeteer.launch({
  args: [
    '--proxy-server=http://p1.bytesflows.com:8001',
  ],
});

const page = await browser.newPage();

// Authenticate the proxy
await page.authenticate({
  username: 'YOUR_PROXY_USER',
  password: 'YOUR_PROXY_PASS',
});

await page.goto('https://httpbin.org/ip');
const body = await page.evaluate(() => document.body.innerText);
console.log('Your exit IP:', JSON.parse(body).origin);

await browser.close();

page.authenticate() handles proxy HTTP auth challenges. For SOCKS5, use --proxy-server=socks5://p1.bytesflows.com:1080 — SOCKS5 credentials are embedded in the URL format.

Why Puppeteer developers choose BytesFlows

1

Native Chrome flags — no wrappers

BytesFlows uses Chromium's --proxy-server flag. No third-party proxy library needed. Works with any Puppeteer version from 1.x to 23.x, and Puppeteer-extra with all its plugins.

2

Stealth plugin compatible

BytesFlows residential proxies work seamlessly with puppeteer-extra-plugin-stealth. The plugin handles browser fingerprint evasion; BytesFlows handles IP reputation — together they cover both detection vectors.

3

High-concurrency support

Run hundreds of parallel Puppeteer pages through BytesFlows simultaneously. Each page.authenticate() call can use different sub-user credentials for per-page IP isolation at scale.

Puppeteer + proxy technical FAQ

What is the difference between Puppeteer --proxy-server and Playwright proxy option?
Puppeteer uses Chrome command-line flags (--proxy-server=URL) set at browser launch — the proxy applies to all pages in that browser instance. Playwright uses a built-in proxy option object with native per-context proxy support. For per-page proxy in Puppeteer, you need CDP tricks or puppeteer-page-proxy; Playwright handles this natively.
Does puppeteer-extra-plugin-anonymize-ua work with BytesFlows proxies?
Yes. The anonymize-ua plugin randomizes User-Agent headers independently of proxy configuration. BytesFlows residential IPs pair well with this — the combination of a randomized UA + residential IP makes requests appear as organic browser traffic from real users.
How do I handle proxy auth pop-ups in Puppeteer?
Use page.authenticate({ username, password }) before page.goto(). This pre-authorizes the proxy so Chrome doesn't show an auth dialog. If you still get dialogs, listen to the page's dialog event and dismiss it programmatically.
Can I use BytesFlows with Puppeteer in Lambda / serverless environments?
Yes. Use @sparticuz/chromium or chrome-aws-lambda for serverless Puppeteer deployments. BytesFlows proxy is just a --proxy-server flag — it works the same in Lambda as locally. Ensure outbound port 8001 (HTTP) or 1080 (SOCKS5) is open in your VPC security group.

Add residential IPs to your Puppeteer pipeline

1 GB free trial — test every code example on this page without paying.