Skip to main content

Confirm

Are you sure?

Lighthouse

Run a real Google Lighthouse audit against a page and get back the category scores and key performance metrics as JSON — with an option to include the full set of 150+ audits for deep diagnostics.

This is a web operation — no AI, metered against your web allowance. Audits can take a while, so it pairs well with async mode.

POST/lighthouse

Run an audit

Body parameters

  • Name
    url
    Type
    string
    Required
    Required
    Description
    The absolute URL of the page to process. Rendered with headless Chrome, so JavaScript runs and redirects are followed.
  • Name
    device
    Type
    string
    Description
    Device to emulate: mobile (default) or desktop.
  • Name
    include_audits
    Type
    string
    Description
    Set to "true" to include the full audits object (150+ audits). Defaults to "false".
  • Name
    report_to
    Type
    string
    Description
    Webhook URL — an http or https address URLpipe POSTs the result to when it's ready. Required for async requests (the default); omit it only when you send sync=true. A missing or invalid value returns 422.
  • Name
    sync
    Type
    boolean
    Description
    Process the request synchronously, returning the result inline in the response. Defaults to false (async: return a token now, deliver the result to report_to via webhook). See Async & sync modes for the full contract.
  • Name
    max_age
    Type
    string | integer
    Description
    How fresh a cached result must be to be accepted. Either an integer number of seconds (3600) or a duration string of the form "<number> <unit>" — units s/min/h/d/w (e.g. "2 hours", "3 days", "30m"). Defaults to 7 days, clamped to a max of 30 days; 0 always bypasses the cache. See Caching for all accepted units.
POST/lighthouse
curl -X POST https://urlpipe.dev/lighthouse \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "device": "desktop"}'
Response
{
  "url": "https://example.com",
  "fetchTime": "2026-01-01T00:00:00.000Z",
  "device": "desktop",
  "categories": {
    "performance":   { "score": 0.95, "title": "Performance" },
    "accessibility": { "score": 0.88, "title": "Accessibility" },
    "best-practices":{ "score": 0.92, "title": "Best Practices" },
    "seo":           { "score": 0.90, "title": "SEO" },
    "pwa": null
  },
  "metrics": {
    "first-contentful-paint": {
      "score": 0.95, "displayValue": "1.2 s",
      "numericValue": 1200, "numericUnit": "millisecond"
    },
    "largest-contentful-paint": {
      "score": 0.90, "displayValue": "2.5 s",
      "numericValue": 2500, "numericUnit": "millisecond"
    },
    "cumulative-layout-shift": {
      "score": 1.0, "displayValue": "0.05",
      "numericValue": 0.05, "numericUnit": "unitless"
    },
    "total-blocking-time": {
      "score": 0.93, "displayValue": "150 ms",
      "numericValue": 150, "numericUnit": "millisecond"
    }
  }
}

Category scores

Each category has a score from 0 to 1. The pwa category is null when it doesn't apply. Categories reported: performance, accessibility, best-practices and seo.

Metrics

Each metric includes score, displayValue, numericValue and numericUnit. Any metric may be null if Lighthouse couldn't compute it.

Device emulation

  • Name
    mobile
    Type
    default
    Description
    360×640 viewport, 4× CPU slowdown, slow-4G network. Simulates real-world mobile conditions and typically produces lower scores.
  • Name
    desktop
    Description
    1350×940 viewport, no CPU throttling, fast network. Generally produces higher scores.

Core Web Vitals & INP

LCP and CLS are included in metrics. INP (Interaction to Next Paint) is a field metric that needs real user interactions and can't be measured in a lab test like Lighthouse. Use total-blocking-time (TBT) as the lab proxy for responsiveness — it correlates strongly with INP.

Full audit data

Pass include_audits: "true" to add an audits object with all 150+ Lighthouse audits — performance diagnostics (render-blocking-resources, unused-css-rules), accessibility checks (color-contrast, image-alt), SEO audits and best-practices. Each audit carries a score, title, description and often a details object listing the specific elements to fix.

The mobile and desktop audits — and audits with and without include_audits — are cached separately, since those options change the result. See Caching.

Responses

Status
When
Body
200 OK
The request succeeded.
Sync: the result, in this endpoint's format (see Response above). Async: a job token — { "token": "…", "status": "accepted" }.
422 Unprocessable Entity
The analysis failed, or a parameter was invalid (a bad max_age, or a missing/invalid report_to in async mode).
{ "error": "<message>" }
429 Too Many Requests
You've hit your monthly quota for this operation's category (checked only on a cache miss).
{ "error": "quota_exceeded", "category", "limit", "used", "resets_at" }
504 Gateway Timeout
Sync only: the analysis didn't finish within 60s. It keeps running — fetch it via GET /result/:token.
{ "error": "processing_timeout", "token": "…" }
401 Unauthorized
Missing or invalid API key.

Try it live — no API key needed

Run this endpoint against any URL right in your browser.

Open tool