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.