Real User Journeys
Run end-to-end flows in a real browser: login, search, checkout, payments, dashboards.
Run “real user journey” checks in stealth browsers. Catch outages, regressions, and bot walls before customers do, and attach screenshots/markdown as evidence when alerts fire.
Run end-to-end flows in a real browser: login, search, checkout, payments, dashboards.
Synthetic monitors often fail first on bot walls. Stealth defaults help your checks behave like real traffic.
Validate uptime and UX from the countries your customers use. Managed egress or BYOP.
Run checks in parallel across browsers, devices, and geos to reduce time-to-detect.
Create a session, connect with Playwright, run your assertions, and tear down. Works in any runner.
On failure, capture screenshots and page markdown for fast root cause. Make alerts actionable, not noisy.
Create a session, connect with Playwright, then run your existing checks. On failure, capture screenshots/markdown via REST tools.
import { chromium } from "playwright";const apiKey = process.env.BROWSERCITY_API_KEY!;const opts = { method: "POST", headers: { Authorization: `Bearer ${apiKey}` } };const session = await fetch("https://api.browser.city/v1/sessions", { ...opts, body: JSON.stringify({ browser: "chromium", egress: { mode: "managed", proxyType: "residential", country: "US" }, }),}).then((r) => r.json());const browser = await chromium.connect(session.endpoint, { headers: { Authorization: `Bearer ${session.token}` },});const context = await browser.newContext();const page = await context.newPage();await page.goto("https://example.com");const title = await page.title();if (!title.toLowerCase().includes("example")) throw new Error("unexpected title: " + title);import osimport requestsfrom playwright.sync_api import sync_playwrightapi_key = os.environ["BROWSERCITY_API_KEY"]session = requests.post( "https://api.browser.city/v1/sessions", headers={"Authorization": f"Bearer {api_key}"}, json={ "browser": "chromium", "egress": {"mode": "managed", "proxyType": "residential", "country": "US"}, },).json()with sync_playwright() as p: browser = p.chromium.connect( session["endpoint"], headers={"Authorization": f"Bearer {session['token']}"}, ) context = browser.new_context() page = context.new_page() page.goto("https://example.com") title = page.title() if "example" not in title.lower(): raise RuntimeError(f"unexpected title: {title}")using Microsoft.Playwright;using System.Net.Http.Headers;using System.Net.Http.Json;var apiKey = Environment.GetEnvironmentVariable("BROWSERCITY_API_KEY")!;var http = new HttpClient();http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);var res = await http.PostAsJsonAsync( "https://api.browser.city/v1/sessions", new { browser = "chromium", egress = new { mode = "managed", proxyType = "residential", country = "US" }, });var session = await res.Content.ReadFromJsonAsync<Session>() ?? throw new Exception("bad response");using var pw = await Playwright.CreateAsync();var browser = await pw.Chromium.ConnectAsync(session.endpoint, new() { Headers = new Dictionary<string, string> { ["Authorization"] = $"Bearer {session.token}", },});var context = await browser.NewContextAsync();var page = await context.NewPageAsync();await page.GotoAsync("https://example.com");var title = await page.TitleAsync();if (!title.ToLowerInvariant().Contains("example")) throw new Exception("unexpected title: " + title);public record Session(string endpoint, string token);import com.microsoft.playwright.*;import java.net.URI;import java.net.http.*;// Create session via your preferred HTTP clientvar apiKey = System.getenv("BROWSERCITY_API_KEY");var auth = "Bearer " + apiKey;var http = HttpClient.newHttpClient();var res = http.send( HttpRequest.newBuilder() .uri(URI.create("https://api.browser.city/v1/sessions")) .header("Authorization", auth) .POST(HttpRequest.BodyPublishers.ofString( "{\"browser\":\"chromium\",\"egress\":{\"mode\":\"managed\",\"proxyType\":\"residential\",\"country\":\"US\"}}")) .build(), HttpResponse.BodyHandlers.ofString());var sessionJson = res.body();var endpoint = extractField(sessionJson, "endpoint");var token = extractField(sessionJson, "token");try (var pw = Playwright.create()) { var browser = pw.chromium().connect( endpoint, new BrowserType.ConnectOptions().setHeaders( java.util.Map.of("Authorization", "Bearer " + token))); var context = browser.newContext(); var page = context.newPage(); page.navigate("https://example.com"); var title = page.title(); if (!title.toLowerCase().contains("example")) throw new RuntimeException("unexpected title: " + title);}static String extractField(String json, String key) { // Use a proper JSON parser in production. This is intentionally minimal. var i = json.indexOf("\"" + key + "\""); if (i < 0) return ""; var start = json.indexOf('"', i + key.length() + 2); var end = json.indexOf('"', start + 1); return (start >= 0 && end > start) ? json.substring(start + 1, end) : "";} Free tier. No credit card. Full stealth from day one.