Skip to content
Integrations

Chrome DevTools Protocol on Browserberg

If you would rather not use a driver library at all, a session is a plain CDP WebSocket. Everything else on this site is a convenience layer over this endpoint.

Connect in one line

import WebSocket from 'ws';

const ws = new WebSocket(`wss://browserberg.com/v1/connect?token=${process.env.BB_TOKEN}`);

ws.on('open', () => {
  ws.send(JSON.stringify({ id: 1, method: 'Page.enable' }));
  ws.send(JSON.stringify({
    id: 2,
    method: 'Page.navigate',
    params: { url: 'https://portal.example.de' }
  }));
});

Details

Transport WebSocket, TLS terminated at the edge
Session creation POST /v1/sessions
Default locale de-DE
Default timezone Europe/Berlin
Wire protocol licence Apache-2.0, schema published
Where sessions run EU bare metal (OVHcloud)

As of 2026-08-30

Questions people actually ask

Why would I use raw CDP instead of a driver?

Mostly you would not. It is worth it when you need a domain a driver does not expose, or when you are building your own abstraction and a driver's opinions are in the way.

What is the most common CDP mistake you see?

Calling Page.addScriptToEvaluateOnNewDocument without Page.enable. It returns a valid-looking identifier and the script silently never runs -- no error, no warning. It cost us real time.

Can two clients drive one session?

One writer, plus any number of read-only observers. That is how live view works without two clients fighting over the same page, and the writer lease is explicit rather than first-come.

Things worth knowing

Page.enable before addScriptToEvaluateOnNewDocument


Without Page.enable, Page.addScriptToEvaluateOnNewDocument returns a valid-looking identifier and the script silently never runs. We lost time to this one; it is in our engineering notes for a reason.

The default locale is de-DE


Sessions default to de-DE and Europe/Berlin because that is the first market. Override both on session creation if you need something else.

One writer per session


A session accepts a single writing client. Read-only observers can attach alongside it, which is how live view works without two clients fighting over the same page.

Point an existing script at us

Five browser hours free, no card. If it runs locally, it runs here with one line changed.