Most automations break the moment they have to log in. Gologin Cloud Browser is real Chrome in the cloud that brings cookies, device fingerprint and residential IP back together between runs - a persistent browser session you reach from a Playwright or Puppeteer script, the browser UI, or an AI agent.
Start free · Flat hourly · Residential IPs included · $1/GB after that
The data worth having is behind a login. Getting there once is easy - still being there next month is the hard part.
Cookies don't keep you logged in.
Identity does.
Sites tie a session to the cookie, the device and the network it came from. A browser that did not exist three seconds ago has no history, so every run starts as a first visit. Restore only the cookies and the session arrives on a device the site has never seen. A Gologin profile brings back all three.
Cookies, local storage and everything else the site saved in the browser.
The canvas, WebGL, audio and hardware profile that was there at login.
The residential or mobile IP the account signed in from.
A returning user. The same one as last time.
Want this on a real job? See Dynamic scraping or Web automation.
Every cloud browser restores cookies. These are the parts that decide whether the session is still yours on the next run.
| What you get | Browserbase | Browser Use | Steel | |
|---|---|---|---|---|
| What a saved profile brings back | Cookies, storage, device and IP | Cookies and storage | Cookies and login state | Cookies and storage |
| Same IP on the next run | Yes | No | No | Paid add-on |
| Mobile IPs | Yes | No | No | Your own proxy |
| Longest session, first paid plan | No limit | 6 hours | 4 hours | 15 minutes |
| A person can step in from a link | Yes | Yes | Yes | Yes |
Need to finish a 2FA step by hand? See Cloud Browser UI.
The connect line is the only Gologin part; the rest is plain Playwright or Puppeteer. Every tab below ran as shown against Gologin Cloud Browser.
Sign up with Google and copy your key from the dashboard. Free, no card.
One click in the dashboard, or one API call. The profile keeps the device, the IP and the login.
Install the library and run the script below with your token and profile id. Moving your own script? Replace its launch() call with the connect line. More in the getting started guide.
// before - a fresh browser, and a fresh login, every runconst browser = await chromium.launch();// after - the same profile, already signed inconst browser = await chromium.connectOverCDP(CLOUD_BROWSER_URL);// every line below this stays exactly as it wasnpm install playwright-coreGOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id node scrape.mjswss://cloudbrowser.gologin.com/connect?token=…&profile=…import { chromium } from "playwright-core";
const token = process.env.GOLOGIN_TOKEN;
const profileId = process.env.GOLOGIN_PROFILE_ID;
const endpoint = `wss://cloudbrowser.gologin.com/connect?token=${token}&profile=${profileId}`;
const browser = await chromium.connectOverCDP(endpoint);
const page = await browser.contexts()[0].newPage();
await page.goto("http://quotes.toscrape.com/scroll");
await page.waitForSelector(".quote");
for (let i = 0; i < 30; i++) {
const before = await page.locator(".quote").count();
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
try {
await page.waitForFunction(
(n) => document.querySelectorAll(".quote").length > n,
before,
{ timeout: 3000 }
);
} catch {
break;
}
}
const quotes = await page.$$eval(".quote", (els) =>
els.map((el) => ({
text: el.querySelector(".text")?.textContent,
author: el.querySelector(".author")?.textContent,
}))
);
console.log(quotes.length, quotes[0]);
await page.close();
await browser.close();npm install puppeteer-coreGOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id node scrape.mjswss://cloudbrowser.gologin.com/connect?token=…&profile=…import puppeteer from "puppeteer-core";
const token = process.env.GOLOGIN_TOKEN;
const profileId = process.env.GOLOGIN_PROFILE_ID;
const endpoint = `wss://cloudbrowser.gologin.com/connect?token=${token}&profile=${profileId}`;
const browser = await puppeteer.connect({ browserWSEndpoint: endpoint });
const page = await browser.newPage();
await page.goto("http://quotes.toscrape.com/scroll");
await page.waitForSelector(".quote");
for (let i = 0; i < 30; i++) {
const before = await page.$$eval(".quote", (els) => els.length);
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
try {
await page.waitForFunction(
(n) => document.querySelectorAll(".quote").length > n,
{ timeout: 3000 },
before
);
} catch {
break;
}
}
const quotes = await page.$$eval(".quote", (els) =>
els.map((el) => ({
text: el.querySelector(".text")?.textContent,
author: el.querySelector(".author")?.textContent,
}))
);
console.log(quotes.length, quotes[0]);
await page.close();
await browser.disconnect();pip install playwrightGOLOGIN_TOKEN=your_token GOLOGIN_PROFILE_ID=your_profile_id python scrape.pywss://cloudbrowser.gologin.com/connect?token=…&profile=…import os
from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeoutError
token = os.environ["GOLOGIN_TOKEN"]
profile_id = os.environ["GOLOGIN_PROFILE_ID"]
endpoint = f"wss://cloudbrowser.gologin.com/connect?token={token}&profile={profile_id}"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint)
page = browser.contexts[0].new_page()
page.goto("http://quotes.toscrape.com/scroll")
page.wait_for_selector(".quote")
for _ in range(30):
before = page.locator(".quote").count()
page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
try:
page.wait_for_function(
"n => document.querySelectorAll('.quote').length > n",
arg=before,
timeout=3000,
)
except PlaywrightTimeoutError:
break
quotes = page.eval_on_selector_all(
".quote",
"els => els.map(el => ({text: el.querySelector('.text')?.textContent, author: el.querySelector('.author')?.textContent}))",
)
print(len(quotes), quotes[0])
page.close()
browser.close()Across this category the meter runs on requests, bandwidth and session minutes. A page that comes back empty, a login that asks for a code again, an error halfway through - each ends in a retry, and the retry is billed again.
"Credits are charged whenever Firecrawl's infrastructure processes a request, even if the target site returns an HTTP error status code such as 403 Forbidden or 404 Not Found."
Firecrawl billing documentation
A hard site costs the same
as an easy one.
We bill browser hours. Residential IPs are included, and traffic beyond your allowance is $1/GB. The next lowest published rate in the category is $5.
What 50 GB of residential traffic costs
Each vendor's lowest published rate
On entry plans: Steel $500, Browserbase $600.
A low hourly rate means little if traffic and requests are billed on top. Here is what each vendor puts on your invoice.
| Billing line | Browserbase | Browser Use | Steel | |
|---|---|---|---|---|
| Residential traffic | $1/GB | $10-12/GB | $5/GB | $6-10/GB |
| Per-request fees | None | Yes | None | Yes |
| Billed per | Hour, GB | Hour, GB, search, fetch, extract calls | Hour, GB | Hour, GB, add-on calls |
| Browser hour | $0.07-0.09 | $0.10-0.12 | $0.02 | $0.08-0.10 |
The Gologin MCP server gives Claude direct control of profiles, proxies and cloud sessions. You describe the job; it sets up the accounts and writes the automation against the Cloud Browser API.
claude mcp add gologin -e API_TOKEN=… -- npx gologin-mcp
Create three profiles on US residential IPs, then write me a script that logs into each seller account and pulls last month's invoices.
See Browser for AI agents, or set up the Gologin MCP server.
A cloud browser is a full web browser that runs on a remote server instead of your computer. You drive it from a script through an API, or by hand in the browser UI, while pages load on the server's hardware and network. Most cloud browsers give you a clean browser on every run. A Gologin profile gives you the same browser every time: real Chromium with its own device fingerprint, cookies and residential or mobile IP, all kept between runs, so sites see a returning user.
One page per job: what it needs from a browser, and how to run it on Gologin Cloud Browser.
Connect over CDP with one line. Same selectors, same tests, same CI - the browser just runs in the cloud.
Feeds, "load more" buttons and pages built by JavaScript, loaded the way a person's browser loads them.
Scripts that log in to portals and dashboards once, then run on a schedule without signing in again.
Let Claude build self-learning scripts and do real work. Every profile has its own fingerprint, cookies and IP.
Watch automation live, take control for 2FA or a tricky form, then hand the session back to your script.
Real Chromium your Puppeteer or Playwright script connects to, with its own device fingerprint and a residential IP.
Yes. Sign up with Google and you get an API key right away: 3 runs of up to 15 minutes each on 1 parallel session, no card.
Pages load on our servers, not on your machine, so the target site never reaches your device or your home IP. Each profile is isolated, with its own fingerprint, cookies and IP.
Yes. Every session has a Live View link: open it to watch the script work, or take over by hand for a code or a tricky form, then hand the session back. See Cloud Browser UI.
As long as the site's own login lasts. The profile keeps the cookies, the device and the IP between runs, so the site sees the same user each time. What ends a login is the site expiring it, not us.
Yes. Change the connection line and nothing else: selectors, assertions, waits and CI stay as they are. Playwright, Python Playwright and Puppeteer all connect to the same wss:// address. See Playwright & Puppeteer.
Open the session's Live View and finish that step yourself, then let the script carry on in the same session. If you only need public pages, Web Unlocker returns them and bills only on success.
The profile keeps what the run built: the cookies, the device and the IP. Start the next run in the same profile and it picks up signed in, not from the login page. To see where it stopped, open the session in Live View.
Each profile is isolated: its own cookies, its own fingerprint, its own IP. Nothing is shared between profiles, so a problem in one profile does not reach the others.
One on the free tier and on Professional, 2 on Business, 3 on Enterprise, from 4 on Custom. Add more to any plan for $2 a month each.
Residential and mobile IPs from Gologin Proxies, added to a profile in one API call, or your own proxy.
Browser time past your included hours, at $0.07-0.09 an hour depending on the plan, extra parallel sessions at $2 a month each, and proxy traffic past your allowance at $1/GB. There are no per-request fees.
If the pages you need are public and the job needs no session - send a URL, get the content, move on - Web Unlocker is simpler, and it bills only when a request succeeds. Cloud Browser is for work that needs a session: logging in, staying logged in and acting as the same user across many runs.
One account, one proxy network, one ecosystem. Pick the product the job needs.
Every plan runs the same browser, with residential IPs included. Plans differ in browser hours and parallel sessions.
$0
No card needed
$4.50/ month
For individual developers
$8/ month
For growing teams
$14/ month
For critical operations
Need more at once? Add parallel sessions to any plan for $2 a month each, as many as you need. Proxy traffic beyond your allowance is $1/GB.
From 4 parallel sessions, with a dedicated account manager, a premium SLA and tailored onboarding.
One line connects your script to Gologin Cloud Browser. Build anything that has to stay signed in: scrapers, agents, internal tools and workflows that run every day.
Free to start, no card. Residential IPs included.