Lighthouse PageSpeed Checker - Core Web Vitals in Bulk avatar

Lighthouse PageSpeed Checker - Core Web Vitals in Bulk

Pricing

from $7.00 / 1,000 results

Go to Apify Store
Lighthouse PageSpeed Checker - Core Web Vitals in Bulk

Lighthouse PageSpeed Checker - Core Web Vitals in Bulk

Real Google Lighthouse (headless Chromium) on a list of URLs, mobile and/or desktop. One row per URL and strategy: performance, accessibility, best-practices and SEO scores, LCP, FCP, CLS, TBT, Speed Index, TTI, page weight, requests, top 5 opportunities and failing SEO/accessibility audits. No Goog

Pricing

from $7.00 / 1,000 results

Rating

0.0

(0)

Developer

Martin Petrov

Martin Petrov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Security

Limited permissions

Share

Lighthouse PageSpeed Audit - Core Web Vitals, Bulk, MCP

You need Lighthouse scores and Core Web Vitals for many URLs, but the PageSpeed Insights API wants a Google key and hits quota limits. This actor runs the real Google Lighthouse (headless Chromium) on every URL you give it: no API key, no quota, one clean row per page.

Run it from the API

curl -X POST "https://api.apify.com/v2/acts/martin10291~lighthouse-pagespeed-audit/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://example.com", "https://www.python.org"], "strategy": "both"}'

Use it from an AI agent (MCP)

Add this server URL to Claude, Cursor or any MCP client:

https://mcp.apify.com/?actors=martin10291/lighthouse-pagespeed-audit

Then ask: "Audit https://mysite.com on mobile and tell me the three biggest speed problems."

Input

FieldTypeDefaultWhat it does
urlslist of strings["https://example.com"]Pages to audit. A link without scheme gets https://.
strategymobile / desktop / bothmobileboth gives two rows per URL.
categorieslistall fourSubset of performance, accessibility, best-practices, seo. Fewer is a little faster; skipped ones are null.
maxUrlsinteger50Cap on URLs audited per run (max 1000).
concurrencyinteger2Parallel audits. Each runs its own Chrome (about 0.5-1 GB).
monitorIdstringemptyTurns on monitoring (score history and alerts).
alertDropinteger5Alert when any category score falls by this many points.
onlyAlertsbooleanfalseOutput only rows with alert=true.
includeErrorRowsbooleanfalseAlso add a (billed) row with error for pages that cannot be audited. Off by default: failed pages are free and listed in RUN_SUMMARY.

Output

One row per URL and strategy:

{
"url": "https://example.com",
"finalUrl": "https://example.com/",
"strategy": "mobile",
"fetchedAt": "2026-11-04T14:34:28.763Z",
"performance": 97,
"accessibility": 96,
"bestPractices": 100,
"seo": 80,
"lcpMs": 1245,
"fcpMs": 1147,
"cls": 0,
"tbtMs": 204,
"speedIndexMs": 1147,
"ttiMs": 1494,
"totalByteWeight": 2146,
"requests": 2,
"opportunities": [],
"failingAudits": [
{"id": "meta-description", "title": "Document does not have a meta description", "category": "seo"}
],
"lighthouseVersion": "13.6.0",
"durationSec": 21.2,
"error": null
}

Scores are integers 0-100. opportunities are the 5 biggest savings (milliseconds and/or bytes). failingAudits lists failed SEO and accessibility checks. If a page cannot be loaded, the row has error set and all scores null; the run still finishes and RUN_SUMMARY has lastError.

Monitoring and alerts

Set a monitorId (for example my-shop). The actor remembers the last scores of every URL and strategy in a named key-value store. On the next run with the same ID each row gets:

  • previousPerformance and performanceDelta (points since the last run)
  • alert: true and alertReasons (for example performance 95 -> 73 (-22)) when any audited category fell by alertDrop points or more
  • previousCheckedAt

Schedule the actor daily or weekly in Apify, set onlyAlerts: true, and you only get rows (and only pay) when something got worse. Connect the dataset to a webhook, Slack or email.

Pricing

$10.00 per 1,000 results ($0.01 per audit), about 3x cheaper than other real-Lighthouse actors ($0.03 per audit). One row is one audit; failed pages are free. No Google API key, no PageSpeed quota.

Limits and honest notes

  • It is real Lighthouse 13 with its default mobile and desktop emulation and its own user agent. No proxies, no user-agent spoofing: pages that block datacenter traffic can return an error.
  • Lab data, not field data: this is not the Chrome UX Report (CrUX) real-user data.
  • Lighthouse scores vary a little between runs (typically a few points). Lower concurrency gives steadier numbers. Raise alertDrop if you get false alerts.
  • Typical audit takes 20-60 seconds. Heavy pages need about 1 GB each; default memory is 4 GB (1 CPU core) for stable scores; for concurrency above 2 give the run more memory.
  • Pages behind a login, or that need clicks, are not covered.
  • Failed audits are free and not written as rows by default; set includeErrorRows to true to get them as rows with error.

Use it as an integration (chain it after another actor)

This actor can run automatically after any actor whose results contain a URL.

  1. Open the source actor in Apify Console and go to the Integrations tab.
  2. Click Add integration -> Actor, pick this actor and set Dataset to {{resource.defaultDatasetId}} (leave urls empty). Set your other options and save.
  3. When the source run finishes, this actor reads its dataset and processes every row. The field is detected automatically; set Dataset field if your column has another name.

You can also start it by hand with datasetId (pick a dataset or paste its ID) to process an existing dataset.

Good sources to chain from:

  • compass/crawler-google-places (Google Maps Scraper)
  • martin10291/local-business-leads-osm
  • apify/website-content-crawler
  • martin10291/website-tech-stack-detector