SE Home
Help
  • Documentation
  • Help centre
SEScrape Engine

Getting started

DocumentationQuickstartAuthenticationPlayground

Extracting data

Selecting valuesTransformsLists & tablesPage dataAI extractionMCP server

Fetching pages

Custom requestsTimeouts & redirectsCachingAutomatic retriesFallback strategies

Browsers & actions

BrowsersActionsRecipesScreenshots & PDFStored files

Getting past blocks

Anti-bot protectionCaptchasProxiesFingerprintsSessions

Workflows

Multi-step requestsVariablesPaginationBatchCrawlingTemplatesSchedules & monitoringAsync jobs & webhooksExport to S3, Sheets, databases & webhooks

Account & billing

CreditsSecretsPlansLimitsLogs & request idsNotificationsAccountAffiliate programmeHelp centre

Reference

POST /scrapeGET /sessions/:idGET /browsersGET /proxies/countriesGET /healthErrors
Documentation

Getting started

DocumentationQuickstartAuthenticationPlayground

Extracting data

Selecting valuesTransformsLists & tablesPage dataAI extractionMCP server

Fetching pages

Custom requestsTimeouts & redirectsCachingAutomatic retriesFallback strategies

Browsers & actions

BrowsersActionsRecipesScreenshots & PDFStored files

Getting past blocks

Anti-bot protectionCaptchasProxiesFingerprintsSessions

Workflows

Multi-step requestsVariablesPaginationBatchCrawlingTemplatesSchedules & monitoringAsync jobs & webhooksExport to S3, Sheets, databases & webhooks

Account & billing

CreditsSecretsPlansLimitsLogs & request idsNotificationsAccountAffiliate programmeHelp centre

Reference

POST /scrapeGET /sessions/:idGET /browsersGET /proxies/countriesGET /healthErrors

Browsers

Some pages are built by JavaScript after they load: the HTML the server sends doesn't contain the data. To get it, load the page in a real browser with options.browser:

"options": { "browser": true }

See it work

This page writes a paragraph with JavaScript. Without a browser, the API reads the HTML as sent, before any script runs:

Actions

Data

With a browser, the script runs first:

Actions

Data

{
  "browser": { "engine": "chromium", "driver": "playwright", "stealth": "plugin" },
  "data": ["Served by the server", "Rendered by JavaScript"]
}

A browser is slower than a plain request (about a second, more for stealth engines) and uses more resources. Use it when the data needs JavaScript, or when a site only lets real browsers in.

Engines

EngineBased onStealthSpeedWhen to use it
chromium (default)Chromiumstealth pluginfastMost JavaScript sites
firefoxFirefoxnonefastSites that behave differently in Firefox
camoufoxFirefox, Camoufoxbuilt in: fingerprint spoofing at the C++ levelslowerSites with serious bot protection
cloakbrowserChromium, CloakBrowserbuilt in: patched in the browser sourcefastSites with serious bot protection, Chromium flavour
lightpandaLightpanda, a browser written for automationnonefastest, lightestSimple JavaScript pages at volume

Pick one by name:

"options": { "browser": "camoufox" }

GET /browsers lists the engines installed on this server.

Drivers

A driver is the library that controls the browser. Each engine has a default; choose another with driver:

DriverEngines
playwrightchromium (default), firefox (default), camoufox (default), cloakbrowser (default), lightpanda
puppeteerchromium, cloakbrowser, lightpanda (default)
patchrightchromium: a Playwright build patched to leave no automation traces
"options": { "browser": { "engine": "chromium", "driver": "puppeteer" } }

Stealth

stealth is on by default. What it does depends on the engine:

Engine and driverStealth
chromium with Playwright or Puppeteerthe puppeteer-extra stealth plugin hides automation traces (navigator.webdriver, plugins, WebGL vendor…)
chromium with patchrightbuilt into the driver
camoufox, cloakbrowserbuilt into the browser, can't be turned off
firefox, lightpandanone exists: use camoufox or cloakbrowser when it matters

"stealth" in the response tells you what applied: "plugin", "builtin" or "off".

Options

browser accepts true, an engine name, or an object:

PropertyTypeDefaultDescription
enginestring"chromium"chromium, firefox, camoufox, cloakbrowser or lightpanda (chrome is accepted for chromium)
driverstringper engineplaywright, puppeteer or patchright
stealthbooleantrueSee Stealth
wait_untilstring"load"When the page counts as loaded: domcontentloaded, load, networkidle (no network activity for 500 ms) or commit
wait_forstring—A CSS selector to wait for before extracting
blockstring[] or false["media", "font", "ads", "trackers"]What the browser doesn't download, see Block resources. false loads everything
viewportobject{ "width": 1920, "height": 1080 }Window size
captureobject—Capture the page's own JSON requests, see below
headlessbooleantruefalse needs a display on the server
strictbooleanfalseFail instead of substituting, see below
"options": {
  "browser": {
    "engine": "cloakbrowser",
    "wait_until": "networkidle",
    "wait_for": ".product",
    "block": ["image", "font"]
  }
}

Block resources

Pages load faster and use less proxy bandwidth when the browser skips what scraping doesn't need. block lists what to skip:

ValueSkips
imageImages. Off by default: screenshots and lazy-loaded content need them
mediaAudio and video
fontWeb fonts
stylesheetCSS. Pages may lay out or behave differently without it
adsRequests to the main ad networks (Google Ads, Amazon, Criteo, Taboola, Outbrain…)
trackersRequests to analytics and tracking services (Google Analytics and Tag Manager, Hotjar, Segment, Clarity…)

The default is ["media", "font", "ads", "trackers"]. Your list replaces it, it doesn't add to it, and false loads everything:

"browser": { "block": ["image", "media", "font", "stylesheet", "ads", "trackers"] }

Ads and trackers are refused by host name, whatever the engine and driver. If the page you scrape is itself on one of those hosts, it still loads. Without a browser, block has nothing to do: only the HTML is downloaded.

Capture the page's API calls

Many sites load their data from their own JSON API after the page loads. Instead of scraping the rendered HTML, capture those responses as they are:

Actions

Data

"captured": [
  { "url": "…/demo/shop/api", "status": 200, "json": { "page": 1, "stock": [ … ] } }
]
PropertyDescription
url_containsKeep responses whose URL contains this text
post_data_containsKeep only requests whose body contains all of these texts
timeoutHow long to wait for a first match after the page loads, in ms. Default 5000

Only JSON responses are kept, 20 at most.

Everything else still applies

Browsers work with the other options:

  • Actions click, type and scroll in the page.
  • Proxies, of any type, carry the browser's traffic.
  • Custom requests: method, body, headers and cookies apply to the first request, the one that loads the page.
  • Retries, fallbacks, timeouts and the cache work the same.
  • Cookies set by the site are kept for the rest of the request: actions, retries and fallbacks, browser or not.

When something can't be done

Rather than failing, the API adapts the request and says so in warnings:

You asked forThe API does
An engine that isn't installedUses the closest installed one: cloakbrowser → chromium, camoufox → firefox…
A driver the engine doesn't support (camoufox with puppeteer)Uses the engine's default driver
stealth on firefox or lightpandaRuns without
A fingerprint on a stealth browserKeeps the browser's own fingerprint
follow_redirects: false or max_redirectsBrowsers follow redirects themselves: ignored
"warnings": ["camoufox can't be driven by puppeteer: used playwright instead"]

Set "strict": true to get 503 BROWSER_UNAVAILABLE instead of a substitution.

On this page

  • See it work
  • Engines
  • Drivers
  • Stealth
  • Options
  • Block resources
  • Capture the page's API calls
  • Everything else still applies
  • When something can't be done