Puppeteer-as-a-Service
Puppeteer-as-a-Service — Cloud Puppeteer over WebSocket
Stop writing Dockerfiles for Chrome. Connect your Puppeteer scripts to a managed pool with one URL change.
- puppeteer-core works as-is with our WebSocket endpoint.
- Same browserWSEndpoint shape as browserless.io — drop-in compatible.
- Anti-bot, captcha solving and proxies optional via query flags.
- Free 1,000 credits. $29/mo Starter for 20k credits.
puppeteer.jsJavaScript
import puppeteer from 'puppeteer-core'
const browser = await puppeteer.connect({
browserWSEndpoint:
'wss://cloud.browserforhire.com?token=' + process.env.BFH_API_KEY,
})
const page = await browser.newPage()
await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ...')
await page.goto('https://news.ycombinator.com')
const stories = await page.$$eval('.athing', (rows) =>
rows.slice(0, 10).map((r) => ({
rank: r.querySelector('.rank')?.textContent,
title: r.querySelector('.titleline > a')?.textContent,
href: r.querySelector('.titleline > a')?.getAttribute('href'),
}))
)
console.log(stories)
await browser.disconnect()What you get
Drop-in compatible
If your code works with browserless.io, change the host and it works here. Same CDP semantics.
Official SDK
@browserforhire/sdk wraps the connect URL builder, retries, and structured extraction.
Pre-warmed pool
p50 cold-start under 250ms. p99 under 800ms. No 5-second Lambda cold start.
FAQ
Is puppeteer or puppeteer-core required?+
puppeteer-core. You do not need to install Chromium locally because we provide it. puppeteer (the full package) also works but adds wasted disk space.
Will my existing puppeteer-extra plugins still work?+
Yes for plugins that operate on the local script context. Stealth plugin features that require local Chromium flags are replaced by our server-side ?stealth=true mode, which is generally more effective.
Ship Chrome to production today.
Free 1,000 credits, no credit card. Drop-in replacement for Browserless.