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.
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) ordesktop.
- Name
include_audits- Type
- string
- Description
- Set to
"true"to include the fullauditsobject (150+ audits). Defaults to"false".
- Name
report_to- Type
- string
- Description
- Webhook URL — an
httporhttpsaddress URLpipe POSTs the result to when it's ready. Required for async requests (the default); omit it only when you sendsync=true. A missing or invalid value returns422.
- 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 toreport_tovia 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>"— unitss/min/h/d/w(e.g."2 hours","3 days","30m"). Defaults to7 days, clamped to a max of30 days;0always bypasses the cache. See Caching for all accepted units.
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"}'const res = await fetch("https://urlpipe.dev/lighthouse", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "https://example.com", device: "desktop" }),
})import requests
res = requests.post(
"https://urlpipe.dev/lighthouse",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"url": "https://example.com", "device": "desktop"},
){
"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.
include_audits — are cached separately, since those options change the result. See Caching.Responses
200 OK422 Unprocessable Entity429 Too Many Requests504 Gateway Timeout401 UnauthorizedTry it live — no API key needed
Run this endpoint against any URL right in your browser.