Portal Community

When to Use

  Legal and ethical use: Only use the unblock operation against sites where you have legitimate authorisation to access data programmatically. Bypassing bot protection on sites where scraping is prohibited by terms of service may carry legal risk. Always obtain legal review before building unblock-based workflows against third-party sites.

Configuration

Connection

FieldRequiredDescription
BaseUrlRequiredBrowserless instance URL. Cloud unblock requires a plan that includes stealth features.
TokenOptionalAPI token for cloud Browserless.

Operation

FieldRequiredDescription
urlRequiredThe protected page URL to unblock. Supports BizFirst expressions.
contentOptionalDefault true. When true, the response includes the page HTML in the html field.
screenshotOptionalDefault true. When true, the response includes a base64-encoded screenshot in the screenshotBase64 field.
browserWSEndpointOptionalDefault true. When true, the response includes a WebSocket endpoint URL for connecting to the live browser session with Puppeteer or Playwright.
ttlOptionalTime-to-live in milliseconds for the browser WebSocket session. Only relevant when browserWSEndpoint is true.
gotoOptionsOptionalNavigation options JSON: waitUntil and timeout.
waitForSelectorOptionalWait for a CSS selector to appear after the bot challenge is passed.
waitForTimeoutOptionalFixed delay in milliseconds after the challenge is cleared before capturing output.
setExtraHTTPHeadersOptionalAdditional request headers to set before navigation.
bestAttemptOptionalDefault true. Return available output even if the challenge was not fully resolved.
blockAdsOptionalDefault true.
useCustomBodyOptionalSend customBodyJson verbatim as the request body.
customBodyJsonOptionalRaw JSON body when useCustomBody is true.

Sample Configuration

{
  "operation": "unblock",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "https://protected.example.com/pricing",
  "content": true,
  "screenshot": false,
  "browserWSEndpoint": false,
  "gotoOptions": { "waitUntil": "networkidle2", "timeout": 45000 },
  "waitForSelector": { "selector": ".pricing-table", "timeout": 15000 },
  "blockAds": true,
  "bestAttempt": true
}

Validation Errors

Error CodeCause
VAL_MISSING_URLurl is empty.
CFG_INVALIDNode settings could not be resolved to an unblock configuration.
BROWSERLESS_BAD_REQUESTcustomBodyJson is not valid JSON or does not match the unblock request shape.

Output

Success Port

FieldTypeDescription
statusstringAlways "success".
errorCodestringAlways empty on success.
operationstringAlways "unblock".
urlstringURL that was unblocked.
htmlstringRendered page HTML (populated when content: true).
screenshotBase64stringBase64-encoded PNG screenshot (populated when screenshot: true).
browserWSEndpointstringWebSocket URL of the live browser session (populated when browserWSEndpoint: true).

Error Port

FieldTypeDescription
statusstringAlways "error".
errorCodestringMachine-readable error code.
errorMessagestringHuman-readable failure description.
operationstringAlways "unblock".
httpStatusCodeintHTTP status code from Browserless, if available.

Sample Output

{
  "status": "success",
  "errorCode": "",
  "operation": "unblock",
  "url": "https://protected.example.com/pricing",
  "html": "<!DOCTYPE html><html><head><title>Pricing — Example</title></head><body><table class=\"pricing-table\"><tr><td>Starter</td><td>$29/mo</td></tr><tr><td>Pro</td><td>$99/mo</td></tr></table></body></html>",
  "screenshotBase64": "",
  "browserWSEndpoint": ""
}

Expression Reference

ExpressionValue
{{ $output.BrowserlessNode.html }}Rendered HTML of the unblocked page.
{{ $output.BrowserlessNode.screenshotBase64 }}Base64 PNG screenshot string.
{{ $output.BrowserlessNode.browserWSEndpoint }}WebSocket URL for the live browser session.
{{ $output.BrowserlessNode.url }}URL that was unblocked.

Node Policies & GuardRails

PolicyRecommendationSeverity
Legal complianceVerify that bypassing bot protection on the target site is permitted. Document legal review in your workflow notes.Critical
Token storageStore the API token in a workflow secret — never hardcode it.Critical
URL validationAllowlist target domains; never pass user-supplied URLs without validation to prevent SSRF.High
WebSocket TTLIf using browserWSEndpoint, set ttl to the shortest duration sufficient for downstream steps. Open browser sessions consume Browserless plan minutes.Medium
Timeout for challengesBot challenges can take 5–20 s to solve. Set gotoOptions.timeout to at least 45 s for protected sites.Medium

Examples

Example 1 — Extract HTML from a Cloudflare-protected site

{
  "operation": "unblock",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "{{ $input.targetUrl }}",
  "content": true,
  "screenshot": false,
  "browserWSEndpoint": false,
  "gotoOptions": { "waitUntil": "networkidle2", "timeout": 60000 },
  "blockAds": true,
  "bestAttempt": true
}

Example 2 — Screenshot proof of a protected page

{
  "operation": "unblock",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "https://market-data.example.com/live-prices",
  "content": false,
  "screenshot": true,
  "browserWSEndpoint": false,
  "waitForSelector": { "selector": ".price-feed", "timeout": 20000 },
  "gotoOptions": { "waitUntil": "networkidle2", "timeout": 60000 }
}

Example 3 — Obtain a live WebSocket session for downstream automation

{
  "operation": "unblock",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "https://protected-app.example.com/login",
  "content": false,
  "screenshot": false,
  "browserWSEndpoint": true,
  "ttl": 120000,
  "gotoOptions": { "waitUntil": "networkidle2", "timeout": 60000 }
}