Lighthouse PageSpeed Checker - Core Web Vitals in Bulk
Pricing
from $7.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Security
Limited permissionsShare
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
| Field | Type | Default | What it does |
|---|---|---|---|
urls | list of strings | ["https://example.com"] | Pages to audit. A link without scheme gets https://. |
strategy | mobile / desktop / both | mobile | both gives two rows per URL. |
categories | list | all four | Subset of performance, accessibility, best-practices, seo. Fewer is a little faster; skipped ones are null. |
maxUrls | integer | 50 | Cap on URLs audited per run (max 1000). |
concurrency | integer | 2 | Parallel audits. Each runs its own Chrome (about 0.5-1 GB). |
monitorId | string | empty | Turns on monitoring (score history and alerts). |
alertDrop | integer | 5 | Alert when any category score falls by this many points. |
onlyAlerts | boolean | false | Output only rows with alert=true. |
includeErrorRows | boolean | false | Also 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:
previousPerformanceandperformanceDelta(points since the last run)alert: trueandalertReasons(for exampleperformance 95 -> 73 (-22)) when any audited category fell byalertDroppoints or morepreviousCheckedAt
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
alertDropif 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
includeErrorRowsto true to get them as rows witherror.
Use it as an integration (chain it after another actor)
This actor can run automatically after any actor whose results contain a URL.
- Open the source actor in Apify Console and go to the Integrations tab.
- Click Add integration -> Actor, pick this actor and set Dataset to
{{resource.defaultDatasetId}}(leaveurlsempty). Set your other options and save. - 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