Portal Community

When to Use

  Timeout: Lighthouse audits typically take 30–120 seconds depending on page complexity and network conditions. The node applies a dedicated timeout for this operation — set timeout to at least 120000 (120 s) for reliable results on complex pages.

Configuration

Connection

FieldRequiredDescription
BaseUrlRequiredBrowserless instance URL.
TokenOptionalAPI token for cloud Browserless.

Operation

FieldRequiredDescription
urlRequiredThe page URL to audit. Supports BizFirst expressions.
configOptionalLighthouse configuration object. Controls which audits run, device emulation (formFactor: "desktop" or "mobile"), throttling settings, and locale. See the Lighthouse config docs for all options.
budgetsOptionalArray of Lighthouse performance budget objects. When provided, Lighthouse compares audit results against these budgets and includes budget warnings in the report.
blockAdsOptionalDefault true. Block ad networks during the audit. Disabling this measures the real-world impact of ads on performance.
timeoutOptionalRequest timeout in milliseconds. Recommended minimum: 120000. The node applies a dedicated timeout cancellation token for this operation.
useCustomBodyOptionalSend customBodyJson verbatim as the request body.
customBodyJsonOptionalRaw JSON body when useCustomBody is true.

Sample Configuration

{
  "operation": "performance",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "https://www.example.com/landing/{{ $input.slug }}",
  "config": {
    "formFactor": "desktop",
    "screenEmulation": {
      "mobile": false,
      "width": 1350,
      "height": 940,
      "deviceScaleFactor": 1,
      "disabled": false
    },
    "throttling": {
      "rttMs": 40,
      "throughputKbps": 10240,
      "cpuSlowdownMultiplier": 1
    }
  },
  "timeout": 120000,
  "blockAds": false
}

Validation Errors

Error CodeCause
VAL_MISSING_URLurl is empty.
CFG_INVALIDNode settings could not be resolved to a performance configuration.
TIMEOUTThe Lighthouse audit exceeded the configured timeout. Increase timeout or simplify the audit configuration.
BROWSERLESS_BAD_REQUESTcustomBodyJson is not valid JSON or does not match the performance request shape.

Output

Success Port

FieldTypeDescription
statusstringAlways "success".
errorCodestringAlways empty on success.
operationstringAlways "performance".
urlstringURL that was audited.
performanceScorenumberLighthouse Performance category score (0–1). Multiply by 100 for the familiar 0–100 display value.
accessibilityScorenumberLighthouse Accessibility category score (0–1).
seoScorenumberLighthouse SEO category score (0–1).
bestPracticesScorenumberLighthouse Best Practices category score (0–1).
reportobjectFull Lighthouse report JSON object. Contains all audit results, metrics (LCP, FID, CLS, FCP, TTI, TBT), opportunities, diagnostics, and budget results.

Error Port

FieldTypeDescription
statusstringAlways "error".
errorCodestringMachine-readable error code (e.g. TIMEOUT, BROWSERLESS_BAD_REQUEST).
errorMessagestringHuman-readable failure description.
operationstringAlways "performance".
httpStatusCodeintHTTP status code from Browserless, if available.

Sample Output

{
  "status": "success",
  "errorCode": "",
  "operation": "performance",
  "url": "https://www.example.com/landing/summer-promo",
  "performanceScore": 0.94,
  "accessibilityScore": 0.88,
  "seoScore": 0.97,
  "bestPracticesScore": 0.83,
  "report": {
    "lighthouseVersion": "11.3.0",
    "requestedUrl": "https://www.example.com/landing/summer-promo",
    "finalUrl": "https://www.example.com/landing/summer-promo",
    "fetchTime": "2026-05-26T09:12:34.000Z",
    "categories": {
      "performance":     { "score": 0.94, "title": "Performance" },
      "accessibility":   { "score": 0.88, "title": "Accessibility" },
      "best-practices":  { "score": 0.83, "title": "Best Practices" },
      "seo":             { "score": 0.97, "title": "SEO" }
    },
    "audits": {
      "first-contentful-paint":    { "numericValue": 980,  "displayValue": "1.0 s" },
      "largest-contentful-paint":  { "numericValue": 2100, "displayValue": "2.1 s" },
      "total-blocking-time":       { "numericValue": 45,   "displayValue": "45 ms" },
      "cumulative-layout-shift":   { "numericValue": 0.01, "displayValue": "0.01" },
      "speed-index":               { "numericValue": 1340, "displayValue": "1.3 s" }
    }
  }
}

Expression Reference

ExpressionValue
{{ $output.BrowserlessNode.performanceScore }}Performance score 0–1 (e.g. 0.94).
{{ $output.BrowserlessNode.accessibilityScore }}Accessibility score 0–1.
{{ $output.BrowserlessNode.seoScore }}SEO score 0–1.
{{ $output.BrowserlessNode.bestPracticesScore }}Best Practices score 0–1.
{{ $output.BrowserlessNode.report }}Full Lighthouse report object.
{{ $output.BrowserlessNode.report.audits['largest-contentful-paint'].numericValue }}LCP in milliseconds.
{{ $output.BrowserlessNode.report.audits['cumulative-layout-shift'].numericValue }}CLS score.
{{ $output.BrowserlessNode.url }}URL that was audited.

Node Policies & GuardRails

PolicyRecommendationSeverity
Timeout configurationAlways set timeout to at least 120 s. Lighthouse audits on complex pages commonly take 60–90 s and will produce TIMEOUT errors with shorter limits.High
Token storageStore the API token in a workflow secret.Critical
Report object sizeThe full Lighthouse report can exceed 1 MB. Extract only the scores and metrics you need via expression mappings rather than persisting the entire report to a database.Medium
Score varianceLighthouse scores vary between runs (±5 points is normal) due to CPU throttling simulation. Run 3 audits and average the scores for more stable trend data.Medium
URL validationValidate and allowlist target domains before auditing user-supplied URLs.High

Examples

Example 1 — Daily performance monitoring with Slack alert

Audit the homepage at 07:00 daily and send a Slack message if performance drops below 0.85.

{
  "operation": "performance",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "https://www.example.com/",
  "config": {
    "formFactor": "mobile",
    "screenEmulation": { "mobile": true, "width": 390, "height": 844, "deviceScaleFactor": 3 }
  },
  "timeout": 120000,
  "blockAds": false
}

Example 2 — Desktop audit with budget constraints

{
  "operation": "performance",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "{{ $input.pageUrl }}",
  "config": { "formFactor": "desktop" },
  "budgets": [
    {
      "path": "/*",
      "timings": [
        { "metric": "first-contentful-paint", "budget": 2000 },
        { "metric": "largest-contentful-paint", "budget": 3000 }
      ],
      "resourceSizes": [
        { "resourceType": "script",    "budget": 500 },
        { "resourceType": "image",     "budget": 1000 },
        { "resourceType": "total",     "budget": 2000 }
      ]
    }
  ],
  "timeout": 120000
}

Example 3 — Post-deploy regression check

Triggered by a deployment webhook — compares the new score to a stored baseline and fails the workflow if performance regressed by more than 5 points.

{
  "operation": "performance",
  "baseUrl": "https://chrome.browserless.io",
  "token": "{{ $env.BROWSERLESS_TOKEN }}",
  "url": "https://staging.example.com{{ $input.path }}",
  "config": { "formFactor": "desktop" },
  "timeout": 150000,
  "blockAds": true
}