Browser Run
Headless, programmable web browsers built for AI Agents
Give your application web browsing capabilities. Spin up a web browser in the cloud on-demand, and control it with your own code or AI-generated code. Take screenshots, extract text, run tests and automate any workflow — even ones with no API to rely on.
Scale to thousands of browsers
Global by Default
Easy to Integrate
Made for Programmable Browsing

Global Pool of Browsers
Deployed on Cloudflare's network. Enables faster cold starts and lower latency across use cases.

REST API Support
Browser Rendering offers easy, fast setup for tasks like screenshotting, extracting content, generating PDFs, snapshotting and capturing structured data with JSON or markdown for AI.

Supports common browser libraries
Playwright & Puppeteer support. Gives developers full control when needed with standard automation tools.

"Well-behaved" Bot Mode
Identifies itself as a bot using cryptographic signatures. Ensures compliant, ethical scraping — distinguishes Cloudflare from competitors that bypass bot protections.
Create website thumbnails and social previews using the /screenshot REST API
Power AI agents that need browser-based automation where APIs don't exist
Generate PDFs from webpages and HTML content using the /pdf REST API
Headless browsers on standby that you can use at scale without any complicated setup
Eliminate the need to manage complex browser infrastructure by running browser-based tasks like screenshots and PDF generation on Cloudflare's global network.
curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<accountId>/browser-rendering/screenshot' \ -H 'Authorization: Bearer <apiToken>' \ -H 'Content-Type: application/json' \ -d '{ "html": "Hello World!", "screenshotOptions": { "omitBackground": true } }' \ --output "screenshot.png"import { launch, type BrowserWorker } from '@cloudflare/playwright';
interface Env { MYBROWSER: BrowserWorker;}
export default { async fetch(request: Request, env: Env) { const browser = await launch(env.MYBROWSER); const page = await browser.newPage();
await page.goto('https://demo.playwright.dev/todomvc');
const TODO_ITEMS = [ 'buy some cheese', 'feed the cat', 'book a doctors appointment', ];
const newTodo = page.getByPlaceholder('What needs to be done?'); for (const item of TODO_ITEMS) { await newTodo.fill(item); await newTodo.press('Enter'); }
const img = await page.screenshot(); await browser.close();
return new Response(img, { headers: { 'Content-Type': 'image/png', }, }); },};curl -X 'POST' 'https://api.cloudflare.com/client/v4/accounts/<accountId>/browser-rendering/markdown' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <apiToken>' \ -d '{ "url": "https://example.com"}'Lovable
"
We needed a reliable way to capture screenshots at scale, and Cloudflare Browser Rendering solved it with a single API call. It was remarkably easy to implement and handles all our traffic without a hiccup. "
Powerful primitives, seamlessly integrated
Built on systems powering 20% of the Internet, Browser Run runs on the same infrastructure Cloudflare uses to build Cloudflare. Enterprise-grade reliability, security, and performance are standard.
Build without boundaries
Join thousands of developers who've eliminated infrastructure complexity and deployed globally with Cloudflare. Start building for free — no credit card required.