Portal Community

When to Use

Configuration

Connection

FieldRequiredDescription
BaseUrlRequiredBrowserless instance URL.
TokenOptionalAPI token for cloud Browserless.

Operation

FieldRequiredDescription
urlRequiredThe page URL to capture. Supports BizFirst expressions.
optionsOptionalScreenshot options JSON object. Key fields: type ("png" or "jpeg", default "png"), fullPage (bool, default false), quality (int 0–100, JPEG only), clip (viewport crop object with x, y, width, height).
selectorOptionalCSS selector of a specific element to capture. When set, only that element is screenshotted rather than the full page or viewport.
gotoOptionsOptionalNavigation options JSON: waitUntil and timeout.
waitForSelectorOptionalWait for a CSS selector to appear before taking the screenshot.
waitForTimeoutOptionalFixed delay in milliseconds before capture (e.g. to let animations finish).
viewportOptionalViewport dimensions JSON: { "width": 1440, "height": 900 }.
userAgentOptionalOverride the browser user-agent string.
setExtraHTTPHeadersOptionalAdditional HTTP request headers.
cookiesOptionalCookies to set before navigation.
blockAdsOptionalDefault true. Block ad networks.
bestAttemptOptionalDefault true. Return a screenshot even if some sub-resources failed.
useCustomBodyOptionalSend customBodyJson verbatim as the request body.
customBodyJsonOptionalRaw JSON body when useCustomBody is true.

Sample Configuration

{
  "operation": "screenshot",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "https://app.example.com/dashboard/{{ $input.tenantId }}",
  "options": {
    "type": "png",
    "fullPage": false
  },
  "viewport": { "width": 1440, "height": 900 },
  "gotoOptions": { "waitUntil": "networkidle2", "timeout": 20000 },
  "waitForSelector": { "selector": ".chart-container", "timeout": 10000 },
  "blockAds": true
}

Validation Errors

Error CodeCause
VAL_MISSING_URLurl is empty and no html source was provided.
CFG_INVALIDNode settings could not be resolved to a screenshot configuration.
BROWSERLESS_BAD_REQUESTcustomBodyJson is not valid JSON or does not match the screenshot request shape.

Output

Success Port

FieldTypeDescription
statusstringAlways "success".
errorCodestringAlways empty on success.
operationstringAlways "screenshot".
urlstringURL that was captured.
mimeTypestring"image/png" or "image/jpeg".
fileNamestringSuggested file name, e.g. "screenshot.png".
sizeBytesintImage size in bytes.
databytesRaw image bytes. Pass to an S3 upload node or file-write node directly.

Error Port

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

Sample Output

{
  "status": "success",
  "errorCode": "",
  "operation": "screenshot",
  "url": "https://app.example.com/dashboard/tenant-42",
  "mimeType": "image/png",
  "fileName": "screenshot.png",
  "sizeBytes": 218430,
  "data": "<binary image bytes>"
}

Expression Reference

ExpressionValue
{{ $output.BrowserlessNode.mimeType }}"image/png" or "image/jpeg".
{{ $output.BrowserlessNode.fileName }}Suggested file name for storage.
{{ $output.BrowserlessNode.sizeBytes }}Image size in bytes.
{{ $output.BrowserlessNode.data }}Raw image bytes — pass directly to upload nodes.
{{ $output.BrowserlessNode.url }}URL that was captured.

Node Policies & GuardRails

PolicyRecommendationSeverity
URL validationValidate and allowlist target domains before passing user-supplied URLs to prevent SSRF via the Browserless service.High
Token storageStore the API token in a workflow secret — never hardcode it in the node configuration JSON.Critical
Image storageThe data field contains raw bytes. Store via an S3 or file node rather than logging the binary payload.Medium
Full-page vs. viewportFull-page screenshots of long pages can be very large (several MB). Use viewport mode or clip for targeted captures unless full-page is explicitly required.Medium
Concurrent session limitsImplement retry logic with exponential backoff for 429 errors when running screenshot workflows at high volume.Medium

Examples

Example 1 — Full-page PNG for archive

{
  "operation": "screenshot",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "{{ $input.pageUrl }}",
  "options": { "type": "png", "fullPage": true },
  "viewport": { "width": 1280, "height": 800 },
  "gotoOptions": { "waitUntil": "networkidle2", "timeout": 30000 },
  "blockAds": true
}

Example 2 — JPEG thumbnail of specific element

{
  "operation": "screenshot",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "https://analytics.example.com/chart/{{ $input.chartId }}",
  "selector": "#chart-canvas",
  "options": { "type": "jpeg", "quality": 85 },
  "gotoOptions": { "waitUntil": "networkidle0", "timeout": 25000 },
  "waitForSelector": { "selector": "#chart-canvas", "timeout": 12000 }
}

Example 3 — Mobile viewport screenshot

{
  "operation": "screenshot",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "https://www.example.com",
  "options": { "type": "png", "fullPage": false },
  "viewport": { "width": 390, "height": 844, "deviceScaleFactor": 3 },
  "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15",
  "gotoOptions": { "waitUntil": "networkidle2", "timeout": 20000 }
}