Playwright Connect
Native BrowserType.connect() integration. Use existing test scripts — just change the connection URL.
Run Playwright tests against real cloud browsers. Custom fingerprints for testing geo-specific content. Mobile emulation for responsive testing.
Native BrowserType.connect() integration. Use existing test scripts — just change the connection URL.
Test on iPhone, Android, tablet viewports with matching user agents, touch events, and screen density.
Run tests from 195+ countries. Verify geo-specific content, localization, and regional restrictions.
Control OS, GPU, WebGL, fonts, timezone, locale. Test how your site behaves across different device profiles.
Run up to 50 concurrent browser sessions. Execute your test suite faster with real cloud browsers.
Capture full session recordings for debugging. Replay exact browser state to diagnose test failures.
Drop in your browser.city endpoint — your existing test scripts work without any other changes.
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" }),}).then((r) => r.json());const browser = await chromium.connect(session.endpoint, { headers: { Authorization: `Bearer ${session.token}` },});const context = await browser.newContext({ locale: "de-DE", timezoneId: "Europe/Berlin",});const page = await context.newPage();await page.goto("https://your-app.com");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"},).json()with sync_playwright() as p: browser = p.chromium.connect( session["endpoint"], headers={"Authorization": f"Bearer {session['token']}"}, ) context = browser.new_context(locale="de-DE", timezone_id="Europe/Berlin") page = context.new_page() page.goto("https://your-app.com")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" });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(new() { Locale = "de-DE", TimezoneId = "Europe/Berlin",});var page = await context.NewPageAsync();await page.GotoAsync("https://your-app.com");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\"}")) .build(), HttpResponse.BodyHandlers.ofString());var session = res.body();try (var pw = Playwright.create()) { var browser = pw.chromium().connect( extractEndpoint(session), new BrowserType.ConnectOptions().setHeaders( java.util.Map.of("Authorization", "Bearer " + extractToken(session)))); var context = browser.newContext( new Browser.NewContextOptions().setLocale("de-DE").setTimezoneId("Europe/Berlin")); var page = context.newPage(); page.navigate("https://your-app.com");}static String extractEndpoint(String json) { return ""; }static String extractToken(String json) { return ""; } Free tier. No credit card. Full stealth from day one.