Bulk PageSpeed Checker: Real-User Core Web Vitals
Pricing
$2.00 / 1,000 url tested on one devices
Bulk PageSpeed Checker: Real-User Core Web Vitals
Bulk-test URLs with PageSpeed Insights (Lighthouse): performance, SEO & accessibility scores plus real-user Core Web Vitals (LCP, INP, CLS) for mobile and desktop. $0.002 per URL per device, failed URLs free. Works via Apify MCP and x402. Unofficial, not affiliated with Google.
Pricing
$2.00 / 1,000 url tested on one devices
Rating
0.0
(0)
Developer
Quan Ta
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Paste a list of URLs, get one row per URL with Google PageSpeed Insights results for mobile and desktop: Lighthouse performance, SEO and accessibility scores, real-user Core Web Vitals (LCP, INP, CLS from the Chrome UX Report) with a clear pass / fail verdict, and the top fixes in plain English.
- Uses Google's public PageSpeed Insights API — the same engine as pagespeed.web.dev (Google-hosted Lighthouse + Chrome UX Report). Unofficial tool, not affiliated with or endorsed by Google.
- No API key needed (a built-in key is used). Failed URLs are not charged.
- Works with a plain list, or reads URLs straight from another Actor's dataset (e.g. Bulk Website Audit).
Quick links
What you get · How to use · For AI agents · Pricing · Use with n8n, Make, Zapier, Sheets · FAQ
What you get
| Column | Meaning |
|---|---|
summary | Verdict per device, e.g. mobile: FAILS Core Web Vitals · desktop: passes Core Web Vitals |
mobilePerformance, desktopPerformance | Lighthouse performance score 0–100 |
mobileCwvPassed, desktopCwvPassed | Real-user Core Web Vitals verdict (Google's thresholds: LCP ≤ 2.5 s, INP ≤ 200 ms, CLS ≤ 0.1 at the 75th percentile). null = the page has too little Chrome traffic for field data |
mobileCwvSource, desktopCwvSource | Where the real-user data comes from: url (this exact page), origin (site-wide average — Google has no data for this page, so the verdict describes the whole site) or none |
mobileLcpMs, mobileInpMs, mobileCls (+ desktop…) | The three Core Web Vitals from real users only (p75). Empty when Google has no field data — the lab value is in mobileLabLcpMs and in the mobile.lab object, never mixed into these columns |
seoScore, accessibilityScore | Lighthouse SEO and accessibility scores |
topFix | The single biggest speed improvement, e.g. "Serve images in WebP/AVIF" |
mobile, desktop | Full detail: all 4 scores, lab metrics (FCP, LCP, TBT, CLS, Speed Index, TTFB, page size, requests), field metrics (+ whether they are for this exact URL or the site average), and the top 3 fixes with estimated time / KB saved |
Output example (real run, October 2026)
{"url": "https://stripe.com/pricing","summary": "mobile: passes Core Web Vitals · desktop: passes Core Web Vitals","mobilePerformance": 69,"desktopPerformance": 81,"mobileCwvPassed": true,"desktopCwvPassed": true,"mobileCwvSource": "url","mobileLcpMs": 1252,"mobileInpMs": 105,"mobileCls": 0,"mobileLabLcpMs": 2852,"seoScore": 92,"accessibilityScore": 95,"topFix": "Remove unused JavaScript","mobile": {"scores": {"performance": 69,"accessibility": 95,"bestPractices": 73,"seo": 92},"lab": {"fcpMs": 2312,"lcpMs": 2852,"tbtMs": 1224,"cls": 0,"speedIndexMs": 2599,"ttfbMs": 99,"pageSizeKb": 1448,"requests": 223},"field": {"source": "url","overall": "FAST","passed": true,"lcpMs": 1252,"inpMs": 105,"cls": 0,"fcpMs": 1220,"ttfbMs": 553},"topFixes": [{"title": "Remove unused JavaScript","savingsMs": null,"savingsKb": 267}]}}
Who is it for?
- SEO and web agencies — audit a client's top pages (or a prospect list) in one run and open the conversation with a concrete number: "your mobile LCP is 4.1 s, Google wants 2.5 s".
- Site owners and developers — check every template (home, category, product, blog) after a release; schedule it weekly to catch regressions.
- Lead generation — run Bulk Website Audit on a list of businesses, then feed its dataset here to add speed and Core Web Vitals.
How to use
- Add URLs in URLs — full URLs or bare domains (
example.comtests the homepage). Or paste a dataset ID from another Actor. Via the API,urlsis best sent as an array. A single string also works: put one URL per line (or separate with spaces). Commas (and semicolons) only separate when the next entry starts withhttps://orwww.(optionally inside quotes,<…>or brackets), or when the entries are bare domains (a.com,b.com) — soa.com/pricing,b.comis read as ONE URL. Commas inside a URL (/maps/@21.02,105.8,15z,?ids=1,2) are kept. - Pick Devices: mobile, desktop or both (default both).
- Click Start and download the results as CSV, Excel or JSON, or use the API.
Each PageSpeed run takes about 10–60 seconds on Google's side; with the default 6 parallel requests the Actor tests about 3–5 URLs per minute on both devices (faster on mobile only) — 100 URLs × 2 devices take roughly 20–30 minutes. For more than a handful of URLs start the run asynchronously (Apify's run-sync API endpoints time out after 300 s) and read the dataset when it finishes.
For AI agents (MCP, x402)
This Actor works from AI agents through the Apify MCP server and can be paid per call with x402 (it runs with limited permissions and only calls Google's public PageSpeed Insights API).
- Minimal input:
{"urls": ["https://example.com/", "https://another-shop.com/pricing"]}— optionalstrategies(["mobile"]halves the cost) andmaxUrls. - Cost: $0.002 per URL per device; URLs that cannot be analysed are free. 10 URLs on mobile + desktop ≈ $0.04.
- Speed: each PageSpeed run takes 10–60 s (6 run in parallel). 3 URLs on both devices took about 70 s in our test, so the synchronous
run-sync-get-dataset-itemsendpoint (300 s limit) suits only a handful of URLs — for longer lists start a run and read its dataset. - Read first:
summary(plain English verdict),mobilePerformance/desktopPerformance(0–100),mobileCwvPassed(real-user Core Web Vitals pass/fail,null= no or incomplete Chrome data),mobileCwvSource(url/origin= site average /none),topFix,ok. - Example output row (shortened, real run):
{"url":"https://example.com/","ok":true,"summary":"mobile: passes Core Web Vitals · desktop: passes Core Web Vitals","mobilePerformance":100,"mobileCwvPassed":true,"mobileCwvSource":"url","mobileLcpMs":1071,"seoScore":80}
Pricing
$0.002 per device result — one URL on mobile + desktop = $0.004. 1,000 URLs on mobile only = $2.
- URLs that Google cannot analyse (page down, blocked, timeout, Lighthouse error) and invalid entries in your list are listed with the reason and not charged. If the page blocks Google's Lighthouse but Google still has real-user Core Web Vitals for it, you get those for free.
- Choose only "Mobile" to halve the cost.
- Set Max cost per run in the run options to cap your spend.
- On the Apify Free plan, the $5 monthly credit covers about 2,500 device results (1,250 URLs on mobile + desktop) — trying it is effectively free.
Use it with n8n, Make, Zapier or Google Sheets
- n8n — Apify node: Run an Actor → Get dataset items → Google Sheets / Airtable / Slack.
- Make / Zapier — Apify app (Make: Run an Actor; Zapier: action Run Actor, trigger Finished Actor Run), then map
url,summary,mobilePerformance,topFix. - Weekly monitoring — save your URL list as a task and add an Apify Schedule; connect Slack or email to get the results.
- API (bulk) —
POST https://api.apify.com/v2/acts/quanta1810~bulk-pagespeed/runs?token=YOUR_TOKEN, then read the run's dataset.
FAQ
Why is mobileCwvPassed null for some pages? Google only has real-user (Chrome UX Report) data for pages with enough Chrome traffic. Without it, use the lab score. If a single page has no data but the whole site does, Google returns the site average — the row says mobileCwvSource: "origin" and the verdict adds "site-wide average".
Why do scores differ between runs? A single Lighthouse lab run is noisy: the mobile performance score can swing 10–20 points between runs of the same page (Google's own Lighthouse docs recommend medians of several runs). For monitoring, watch the real-user Core Web Vitals columns — they are a 28-day average and stable.
Do I need my own Google API key? No. Only add one (free, from Google Cloud) if you test many thousands of URLs per day.
Is this the same as the Lighthouse in Chrome DevTools? It is Google's hosted Lighthouse (PageSpeed Insights), which runs on Google's servers with a throttled mobile profile — like pagespeed.web.dev, not your laptop. Individual lab scores vary run to run, on the website too.
Found a bug or need another field? Open an issue on the Issues tab — answered within 2 business days.
Known limits
- Very popular sites (Amazon, Google…) are sometimes rate-limited by Google PageSpeed for a while (HTTP 429) — the row says so, it is free, re-run later.
- Sites behind bot protection may block Google's Lighthouse (e.g. HTTP 403). You still get the real-user Core Web Vitals when Google has them — free.
- Error pages (404, 410, 5xx) are reported as "lab test failed" and not charged — their scores would describe the error page.
- The built-in key shares Google's daily PageSpeed quota across all users. If it is exhausted, the run stops early with a clear message (nothing is charged for the rest) — add your own free key in the input to continue. If nothing at all could be analysed for this reason, the run is marked failed so your automation notices.
- If you set Max cost per run, the Actor stops starting new tests when the budget is used up; remaining URLs are listed as "skipped (not charged)".
Support & changelog
- 0.1 (2026-10) — first release: mobile + desktop, Lighthouse scores, real-user Core Web Vitals with pass/fail and data-source label, top 3 fixes, dataset input, error pages and failed URLs free, safe stop on spending limit / daily quota, no double charge after platform restarts.
More tools by the same author: Bulk Website Audit (SEO, SSL, security headers, SPF/DMARC — 1,000 sites for $3).