Skip to content

Pricing and traffic

Hosted browsers are paid per GB of traffic from a prepaid balance. What that includes, what counts as traffic, and how to use less of it.

Pricing

  • €1.00 per GB, residential proxy included. By default every session leaves the internet through a residential IP: a real home connection from a consumer internet provider, not a datacenter or hosting address. That traffic is what the €1.00 buys; there is no separate proxy bill.
  • Traffic is measured between the browser and the internet, upload and download combined (1 GB = 109 bytes). See what counts as traffic.
  • No charge for time, sessions or CDP messages.
  • The challenge service on our key (off unless you use it): each solved challenge at the solving service's own price × 1.5, from your balance.
  • Prepaid: top up in the dashboard. A browser needs at least €0.50 to start, and each session is capped at what the balance can pay for when it starts, shared between the browsers you have running (your own maxGb applies if it is lower). A running browser is stopped when the balance reaches zero (usage is reported about every 15 seconds, so the last report can take it slightly below zero).

What counts as traffic

Every byte the browser sends to or receives from a website is counted on the wire, the same way a proxy provider counts it. For a typical page that means:

  • Counted: the page itself and everything it loads: scripts, stylesheets, images, fonts, video, API calls, ads and trackers, WebSockets, plus request headers, cookies and the encryption (TLS) overhead of each connection. Pages keep loading while you wait, so background polling and analytics count too.
  • Not counted: the CDP connection between your code and the browser (commands, results, screenshots, PDFs, page content you read out), the live view in the dashboard, and anything the browser never fetches (requests you block, files it serves from its own cache).

As a rough guide, a light text page costs well under 1 MB, a typical news or shop page 2 to 5 MB, and a heavy single-page app or anything with video 10 MB or more. At €1.00 per GB, 1,000 pages at 3 MB each is about 3 GB. Your own session shows its real numbers: the dashboard lists each session's traffic and its top 20 sites by bytes, and maxGb caps a session so a runaway page cannot eat your balance.

Reducing traffic

Most of a page's weight is usually things a script does not need. The biggest savings, in order:

  1. Block images, media and fonts. Often half or more of a page. Block them by URL pattern in the browser and they never leave it, so they are never billed — and the browser keeps its cache:
javascript
// Playwright: block by URL pattern over CDP (keeps the browser cache on)
const cdp = await context.newCDPSession(page);
await cdp.send("Network.enable");
await cdp.send("Network.setBlockedURLs", {
  urls: ["*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.svg", "*.woff", "*.woff2", "*.ttf", "*.mp4", "*.webm"],
});

// Puppeteer: the same, through its CDP session
const client = await page.createCDPSession();
await client.send("Network.enable");
await client.send("Network.setBlockedURLs", { urls: ["*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.woff2"] });

Avoid page.route() / context.route() and Puppeteer's request interception just to drop requests: they switch the browser cache off, so every page downloads its scripts and styles again, which costs more than the images you saved. Use them only when you need to change requests. The adblock option also blocks ads and trackers for you.

  1. Block ads, analytics and trackers. Abort requests to third-party domains you do not need. The session's top-sites list in the dashboard shows which ones cost you the most.
  2. Do not wait longer than you need. waitUntil: "networkidle" waits for everything a page loads, including ads. Prefer "domcontentloaded" and then wait for the one element you actually need.
  3. Close the browser as soon as you are done. An open page keeps polling in the background. Lower idleTimeoutSec so a forgotten session closes on its own.
  4. Reuse one browser for many pages. Its cache means scripts and styles shared between pages on the same site are downloaded once, not per page. Navigate in the same session rather than starting a new one for each URL.
  5. Call the site's API when you can. Once the browser has a working session, a fetch() from inside the page for the JSON you need is a fraction of the size of loading the page again.
  6. Cap it. Set maxGb on every session so an unexpectedly heavy page stops instead of draining your balance.

Blocking works for most sites, but a few check that images or fonts actually loaded. If a site behaves differently with blocking on, allow that type again for that site.

Want to see it work first? The Playground runs a script in a cloud browser straight from your dashboard, with the live view, console output and screenshots side by side.