Headless browsers over CDP. One URL, any client.
Point Puppeteer, Playwright or chromedp at a WebSocket URL. Every connection gets a fresh, isolated browser.
Free Explorer plan. No card needed.
Lightpanda
browser=lightpandaThe default. Fast and light on memory, with partial Web API coverage.
Chrome
browser=chromeFull rendering, with live view, recording and persistent profiles.
CloakBrowser
browser=cloakStealth Chromium with a spoofed fingerprint. Enabled per account on request.
Keep your code. Swap the endpoint.
The same Puppeteer, Playwright or chromedp script, pointed at one URL with your token.
Generate a scriptimport puppeteer from 'puppeteer-core';
const browser = await puppeteer.connect({ browserWSEndpoint: 'wss://cdp.hermesbrowsers.com/ws?token=YOUR_TOKEN' });
const context = await browser.createBrowserContext();
const page = await context.newPage();
await page.goto('https://example.com');
console.log('title:', await page.title());
await page.close();
await context.close();
await browser.disconnect();
import { chromium } from 'playwright-core';
const browser = await chromium.connectOverCDP('wss://cdp.hermesbrowsers.com/ws?token=YOUR_TOKEN');
const context = browser.contexts()[0] ?? (await browser.newContext());
const page = await context.newPage();
await page.goto('https://example.com');
console.log('title:', await page.title());
await page.close();
await browser.close();
package main
import (
"context"
"fmt"
"log"
"github.com/chromedp/chromedp"
)
func main() {
wsURL := "wss://cdp.hermesbrowsers.com/ws?token=YOUR_TOKEN"
allocCtx, cancel := chromedp.NewRemoteAllocator(context.Background(), wsURL, chromedp.NoModifyURL)
defer cancel()
ctx, cancel := chromedp.NewContext(allocCtx)
defer cancel()
var title string
if err := chromedp.Run(ctx, chromedp.Navigate("https://example.com"), chromedp.Title(&title)); err != nil {
log.Fatal(err)
}
fmt.Println("title:", title)
}
Connecting to cdp.hermesbrowsers.com…title: Example Domain
Sessions that wait for you. Reconnect, watch, record.
Start a session
One POST returns a browser that outlives your script.
Reconnect from anywhere
Attach to cdp_url from any process, as often as you need.
Take the wheel
live_url streams the screen. Click and type through logins, 2FA and CAPTCHAs.
Keep the recording
Pass record and fetch the MP4 once the session ends.
POST https://cdp.hermesbrowsers.com/v1/browsers{ "browser": "chrome", "profile": "shop-login", "record": true } 201 Created{ "id": "<id>", "status": "running", "browser": "chrome", "profile": "shop-login", "recording": "recording", "cdp_url": "wss://cdp.hermesbrowsers.com/ws?session=<id>&key=<key>", "live_url": "https://app.hermesbrowsers.com/live/<id>?key=<key>", "recording_url": null}
Profiles, proxies and scripts. In the dashboard.
- Profiles
- Logins and cookies carry over between Chrome sessions. Import cookies to start signed in.
- Proxies
- Shared proxies by country, or your own HTTP proxy. 1 GB of shared traffic free.
- Scripts
- Run TypeScript from the dashboard, two minutes a run.
- Session log
- Duration, bandwidth, close reason and every CDP message.
Start free. Upgrade when you scale.
Explorer
$0 / month
5 concurrent sessions, 10 browser hours a month.
Builder
$19 / month
30 concurrent sessions, 300 browser hours a month.