Drop ad, tracker and chat requests before the page renders
An ad slot is not just visual noise: it is a request the page waits for. Blocking it at the network layer removes the pixels and the wait at once.
block_adsblock_trackersblock_chatsblock_requestsblock_resourcescurl --fail-with-body "https://api.pagecapture.dev/v1/take" \
-H "X-Access-Key: $PAGECAPTURE_KEY" \
-H "Content-Type: application/json" \
--data '{"url":"https://example.com","format":"jpg","block_ads":true,"block_trackers":true,"block_chats":true}' \
-o capture.jpgVerified 2026-08-13 by running the published code against a fixture.
Configure it in the playgroundWhat it does
- Blocks requests to 20 ad networks, 30 analytics and tracking hosts and 17 chat providers, by domain, before the request leaves the browser.
- Removes chat widgets from the layout as well as from the network, so a floating bubble does not survive in the corner of the image.
- Takes `block_requests` for your own glob patterns and `block_resources` for whole resource types.
What it does not do
- Is not an ad blocker with thousands of rules. The lists are short on purpose: nobody here can audit a list inherited from a browser extension, and one wrong rule breaks a customer's page.
- Does not block first-party analytics served from your own domain — a blocklist is by host, and your host is not on it.
- Does not change what the page believes: a site that gates content on a tracker loading will behave as it does when that tracker fails.
Every limit on this page is the one the API enforces
These rows are read from the same parameter table that validates your request. Nothing here is transcribed, so a number cannot drift from the behaviour it describes.
| Parameter | Type | Default | Range | Endpoints | Cache key |
|---|---|---|---|---|---|
block_adsBlock ad networks. | boolean | false | — | /v1/take, /v1/animate | In |
block_trackersBlock analytics and tracking requests. | boolean | false | — | /v1/take, /v1/animate | In |
block_chatsRemove live chat widgets. | boolean | false | — | /v1/take, /v1/animate | In |
block_requestsGlob patterns or domains to block. | string[] | — | — | /v1/take, /v1/animate | In |
block_resourcesResource types to block. | string[] | — | — | /v1/take, /v1/animate | In |
How it behaves next to the rest of the request
block_resourcesResource types to block.
Accepts a closed vocabulary of resource types — document, stylesheet, image, media, font, script, texttrack, xhr, fetch, eventsource, websocket, manifest, other. A value outside it is rejected at validation rather than silently ignored.
wait_untilNavigation state to wait for. `networkidle0` waits for zero in-flight requests, `networkidle2` for at most two.
Blocking is what makes `networkidle0` usable on a commercial page. Requests that would never settle are never made, so the idle condition can actually be reached.
cacheServe and store this capture from the cache. Cache hits are never charged.
The blocklist version is part of the engine manifest and therefore part of the cache key: adding a rule invalidates the entries it would have changed instead of serving yesterday's image.
Errors this option can produce
timeout_errorHTTP 500 · retryableThe capture did not complete within the allowed time.
matched_failed_requestHTTP 500A request made by the page failed and the failure policy rejected the capture.
None of them is billable. No error code in the catalog is.
Related capabilities
All capabilities100 successful captures a month, every feature unlocked, no card.
Get an API keyPageCapture Engineering · reviewed by PageCapture API maintainers · Verified 2026-08-13 by running the published code against a fixture.