{
 "features_resolved": {
  "snapshot_any": false,
  "snapshot_mem": false,
  "fork": false,
  "pause_resume": false,
  "persistent_disk": false,
  "whole_disk": false,
  "persist_scope": true,
  "volumes": false,
  "auto_stop_idle": true,
  "long_sessions": false,
  "custom_image": null,
  "image_snapshot": false,
  "image_oci": false,
  "vm_isolation": false,
  "docker_inside": false,
  "nested_virt": false,
  "root": null,
  "systemd": null,
  "browser": true,
  "desktop": false,
  "computer_use": true,
  "code_interpreter": null,
  "browser_control": true,
  "desktop_control": false,
  "browser_and_desktop": false,
  "anti_bot": true,
  "captcha_solving": true,
  "residential_ip": true,
  "agent_harnesses": true,
  "ssh": false,
  "public_ipv4": false,
  "inbound_https": false,
  "custom_domain": null,
  "raw_tcp_inbound": null,
  "egress_allowlist": true,
  "open_internet": true,
  "static_egress_ip": false,
  "private_network": null,
  "self_host": true,
  "byoc": true,
  "open_source": true,
  "soc2": true,
  "hipaa": true,
  "sso": true,
  "gpu": true,
  "arm64": false,
  "windows": false,
  "macos": false,
  "lang_python": true,
  "lang_node": true,
  "lang_go": null,
  "lang_rust": null,
  "lang_java": null,
  "gpu_desktop": null,
  "credential_injection": null,
  "egress_http_rules": true,
  "wake_on_request": false,
  "live_resize": false,
  "fork_running": false,
  "memory_snapshot_fork": false,
  "webhooks": true,
  "scheduled_wakeups": null,
  "audit_logs": null,
  "eu_data_residency": true,
  "zero_data_retention": null,
  "scoped_api_keys": null,
  "spend_limits": null,
  "mcp_server": true,
  "usage_api": false,
  "snapshot_auto": false,
  "snapshot_on_demand": true,
  "harness_api": false,
  "own_agent_api": true,
  "fast_boot": null,
  "strong_isolation": false,
  "ingress_rules": true,
  "guest_firewall": false,
  "secret_proxy": false,
  "secret_proxy_any": false,
  "volume_attach": false,
  "volume_shared": false,
  "sidecar": null,
  "fuse": null,
  "kernel_features": null,
  "burst": null
 },
 "company": {
  "id": "browserless",
  "checked": "2026-09-30",
  "company": "Browserless",
  "ownership": {
   "value": "bootstrapped",
   "parent": null,
   "source": "https://www.browserless.io/about",
   "quote": "I knew a solution like Browserless could dramatically simplify the work and maintenance, but none existed, so I started Browserless. Joel Griffith, Founder & CEO"
  },
  "stage": {
   "value": "bootstrapped",
   "source": "https://www.browserless.io/about",
   "quote": "Browserless is here so you don't have to pay a team of engineers to build, deploy, and maintain these systems.",
   "confidence": "low",
   "note": "No accelerator, investor, or funding-round language found on the company's own About/Pricing pages, its GitHub org, or in Hacker News coverage (including the 2017 Launch HN post) in the time budget; Crunchbase was blocked (Cloudflare) and no press coverage of a raise was found. Absence of evidence is not proof of no funding, so this is a low-confidence inference from a single-founder narrative rather than a confirmed statement of 'bootstrapped'."
  },
  "accelerators": [],
  "total_funding_usd": {
   "value": null,
   "status": "unknown"
  },
  "last_round": {
   "type": null,
   "amount_usd": null,
   "date": null,
   "leads": [],
   "status": "unknown",
   "source": "",
   "quote": ""
  },
  "investors": [],
  "portfolio_listings": [],
  "revenue": {
   "value": null,
   "status": "unknown"
  },
  "employees": {
   "value": null,
   "source": ""
  },
  "note": "Founded by Joel Griffith (Founder & CEO), who describes starting Browserless solo after hitting headless-Chrome infrastructure pain as an engineer (About page). Launched publicly via 'Launch HN: Browserless. Hosted headless Chrome' (Nov 2017). GitHub org 'browserless' created 2019-05-31. Company markets itself on customer/usage traction (10,000+ paying customers, 13,000+ GitHub stars, 175M+ Docker pulls) rather than any funding milestone, and no VC, accelerator, or press-covered raise could be found — consistent with, but not confirmed as, a bootstrapped/independent company. A buyer should treat the funding stage and total-funding fields as unverified rather than assume no capital was ever raised."
 },
 "id": "browserless",
 "name": "Browserless",
 "url": "https://www.browserless.io/pricing",
 "category": "browser",
 "isolation": "container",
 "modes": [
  {
   "key": "free-quota-only",
   "label": "Free quota only",
   "flags": [],
   "os": [
    "linux"
   ],
   "regions": null,
   "gpu_only": false,
   "features": {},
   "pricing": "sizes",
   "sizes": [
    {
     "name": "Free quota only",
     "vcpu": null,
     "ram_gib": null,
     "disk_gib": null,
     "hour": null,
     "month_cap": null
    }
   ],
   "requires_always_on": false,
   "always_on_month_per_instance": null,
   "commit_note": null,
   "min_billed_seconds": 30,
   "granularity_s": 30,
   "start_fee": null,
   "boot_overhead_s": null,
   "multiplier": 1,
   "windows_vcpu_h": null,
   "gpu": null,
   "note": "1,000 units/month; cannot buy overage. Browser runs server-side (Linux Chromium containers); os set to linux."
  },
  {
   "key": "prototyping-unit-overage",
   "label": "Prototyping unit overage",
   "flags": [],
   "os": [
    "linux"
   ],
   "regions": null,
   "gpu_only": false,
   "features": {},
   "pricing": "sizes",
   "sizes": [
    {
     "name": "Prototyping",
     "vcpu": null,
     "ram_gib": null,
     "disk_gib": null,
     "hour": 0.24,
     "month_cap": null
    }
   ],
   "requires_always_on": false,
   "always_on_month_per_instance": null,
   "commit_note": null,
   "min_billed_seconds": 30,
   "granularity_s": 30,
   "start_fee": null,
   "boot_overhead_s": null,
   "multiplier": 1,
   "windows_vcpu_h": null,
   "gpu": null,
   "note": "1 unit/30 s connection; overage $0.002/unit. Included allowance belongs to selected plan, not free.monthly_credit. Browser runs server-side (Linux Chromium containers); os set to linux."
  },
  {
   "key": "starter-unit-overage",
   "label": "Starter unit overage",
   "flags": [],
   "os": [
    "linux"
   ],
   "regions": null,
   "gpu_only": false,
   "features": {},
   "pricing": "sizes",
   "sizes": [
    {
     "name": "Starter",
     "vcpu": null,
     "ram_gib": null,
     "disk_gib": null,
     "hour": 0.204,
     "month_cap": null
    }
   ],
   "requires_always_on": false,
   "always_on_month_per_instance": null,
   "commit_note": null,
   "min_billed_seconds": 30,
   "granularity_s": 30,
   "start_fee": null,
   "boot_overhead_s": null,
   "multiplier": 1,
   "windows_vcpu_h": null,
   "gpu": null,
   "note": "1 unit/30 s connection; overage $0.0017/unit. Included allowance belongs to selected plan, not free.monthly_credit. Browser runs server-side (Linux Chromium containers); os set to linux."
  },
  {
   "key": "scale-unit-overage",
   "label": "Scale unit overage",
   "flags": [],
   "os": [
    "linux"
   ],
   "regions": null,
   "gpu_only": false,
   "features": {},
   "pricing": "sizes",
   "sizes": [
    {
     "name": "Scale",
     "vcpu": null,
     "ram_gib": null,
     "disk_gib": null,
     "hour": 0.18,
     "month_cap": null
    }
   ],
   "requires_always_on": false,
   "always_on_month_per_instance": null,
   "commit_note": null,
   "min_billed_seconds": 30,
   "granularity_s": 30,
   "start_fee": null,
   "boot_overhead_s": null,
   "multiplier": 1,
   "windows_vcpu_h": null,
   "gpu": null,
   "note": "1 unit/30 s connection; overage $0.0015/unit. Included allowance belongs to selected plan, not free.monthly_credit. Browser runs server-side (Linux Chromium containers); os set to linux."
  },
  {
   "key": "agent-run-beta",
   "label": "Managed Agent Run API",
   "flags": [
    "beta"
   ],
   "pricing": "sizes",
   "sizes": [
    {
     "name": "Managed Agent Run",
     "hour": null,
     "month_cap": null,
     "vcpu": null,
     "ram_gib": null
    }
   ],
   "max_session_h": 0.25,
   "note": "Cloud plans only. Timeout 10 seconds–15 minutes, maxSteps 1–60. Browser and model managed; exact extra agent-unit tariff is not published on the pricing page."
  }
 ],
 "storage": {
  "included_disk_gib": null,
  "disk_gib_month": null,
  "disk_billed_when_stopped": null,
  "snapshot_gib_month": null,
  "paused_ram_billed": null
 },
 "network": {
  "egress_free_gib": null,
  "egress_gib": null,
  "ipv4_month": null,
  "ipv4_available": null,
  "residential_proxy_gib": null,
  "internet": {
   "default": "full"
  }
 },
 "plans": [
  {
   "name": "Free",
   "fee": 0,
   "flags": [],
   "fee_is_credit": false,
   "included_usd": 0,
   "per_seat": null,
   "concurrency": 2,
   "max_session_h": 0.03333333333333333,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": [
    "Free quota only"
   ],
   "note": "1,000 units/month; 1-day persisted sessions/replays; 8 h logs."
  },
  {
   "name": "Prototyping monthly",
   "fee": 35,
   "flags": [],
   "fee_is_credit": false,
   "included_usd": 40,
   "per_seat": null,
   "concurrency": 5,
   "max_session_h": 0.25,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": [
    "Prototyping"
   ],
   "note": "20,000 shared units/mo. 0.002/unit overage. Max session 15 min. Proxy and solves consume same units."
  },
  {
   "name": "Starter monthly",
   "fee": 200,
   "flags": [],
   "fee_is_credit": false,
   "included_usd": 306,
   "per_seat": null,
   "concurrency": 30,
   "max_session_h": 0.5,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": [
    "Starter"
   ],
   "note": "180,000 shared units/mo. 0.0017/unit overage. Max session 30 min. Proxy and solves consume same units."
  },
  {
   "name": "Scale monthly",
   "fee": 500,
   "flags": [],
   "fee_is_credit": false,
   "included_usd": 750,
   "per_seat": null,
   "concurrency": 80,
   "max_session_h": 1,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": [
    "Scale"
   ],
   "note": "500,000 shared units/mo. 0.0015/unit overage. Max session 60 min. Proxy and solves consume same units."
  },
  {
   "name": "Prototyping annual",
   "fee": 25,
   "flags": [
    "commit"
   ],
   "fee_is_credit": false,
   "included_usd": 40,
   "per_seat": null,
   "concurrency": 10,
   "max_session_h": 0.25,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": [
    "Prototyping"
   ],
   "note": "Annual commitment $300/year. Same 20,000 units/month. Annual adds concurrency; not a separate extra fee."
  },
  {
   "name": "Starter annual",
   "fee": 140,
   "flags": [
    "commit"
   ],
   "fee_is_credit": false,
   "included_usd": 306,
   "per_seat": null,
   "concurrency": 40,
   "max_session_h": 0.5,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": [
    "Starter"
   ],
   "note": "Annual commitment $1680/year. Same 180,000 units/month. Annual adds concurrency; not a separate extra fee."
  },
  {
   "name": "Scale annual",
   "fee": 350,
   "flags": [
    "commit"
   ],
   "fee_is_credit": false,
   "included_usd": 750,
   "per_seat": null,
   "concurrency": 100,
   "max_session_h": 1,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": [
    "Scale"
   ],
   "note": "Annual commitment $4200/year. Same 500,000 units/month. Annual adds concurrency; not a separate extra fee."
  },
  {
   "name": "Enterprise",
   "fee": null,
   "flags": [
    "sales"
   ],
   "fee_is_credit": false,
   "included_usd": 0,
   "per_seat": null,
   "concurrency": null,
   "max_session_h": null,
   "max_vcpu": null,
   "max_ram_gib": null,
   "sizes_allowed": null,
   "note": "Dedicated / commercial self-host; GPUs/custom OS/cloud; warm browsers, custom sessions, SSO."
  }
 ],
 "free": {
  "monthly_credit": null,
  "one_time_credit": null
 },
 "features": {
  "linux": null,
  "windows": false,
  "macos": false,
  "arm64": false,
  "gpu": true,
  "snapshot": "none",
  "pause_resume": false,
  "fork": false,
  "persistent_disk": true,
  "volumes": null,
  "auto_stop_idle": true,
  "max_session_h": 1,
  "custom_image": null,
  "docker_inside": false,
  "nested_virt": false,
  "root": null,
  "systemd": null,
  "browser": true,
  "desktop": false,
  "computer_use": true,
  "code_interpreter": null,
  "agent_harnesses": true,
  "ssh": false,
  "public_ipv4": false,
  "inbound_https": false,
  "custom_domain": null,
  "raw_tcp_inbound": null,
  "egress_allowlist": true,
  "static_egress_ip": false,
  "private_network": null,
  "self_host": true,
  "byoc": true,
  "open_source": true,
  "soc2": true,
  "hipaa": true,
  "sso": true,
  "gpu_types": [],
  "regions": [
   "us",
   "eu"
  ],
  "browser_control": true,
  "desktop_control": false,
  "anti_bot": true,
  "captcha_solving": true,
  "egress_ip_type": "datacenter+residential",
  "ip_note": "Built-in residential proxy 6 units/MB (~$12.29/GB at Prototyping overage $0.0020/unit, ~$9.22/GB at Scale) and datacenter proxy 2 units/MB on all plans; BYO proxy on paid plans only; city targeting needs Scale.",
  "mcp_server": true,
  "webhooks": true,
  "egress_http_rules": true,
  "lang_python": true,
  "lang_node": true,
  "browser_agent_integrations": [
   "Browser Use",
   "Stagehand",
   "LangChain",
   "AgentKit",
   "Anthropic Computer Use",
   "OpenAI Computer Use",
   "Gemini Computer Use"
  ],
  "snapshot_auto": false,
  "snapshot_on_demand": true,
  "own_agent_api": true,
  "harness_api": false,
  "egress_allowlist_level": "domain",
  "ingress_rules": true,
  "guest_firewall": false,
  "secret_proxy": false,
  "isolation": "container",
  "image_oci": false,
  "fork_running": false,
  "memory_snapshot_fork": false,
  "wake_on_request": false,
  "volume_attach": false,
  "volume_shared": false,
  "live_resize": false,
  "eu_data_residency": true,
  "open_internet": true,
  "usage_api": false,
  "persist_scope": "profile"
 },
 "perf": {
  "cpu_runs_s": null,
  "cold_start_ms": null,
  "burst_tti_ms": null,
  "dax_s": null
 },
 "caveats": [
  "Storage, snapshot GiB-month and public IPv4 prices are not published in the reviewed sources; null is not free.",
  "No guaranteed vCPU allocation published; browser-hour is not a verified 4-vCPU/8-GiB VM equivalent. The sizes card keeps unknown hardware null; do not coerce it to zero or auto-rank against resource-guaranteed VMs.",
  "Browser RAM is not published unless a specific mode overrides it.",
  "One unit is connection-time, not one API call regardless of duration. Reconnection is a new minimum block.",
  "Included_usd is the included unit quota valued at that tier overage rate (not cash and not model credits); deduct once. Network block stays unknown because proxy bytes consume plan-dependent shared units.",
  "Annual is self-serve but marked sales/commit opt-in in estimator per card-spec annual-commit convention. GPU type and custom OS pricing are quote-only.",
  "No plan below Enterprise permits an uninterrupted eight-hour session (Scale cap 1 h). Splitting may preserve profile but is not equivalent to uninterrupted processes.",
  "Proxy and CAPTCHA units: residential 6 units/MB, datacenter 2 units/MB, 10 units per successful CAPTCHA. At overage rates: Prototyping $12.29/GiB residential, $4.10/GiB datacenter, $0.02/solve; Starter $10.44 / $3.48 / $0.017; Scale $9.22 / $3.07 / $0.015. Free has no paid overage."
 ],
 "sources": [
  "https://www.browserless.io/pricing",
  "https://docs.browserless.io/llms-full.txt"
 ],
 "fleet": {
  "default_max_instances": 2,
  "default_max_vcpu": null,
  "default_max_gpus": null,
  "raise": "self-serve",
  "raise_time_days": null,
  "verification": "Free tier explicitly says no card required. Paid subscription for higher tiers; additional screening unspecified.",
  "tiers": "Monthly Prototyping/Starter/Scale 5/30/80; annual versions 10/40/100; Enterprise hundreds/thousands via sales.",
  "notes": "Managed browser concurrency, not general VM fleet; annual billing buys extra slots. 300/1,000 not standard self-serve capacity. Free max session 2 minutes and usage-unit budget also constrain fleet work.",
  "sources": [
   "https://www.browserless.io/pricing"
  ],
  "researched": "2026-09-28"
 },
 "audit_2026_09_29": {
  "applied": 14,
  "source": "checked against the provider's live pricing and docs pages",
  "reviewed": 1
 },
 "feature_evidence": {
  "snapshot_auto": {
   "value": false,
   "source": "https://docs.browserless.io/baas/session-management/persisting-state",
   "quote": "await browser.close(); // Closes the browser; session data is saved to disk",
   "note": "Persisted sessions (POST /session with ttl) keep an isolated userDataDir (cookies, localStorage, cache) on disk across browser restarts, but 'a new browser process starts on reconnect': this is disk/profile persistence (persistent_disk analogue), not a state snapshot; no memory/process state is saved. Persisted-session retention per plan: 1/7/30/90 days (pricing page).",
   "checked": "2026-09-29"
  },
  "snapshot_on_demand": {
   "value": true,
   "source": "https://docs.browserless.io/baas/features/authenticated-profiles",
   "quote": "Browserless captures the cookies, `localStorage`, and `IndexedDB` from the running browser and persists them under the profile name.",
   "note": "Browser-profile checkpoint only (CDP Browserless.saveProfile; 2 MB captured-state cap, 50 origins), no memory/tabs. Many new sessions can start from one profile in parallel ('Each session gets its own working copy'), so it acts as a template/fork of auth state, not of a machine.",
   "checked": "2026-09-29"
  },
  "own_agent_api": {
   "value": true,
   "source": "https://docs.browserless.io/rest-apis/agent-run",
   "quote": "Run a managed AI agent that drives a real browser to complete a task described in plain English.",
   "note": "Browserless's own managed agent only (Agent Run API, BETA, Cloud plans): POST /agent/run with a prompt, poll GET /agent/run/{id} for status plus streamed step rationales and full turn transcript, list runs, cancel/delete, webhooks. Follow-up endpoint POST /agent/run/{id}/continue exists but is 'Not enabled in v1'. No Claude Code/Codex etc. (those connect to Browserless from outside via MCP/CDP).",
   "checked": "2026-09-29"
  },
  "harness_api": {
   "value": false,
   "source": "https://docs.browserless.io/rest-apis/agent-run",
   "quote": "Run a managed AI agent that drives a real browser to complete a task described in plain English.",
   "note": "Browserless's own managed agent only (Agent Run API, BETA, Cloud plans): POST /agent/run with a prompt, poll GET /agent/run/{id} for status plus streamed step rationales and full turn transcript, list runs, cancel/delete, webhooks. Follow-up endpoint POST /agent/run/{id}/continue exists but is 'Not enabled in v1'. No Claude Code/Codex etc. (those connect to Browserless from outside via MCP/CDP).",
   "checked": "2026-09-29"
  },
  "egress_allowlist": {
   "value": true,
   "source": "https://docs.browserless.io/rest-apis/agent-run",
   "quote": "`startUrl` sets the first navigation target, `allowedDomains` restricts navigation to an allowlist",
   "note": "Only for the managed Agent Run API and only for navigation (not documented as a full network egress filter). For BaaS/BQL sessions the controlling client can block requests by URL pattern with reject() (a denylist it sets itself), and the 1Password integration has an origin allow-list for secret fills. No account-level/default-deny network policy documented.",
   "checked": "2026-09-29",
   "level": "domain"
  },
  "egress_http_rules": {
   "value": true,
   "source": "https://docs.browserless.io/bap/network-control",
   "quote": "Match by resource `type`, glob-style `url` patterns, `regex`, or HTTP `method`.",
   "note": "reject() / request interception run in Browserless's managed browser and can block by method, URL/path regex and resource type, or answer requests with a mocked response; but they are set per session by the same client that drives the browser, not an admin policy the agent cannot change. No header-based rules documented.",
   "checked": "2026-09-29"
  },
  "ingress_rules": {
   "value": true,
   "source": "https://docs.browserless.io/baas/monitor-sessions/hybrid-automation",
   "quote": "Create a `liveURL` through CDP and Browserless returns a short-lived link that opens in a browser tab, with no API token embedded.",
   "note": "No user-exposed ports: session CDP/BQL endpoints require the API token; shareable Live URLs are short-lived, can be made view-only ('interactable: false', enforced server-side) and are torn down after a 1Password secret fill. No IP allowlists for the endpoints documented.",
   "checked": "2026-09-29"
  },
  "guest_firewall": {
   "value": false,
   "source": null,
   "quote": null,
   "note": "Hosted cloud exposes only a managed Chromium/Firefox/WebKit via CDP/BQL/REST; no shell or root in the container, so nftables/iptables cannot be run. Self-hosted Docker image is under the user's own control.",
   "checked": "2026-09-29",
   "derived": true
  },
  "secret_proxy": {
   "value": false,
   "source": "https://docs.browserless.io/baas/features/1password",
   "quote": "A 1Password service account lets a browser session fill secrets (usernames, passwords, API keys) straight from your vault **without the value ever reaching your automation code**.",
   "note": "Not an outbound HTTP credential proxy. Closest analogue: server-side 1Password form-fill (Browserless.loadSecret with op:// reference, optional origin allow-list, https-only, audit log, session lockdown after fill). The secret never reaches the client/agent code or LLM, but it IS typed into the browser page. No DB/SSH/git coverage.",
   "checked": "2026-09-29"
  },
  "isolation": {
   "value": "container",
   "source": "https://docs.browserless.io/llms-full.txt",
   "quote": "Browserless manages the browser pool, handles resource isolation between sessions, and keeps the runtime up to date.",
   "note": "Product is Docker-container-based (open-source/enterprise image runs 'headless browsers inside Docker'); hosted cloud is built on the same containerized architecture, i.e. shared-kernel container isolation between Chrome sessions, not a per-session VM/microVM. Exact hosted-fleet isolation boundary (one container per session vs. process-level) isn't spelled out beyond 'resource isolation between sessions'.",
   "checked": "2026-09-30"
  },
  "image_oci": {
   "value": false,
   "source": "https://www.browserless.io/pricing",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. The hosted product runs a managed Chromium/Firefox/WebKit; there is no API to boot a session from a customer-supplied OCI/Docker image. Self-hosting is the reverse direction (you deploy Browserless's own image on your infra), not a per-session custom image on Browserless's cloud.",
   "checked": "2026-09-30"
  },
  "docker_inside": {
   "value": false,
   "source": "https://docs.browserless.io/llms-full.txt",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket. Full browser control by changing one line.",
   "note": "not offered: outside the product's scope. Sessions expose only a browser (CDP/BQL/REST); there is no shell/root access inside the session to run Docker.",
   "checked": "2026-09-30"
  },
  "nested_virt": {
   "value": false,
   "source": "https://docs.browserless.io/llms-full.txt",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. No general-purpose compute or /dev/kvm access is exposed inside a browser session.",
   "checked": "2026-09-30"
  },
  "ssh": {
   "value": false,
   "source": "https://docs.browserless.io/llms-full.txt",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. Access is via WebSocket CDP/BQL/REST endpoints only; no SSH into the underlying container/host is documented.",
   "checked": "2026-09-30"
  },
  "snapshot": {
   "value": "none",
   "source": "https://docs.browserless.io/baas/session-management/persisting-state",
   "quote": "await browser.close(); // Closes the browser; session data is saved to disk",
   "note": "Persisted sessions/profiles save browser storage (cookies, localStorage, IndexedDB, cache) under a session/profile id and a new Chrome process is launched from that disk state on reconnect ('a new browser process starts on reconnect') — this is a persistent-disk/profile mechanism, not a filesystem or memory snapshot of a machine/instance; no running-process state is ever captured or restored.",
   "checked": "2026-09-30"
  },
  "fork": {
   "value": false,
   "source": "https://docs.browserless.io/baas/features/authenticated-profiles",
   "quote": "Browserless captures the cookies, localStorage, and IndexedDB from the running browser and persists them under the profile name. Each session gets its own working copy.",
   "note": "Multiple sessions can start from one saved profile in parallel, but this clones a browser's auth/storage state into new sessions, not a machine/instance clone (no API to fork the full container/VM).",
   "checked": "2026-09-30"
  },
  "fork_running": {
   "value": false,
   "source": "https://docs.browserless.io/baas/features/authenticated-profiles",
   "quote": "Each session gets its own working copy.",
   "note": "not offered: outside the product's scope. There is no concept of forking a live running machine; profiles are copied only into new, separately-started sessions.",
   "checked": "2026-09-30"
  },
  "memory_snapshot_fork": {
   "value": false,
   "source": "https://docs.browserless.io/baas/features/authenticated-profiles",
   "quote": "Browserless captures the cookies, localStorage, and IndexedDB from the running browser and persists them under the profile name.",
   "note": "not offered: outside the product's scope. Profile capture is storage/cookie state only; no process/memory state is captured, so clones never keep processes running.",
   "checked": "2026-09-30"
  },
  "pause_resume": {
   "value": false,
   "source": "https://www.browserless.io/pricing",
   "quote": "1 unit/30 s connection",
   "note": "not offered: outside the product's scope. Billing is metered per connected second (units per 30s); there is no API to pause a session and resume it later at reduced/no billing. Persisted sessions instead close the browser and start a fresh process on reconnect.",
   "checked": "2026-09-30"
  },
  "wake_on_request": {
   "value": false,
   "source": "https://docs.browserless.io/llms-full.txt",
   "quote": "By default, Browserless automatically closes chrome when the session disconnects.",
   "note": "not offered: outside the product's scope. There is no persistent/sleeping machine that a request wakes; every connection provisions a fresh browser session (optionally rehydrated from a saved profile on disk), which is a different model from wake-on-request VM/sandbox sleep.",
   "checked": "2026-09-30"
  },
  "persistent_disk": {
   "value": true,
   "source": "https://docs.browserless.io/baas/session-management/persisting-state",
   "quote": "await browser.close(); // Closes the browser; session data is saved to disk",
   "note": "Persisted-session/profile data (cookies, localStorage, IndexedDB, cache) survives browser close and is reloaded on the next connect; retention window is 1/7/30/90 days depending on plan (pricing page).",
   "checked": "2026-09-30"
  },
  "volume_attach": {
   "value": false,
   "source": "https://www.browserless.io/pricing",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. No API to attach extra persistent volumes to a hosted session; only the built-in profile/session storage exists.",
   "checked": "2026-09-30"
  },
  "volume_shared": {
   "value": false,
   "source": "https://www.browserless.io/pricing",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. No shared-volume mechanism across concurrently running sessions is documented.",
   "checked": "2026-09-30"
  },
  "auto_stop_idle": {
   "value": true,
   "source": "https://docs.browserless.io/llms-full.txt",
   "quote": "By default, Browserless automatically closes chrome when the session disconnects.",
   "note": "Sessions also carry a configurable connection `timeout` (default 30s, e.g. 'Session timeout in ms (default 30 s, increase for long-running tasks)') after which an idle/unused session is closed automatically.",
   "checked": "2026-09-30"
  },
  "live_resize": {
   "value": false,
   "source": "https://www.browserless.io/pricing",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. No published CPU/RAM per session (hardware sizes are not exposed to customers at all), so there is no API to resize a running session's resources.",
   "checked": "2026-09-30"
  },
  "public_ipv4": {
   "value": false,
   "source": "https://www.browserless.io/pricing",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. Sessions are reached only via Browserless's own WebSocket/HTTPS endpoints (production-sfo/lon/ams); there is no per-session public IPv4 address assigned to the customer.",
   "checked": "2026-09-30"
  },
  "inbound_https": {
   "value": false,
   "source": "https://www.browserless.io/pricing",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. The only inbound HTTPS surface is Browserless's fixed regional API/WS endpoints (plus short-lived, tokenless Live URLs for viewing a session), not a general mechanism for reaching arbitrary ports on the machine.",
   "checked": "2026-09-30"
  },
  "static_egress_ip": {
   "value": false,
   "source": "https://docs.browserless.io/baas/troubleshooting/whitelisting-ips",
   "quote": "The shared fleet's IP addresses may change every few months as we scale capacity or perform maintenance. We recommend checking this page or using the GraphQL API for the latest list.",
   "note": "Outbound IPs come from a published, but explicitly non-fixed, shared-fleet pool (fetchable via GraphQL) that changes periodically; not a dedicated/static per-account or per-session egress IP. (A static/dedicated residential/datacenter proxy IP add-on is not documented either.)",
   "checked": "2026-09-30"
  },
  "windows": {
   "value": false,
   "source": "https://www.browserless.io/pricing",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. Hosted browsers run headless in Linux Docker containers; there are no Windows machines. (Docs show Windows shell commands only for local client setup, not the hosted runtime.)",
   "checked": "2026-09-30"
  },
  "macos": {
   "value": false,
   "source": "https://www.browserless.io/pricing",
   "quote": "Browsers as a Service: connect your existing Puppeteer or Playwright code to managed cloud browsers over WebSocket.",
   "note": "not offered: outside the product's scope. Hosted browsers run headless in Linux Docker containers; no macOS machines are offered.",
   "checked": "2026-09-30"
  },
  "arm64": {
   "value": false,
   "source": "https://docs.browserless.io/llms-full.txt",
   "quote": "All images are published to `ghcr.io/browserless/` and support both `linux/amd64` and `linux/arm64` architectures.",
   "note": "ARM64 support applies to the self-hosted/open-source Docker image running on a customer's own ARM hardware, not to Browserless's own hosted cloud fleet, whose architecture is not documented as ARM-based; treating the hosted product as offering ARM64 machines would be an over-read.",
   "checked": "2026-09-30"
  },
  "eu_data_residency": {
   "value": true,
   "source": "https://docs.browserless.io/llms-full.txt",
   "quote": "Europe (London) | `wss://production-lon.browserless.io` | Europe (Amsterdam) | `wss://production-ams.browserless.io`",
   "note": "Customers can pin sessions to EU regional endpoints (London, Amsterdam) in addition to the US (San Francisco) endpoint.",
   "checked": "2026-09-30"
  },
  "max_session_h": {
   "value": 1,
   "source": "https://www.browserless.io/pricing",
   "quote": "500,000 shared units/mo. 0.0015/unit overage. Max session 60 min.",
   "note": "Self-serve max session length depends on plan: Free 2 min, Prototyping 15 min, Starter 30 min, Scale 60 min (the card's Scale plan is the top self-serve tier, hence 1 h here); Enterprise/self-hosted can run longer, uncapped sessions by configuring the connection `timeout` themselves.",
   "checked": "2026-09-30"
  },
  "desktop": {
   "value": false,
   "source": "https://www.browserless.io/",
   "quote": "A managed headless browser platform for developers running Puppeteer, Playwright, and headless Chrome. No servers, containers, or Chrome updates to manage. Connect with one line of code.",
   "note": "Browserless is a managed headless-browser-as-a-service product (Chrome/Chromium/Firefox/WebKit sessions reached via CDP/Puppeteer/Playwright/BQL/REST/MCP). It exposes no general-purpose remote desktop / VM GUI to control; the only 'desktop' concept in its docs is the `emulationOs=windows|macos|linux` browser fingerprint/viewport emulation parameter, not an actual desktop environment. This is a case of the feature being plainly outside what the product is, so 'no desktop' is correct.",
   "checked": "2026-09-30"
  },
  "usage_api": {
   "value": false,
   "source": "https://docs.browserless.io/overview/unit-consumption",
   "quote": "You can fetch your current consumption programmatically: curl --location \"https://api.browserless.io/v1/account/usage?token=YOUR_API_TOKEN\". This is useful for building your own monitoring dashboards or setting up alerts when consumption approaches your plan limit.",
   "note": "granularity: account-only; cost: yes; REST API endpoint returns account-level usage with units billed, plus per-request and timeframe metrics. MCP tools (browserless_usage) also available, can scope by apiKeyIds for multi-key breakdown. No per-sandbox/session granularity; sessions tracked by ID but usage is account-aggregated. Can use separate API keys as a labeling mechanism for attribution.",
   "confidence": "high",
   "checked": "2026-10-01"
  },
  "persist_scope": {
   "value": "profile",
   "source": "https://docs.browserless.io/baas/session-management/persisting-state",
   "quote": "await browser.close(); // Closes the browser; session data is saved to disk",
   "note": "Only a saved browser profile (cookies, local storage, logins) carries over; no files survive.",
   "checked": "2026-10-01"
  }
 },
 "locations": [
  {
   "country": "US",
   "state": "CA",
   "city": "San Francisco",
   "provider_region": "production-sfo",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "GB",
   "state": null,
   "city": "London",
   "provider_region": "production-lon",
   "self_serve": true,
   "choosable": true
  },
  {
   "country": "NL",
   "state": null,
   "city": "Amsterdam",
   "provider_region": "production-ams",
   "self_serve": true,
   "choosable": true
  }
 ],
 "locations_source": "https://docs.browserless.io/llms-full.txt",
 "locations_quote": "Europe (London) | `wss://production-lon.browserless.io` | Europe (Amsterdam) | `wss://production-ams.browserless.io` | in addition to the US (San Francisco) endpoint",
 "locations_checked": "2026-10-01"
}