Bulk PageSpeed Insights Checker: Lighthouse & Core Web Vitals
Pricing
from $2.00 / 1,000 page auditeds
Bulk PageSpeed Insights Checker: Lighthouse & Core Web Vitals
Run Google PageSpeed Insights on hundreds of URLs: Lighthouse performance, accessibility, best-practices and SEO scores, Core Web Vitals (lab + real-user CrUX incl. INP, LCP, CLS) and top fixes per page. Mobile, desktop or both. No API key needed to start. $3.00 per 1,000 audits.
Pricing
from $2.00 / 1,000 page auditeds
Rating
0.0
(0)
Developer
Aaron Allday
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
9 days ago
Last modified
Categories
Share
Who it's for: SEO agencies, web developers, site owners and performance teams who check page speed for many URLs.
The problem it solves: pagespeed.web.dev checks one URL at a time, and the raw API returns huge JSON. This Actor audits a whole URL list and gives you one row per page and device with scores, Core Web Vitals and the top fixes.
Use cases:
- Core Web Vitals audits for a whole site (pair with Sitemap URL Extractor)
- Weekly performance monitoring on a schedule
- Agency client reports and competitor speed comparisons
- Before/after checks for releases and migrations
Quick example: {"urls":[{"url":"https://example.com"}],"strategy":"mobile"} → one row per URL and device: performanceScore, accessibilityScore, seoScore, coreWebVitalsAssessment, lab and field metrics (LCP, INP, CLS…), opportunities.
Price: $3.00 per 1,000 audits. Comparable PageSpeed/Lighthouse Actors in the Store charge about $2 to $80 per 1,000 URLs. Failed, skipped and retried audits are free.
Run Google PageSpeed Insights on hundreds of URLs at once and get every result in one table: Lighthouse Performance, Accessibility, Best Practices and SEO scores, Core Web Vitals (lab data plus real-user Chrome UX Report field data), and the top fixes for each page, on mobile, desktop or both.
It uses Google's official PageSpeed Insights API v5, so you get the same numbers as pagespeed.web.dev. There's no browser to run and no proxies, which makes it cheap and reliable.
What you get for each URL and device
- Scores (0–100): performance, accessibility, best practices, SEO
- Core Web Vitals, field data: 28-day p75 from real Chrome users (CrUX) for LCP, INP, CLS, FCP and TTFB, each rated FAST / AVERAGE / SLOW, for both the page and the whole origin
- Core Web Vitals verdict: PASSED / FAILED / NO_FIELD_DATA, the same pass/fail result PageSpeed shows
- Lab metrics (Lighthouse): LCP, CLS, TBT (the lab stand-in for INP), FCP, Speed Index, TTI, server response time, total page weight
- Top opportunities: ranked by estimated time saved, e.g. "Reduce unused JavaScript: 3,000 ms / 907 KiB"
- Failed audits: accessibility, SEO and best-practices checks that failed
- A link to the full report on pagespeed.web.dev
Use cases
- SEO and Core Web Vitals audits of a whole site. Pair it with Sitemap URL Extractor to get every URL first.
- Weekly performance monitoring: schedule runs and track scores over time.
- Agency client reports and comparisons with competitors
- Checks before and after a release or migration
API key: optional for small runs, recommended for big ones
- No key needed for quick checks. Runs without a key use the Actor's built-in Google API key, up to 30 audits per run (one audit = one URL on one device). Extra URLs are listed as
"status": "skipped"rows and are not charged. The limit keeps the shared quota fair for everyone. - Big jobs: bring your own free key. Paste your own Google API key into Google API key for unlimited audits per run, at up to 25,000 audits a day on Google's free quota. It takes about 2 minutes and needs no billing: get a key, click "Get a Key" and copy it. Your key is stored as a secret input.
- If Google's quota is ever used up, the run still finishes cleanly with a clear message and an error row, and nothing is charged.
Input
| Field | Default | Description |
|---|---|---|
urls | https://crawlee.dev | Pages to audit (max 30 audits per run without your own key) |
apiKey | – | Your free Google API key (stored as a secret) |
strategy | mobile | mobile, desktop or both (both = 2 audits per URL) |
categories | all four | performance, accessibility, best-practices, seo |
maxConcurrency | 4 | Parallel audits (capped at 4 when using the built-in key) |
maxOpportunities | 5 | Top opportunities per audit |
locale | en | Language of audit titles |
maxRetries | 4 | Retries on 429, 5xx and timeouts, with exponential backoff |
requestTimeoutSecs | 120 | Timeout per audit |
includeRawResponse | false | Attach the full PSI JSON (large) |
{"urls": [{ "url": "https://example.com" }, { "url": "https://example.com/pricing" }],"strategy": "both","apiKey": "AIza...","maxConcurrency": 8}
Output example
This is a real result from a cloud run on 10 Oct 2026 (crawlee.dev, mobile; originField is omitted here for brevity):
{"url": "https://crawlee.dev/","finalUrl": "https://crawlee.dev/","strategy": "mobile","status": "success","performanceScore": 47,"accessibilityScore": 95,"bestPracticesScore": 96,"seoScore": 92,"coreWebVitalsAssessment": "FAILED","lab": {"lcpMs": 11938, "cls": 0, "tbtMs": 823, "fcpMs": 1812, "speedIndexMs": 7838, "ttiMs": 22354, "serverResponseMs": 2, "totalByteWeight": 2674545},"field": {"overallCategory": "AVERAGE", "isOriginFallback": false, "lcpMs": 2894, "lcpCategory": "AVERAGE", "inpMs": 305, "inpCategory": "AVERAGE", "cls": 0, "clsCategory": "FAST", "fcpMs": 2363, "fcpCategory": "AVERAGE", "ttfbMs": 880, "ttfbCategory": "AVERAGE"},"opportunities": [{"id": "cache-insight", "title": "Use efficient cache lifetimes", "displayValue": "Est savings of 782 KiB", "savingsMs": 2550, "savingsBytes": 0},{"id": "unused-javascript", "title": "Reduce unused JavaScript", "displayValue": "Est savings of 866 KiB", "savingsMs": 1950, "savingsBytes": 886455},{"id": "render-blocking-insight", "title": "Render-blocking requests", "displayValue": "Est savings of 1,200 ms", "savingsMs": 1200, "savingsBytes": 0}],"failedAudits": [{"category": "accessibility", "id": "color-contrast", "title": "Background and foreground colors do not have a sufficient contrast ratio."},{"category": "accessibility", "id": "landmark-one-main", "title": "Document does not have a main landmark."}],"lighthouseVersion": "13.5.0","fetchTime": "2026-10-10T17:14:35.441Z","reportUrl": "https://pagespeed.web.dev/analysis?url=https%3A%2F%2Fcrawlee.dev%2F&form_factor=mobile"}
Failed URLs appear as "status": "error" rows that say why (for example, Lighthouse couldn't load the page), and they are never charged.
Pricing
Pay per event: $3.00 per 1,000 audits ($0.003 per audit). One audit = one URL on one device, so "strategy": "both" counts as 2 audits per URL. Platform usage is included. Failed audits, retries, skipped URLs and error rows are free. Set a maximum cost per run and the Actor stops starting new audits when it reaches that limit.
Examples: 100 pages on mobile cost $0.30. A 1,000-page site on mobile and desktop costs $6.00.
Related Actors
More no-login, pay-per-result tools from the same developer:
- Sitemap URL Extractor: every URL from a website's sitemaps (indexes, gzip, RSS), with lastmod and priority.
- Whole-Site PageSpeed Audit (Sitemap → Lighthouse): enter a homepage and get PageSpeed audits of its pages plus a site summary.
- SEO Meta Tags & Structured Data Auditor: titles, descriptions, canonical, noindex, Open Graph and Schema.org rich-result checks per URL.
- Wayback Machine Snapshot Finder: archived snapshots, first/last capture and every archived URL of a domain.
- Domain Health Checker: WHOIS, DNS & SSL: domain age and expiry, DNS/SPF/DMARC, SSL certificate and HTTPS redirects.
- ATS Jobs Scraper: open jobs from Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee and Personio.
Use together
Extract a site's URLs with Sitemap URL Extractor (e.g. "includeRegex": "/products/", "maxUrls": 30), then pass the url column of its dataset as urls here. You can do this by hand, with an Apify integration ("Run another Actor when this one succeeds"), or in code:
const { defaultDatasetId } = await client.actor('aaronallday89/sitemap-url-extractor').call({ startUrls: [{ url: 'https://example.com' }], includeRegex: '/products/', maxUrls: 30 });const { items } = await client.dataset(defaultDatasetId).listItems({ fields: ['url'] });await client.actor('aaronallday89/pagespeed-bulk-audit').call({ urls: items.map((i) => ({ url: i.url })), strategy: 'both' });
FAQ
Why are the field data / Core Web Vitals empty?
Google only has real-user (CrUX) data for pages and origins with enough Chrome traffic. Smaller sites show NO_FIELD_DATA, but you still get the lab metrics.
Why is my score different from the last run? Lighthouse lab scores naturally vary by a few points from run to run. Field data is a 28-day rolling average and changes slowly.
Where's lab INP?
Lighthouse can't measure INP in a lab test, so it reports Total Blocking Time (TBT) instead. Real-user INP is in field.inpMs.
How fast is it? Each audit takes about 10–40 seconds on Google's side (the cloud test took 30 seconds). With your own key and concurrency 8, that's roughly 15–40 audits a minute.
Does it run Lighthouse itself? No. Google runs Lighthouse on its own servers through the official API, which is why it's cheap and matches pagespeed.web.dev.
Why is there a 30-audit limit? It applies only when you don't provide a key, because the built-in key's daily quota is shared by all users. Add your own free key and the limit goes away.
I got "Invalid API key" or "Access denied". Make sure the key is copied correctly and that the PageSpeed Insights API is enabled for its Google Cloud project.
More tools from the same developer
- Sitemap URL Extractor: Get All URLs From Any Website: SEO specialists, agencies, developers and data/AI teams
- Whole-Site PageSpeed & Core Web Vitals Audit (via Sitemap): SEO consultants, agencies and site owners
- Greenhouse, Lever, Ashby & Workable Jobs Scraper (7 ATS): Job boards and aggregators, recruiters, sales teams prospecting on hiring signals, and market researchers
- Bulk WHOIS, DNS & SSL Expiry Checker: Domain Health: IT admins, agencies managing client domains, email deliverability teams, domain investors and lead-enrichment workflows