An AI agent browser is a cloud browser built for autonomous agents: one device fingerprint, one residential proxy and one set of cookies on every run. It clicks, types and uploads in a real browser, and next week’s run starts already signed in.
Start free · Flat hourly · Residential proxies included · $1/GB after that
Cookies, device fingerprint and residential IP come back as one identity on every run, so the site sees the same returning user on run 40 as on run 1.
The agent signs in once, a person types the verification code in the live session, and the profile is saved.
Same device, same address, same account. No login screen and nothing to hand back to a person.
Nothing has drifted. One account on one consistent device the whole time.
Want the mechanics? Read how to connect a profile, then create your first one.
What each vendor's own documentation says about storage, device, IP and session length.
| What a profile keeps | Browserbase | Browser Use | Steel | Kernel | |
|---|---|---|---|---|---|
| Cookies and local storage | Yes | Yes | Yes | Yes | Yes |
| Session storage, IndexedDB | Yes | Yes | Not published | IndexedDB | Not published |
| Device fingerprint | Yes | Not published | New each session | User agent only | Not published |
| IP address | Yes | No | No | Paid add-on | No |
| Profile kept | Until deleted | Until deleted | Not published | 30 days unused | Not published |
| Longest session | No limit | 6 hours | 4 hours | 24 hours | 72 hours |
How Kernel did in our own tests: read the Kernel.sh review.
One profile, one identity: fingerprint, user agent and cookies handed back together, not put together from parts.
Check it against your own stack. Read what a Cloud Browser profile holds, then browse the Profiles API.
Ask Claude for anything. When the page moves, the agent finds the new way and writes the fix down.
Building this yourself? See the agent browser CLI, or set up the MCP server and let Claude drive.
The same session sits behind Playwright, Puppeteer and Python over CDP, so your browser automation code drives it unchanged. 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. Prefer to let Claude drive? Set up the MCP server. More in the getting started guide.
npm 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()Every session has a live URL. Open it and you are inside the browser your agent is driving, however long it has been running.
Open the live URL and you are in the same browser, same cookies, same address. Finish the step, close the tab, the run keeps going.
Takeover is an API call, not a support ticket. Any moment, any live session, no restart and no second login.
Embed the live session in your own dashboard. Your users drive a signed-in browser and never leave your product.
Building it in? Read the Live View docs, or see Cloud Browser UI.
On a real agent workload, traffic is the biggest line on the invoice, and the last one vendors put on the pricing page.
Two lines on the invoice.
Both on the pricing page.
We bill browser hours and traffic beyond your allowance, at $1/GB. An idle session closes itself after 20 minutes instead of billing on.
What 50 GB of residential traffic costs
Each vendor's lowest published rate
On entry plans: Steel $500, Browserbase $600.
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 account, one proxy network, one ecosystem. Pick the product the job needs.
Using a browser as the hands of an autonomous agent: clicking, typing, uploading and moving between pages, while one browser profile keeps the cookies, the device fingerprint and the residential IP across runs. Every run picks up from the same state.
As long as the site's own login lasts. The profile comes back with the same cookies, the same device and the same IP, so the session picks up where it left off. What ends a login is the site expiring it, not us.
As long as the job needs. There is no cap on active session time, so a nine-hour run is one session, not a chain of reconnects. A session left idle for 20 minutes closes itself, so you never pay for a browser nobody is driving.
Every session has a live URL. Open it and you are inside the browser your agent is driving, on the same page, in the same session. Finish the step by hand and the run carries on from the next one. The URL comes from the dashboard or the API.
Yes. The live session URL can be embedded, so your users drive a signed-in browser without leaving your app, and you do not build a remote browser yourself.
Yes. Sessions connect over CDP, so anything that drives Playwright or Puppeteer drives a Gologin session with one line changed. Selectors, waits, assertions and CI stay as they are. Rather not write driver code? Use the MCP server or the agent browser CLI.
Yes. The agent browser CLI gives it snapshot, click, type, fill, screenshot, PDF and upload on page references instead of fragile selectors, so the agent says what it wants and gets the element.
It turns Gologin profiles, proxies and cloud sessions into tools your assistant calls directly, so Claude or Cursor can create a profile, add a proxy and start a session without you wiring an SDK. The same session sits behind the MCP server, the CLI and a plain CDP connection.
Yes. Residential IPs come with the session. Mobile IPs from Gologin Proxies attach to a profile in one API call, and your own proxies attach the same way. The session uses whatever the profile carries.
Open the live session and complete the step yourself; the agent carries on after you. If you only need the page and not the session, Web Unlocker returns the rendered public page and bills only on success.
When the job needs no account. A one-off fetch of a public page has nothing to stay logged in to, so Web Unlocker takes a URL and returns the rendered page, billed only on success. Use Cloud Browser when the job holds an account: anything that has to be signed in on the second run and the hundredth.
One line connects your agent to a session that keeps its identity: cookies, device fingerprint and residential IP. Build anything that must still be signed in on the hundredth run.
Free to start, no card. Residential IPs included.
For us it came down to two. Beacon Labs is the only one that kept up when we scaled past 40 client accounts, so that is where the budget went.
▲ 128ReplyShare