Skip to content

Latest commit

 

History

History
134 lines (86 loc) · 7.1 KB

File metadata and controls

134 lines (86 loc) · 7.1 KB
title FAQ
pcx_content_type faq
sidebar
order
11
head
tag content
title
Frequently asked questions about Cloudflare Browser Rendering

import { GlossaryTooltip, Render, DashButton, Steps } from "~/components";

Below you will find answers to our most commonly asked questions about Browser Rendering.

For pricing questions, visit the pricing FAQ. For usage limits questions, visit the limits FAQ. If you cannot find the answer you are looking for, join us on Discord.


Errors & Troubleshooting

Error: 429 browser time limit exceeded

Error: 422 unprocessable entity

A 422 Unprocessable Entity error usually means that Browser Rendering wasn't able to complete an action because of an issue with the site.

This can happen if:

  • The website consumes too much memory during rendering.
  • The page itself crashed or returned an error before the action completed.
  • The request exceeded one of the timeout limits for page load, element load, or an action.

Most often, this error is caused by a timeout. You can review the different timers and their limits in the REST API timeouts reference.

Why is my page content missing or incomplete?

If your screenshots, PDFs, or scraped content are missing elements that appear when viewing the page in a browser, the page likely has not finished loading before Browser Rendering captures the output.

JavaScript-heavy pages and Single Page Applications (SPAs) often load content dynamically after the initial HTML is parsed. By default, Browser Rendering waits for domcontentloaded, which fires before JavaScript has finished rendering the page.

To fix this, use the goToOptions.waitUntil parameter with one of these values:

Value Use when
networkidle0 The page must be completely idle (no network requests for 500 ms). Best for pages that load all content upfront.
networkidle2 The page can have up to 2 ongoing connections (like analytics or websockets). Best for most dynamic pages.

REST API example:

{
  "url": "https://example.com",
  "goToOptions": {
    "waitUntil": "networkidle2"
  }
}

If content is still missing:

  • Use waitForSelector to wait for a specific element to appear before capturing.
  • Increase goToOptions.timeout (up to 60 seconds) for slow-loading pages.
  • Check if the page requires authentication or returns different content to bots.

For a complete reference, see REST API timeouts.


Getting started & Development

Does local development support all Browser Rendering features?

Not yet. Local development currently has the following limitation(s):

  • Requests larger than 1 MB are not supported.

Will Browser Rendering be detected by Bot Management?

Yes, Browser Rendering requests are always identified as bot traffic by Cloudflare. Cloudflare does not enforce bot protection by default — that is the customer's choice.

If you are attempting to scan your own zone and want Browser Rendering to access your website freely without your bot protection configuration interfering, you can create a WAF skip rule to allowlist Browser Rendering.

Can I allowlist Browser Rendering on my own website?

You must be on an Enterprise plan to allowlist Browser Rendering on your own website because WAF custom rules require access to Bot Management fields.

1. In the Cloudflare dashboard, go to the **Security rules** page of your account and domain.
 <DashButton url="/?to=/:account/:zone/security/security-rules" />
  1. To create a new empty rule, select Create rule > Custom rules.
  2. Enter a descriptive name for the rule in Rule name, such as Allow Browser Rendering.
  3. Under When incoming requests match, use the Field dropdown to choose Bot Detection ID. For Operator, select equals. For Value, enter 128292352.
  4. Under Then take action, in the Choose action dropdown, select Skip.
  5. Under Place at, select the order of the rule in the Select order dropdown to be First. Setting the order as First allows this rule to be applied before subsequent rules.
  6. To save and deploy your rule, select Deploy.

Does Browser Rendering rotate IP addresses for outbound requests?

No. Browser Rendering requests originate from Cloudflare's global network and you cannot configure per-request IP rotation. All rendering traffic comes from Cloudflare IP ranges and requests include automatic headers, such as cf-biso-request-id and cf-biso-devtools so origin servers can identify them.

Is there a limit to how many requests a single browser session can handle?

There is no fixed limit on the number of requests per browser session. A single browser can handle multiple requests as long as it stays within available compute and memory limits.

Can I use custom fonts in Browser Rendering?

Yes. If your webpage or PDF requires a font that is not pre-installed, you can load custom fonts at render time using addStyleTag. This works with both the REST API and Workers Bindings. For instructions and examples, refer to Use your own custom font.


Security & Data Handling

Does Cloudflare store or retain the HTML content I submit for rendering?

No. Cloudflare processes content ephemerally and does not retain customer-submitted HTML or generated output (such as PDFs or screenshots) beyond what is required to perform the rendering operation. Once the response is returned, the content is immediately discarded from the rendering environment.

This applies to both the REST API and Workers Bindings (using @cloudflare/puppeteer or @cloudflare/playwright).

Is there any temporary caching of submitted content?

For the REST API, generated content is cached by default for five seconds (configurable up to one day via the cacheTTL parameter, or set to 0 to disable caching). This cache protects against repeated requests for the same URL by the same account. Customer-submitted HTML content itself is not cached.

For Workers Bindings, no caching is used. Content exists only in memory for the duration of the rendering operation and is discarded immediately after the response is returned.