PageSpeed & Lighthouse Batch: Core Web Vitals Checker avatar

PageSpeed & Lighthouse Batch: Core Web Vitals Checker

Pricing

from $2.50 / 1,000 url analyzeds

Go to Apify Store
PageSpeed & Lighthouse Batch: Core Web Vitals Checker

PageSpeed & Lighthouse Batch: Core Web Vitals Checker

Run Google PageSpeed Insights on a list of URLs. Lighthouse scores (performance, accessibility, best practices, SEO), LCP, CLS, TBT, FCP, Speed Index, real-user field data and the top 5 fixes, for mobile and desktop. Failed URLs are free.

Pricing

from $2.50 / 1,000 url analyzeds

Rating

0.0

(0)

Developer

Datakiln

Datakiln

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Paste a list of URLs and get back, for each one, the four Lighthouse scores (performance, accessibility, best practices, SEO), the main lab metrics (LCP, CLS, TBT, FCP, Speed Index), real-user field data when Google has it, and the five fixes with the biggest estimated saving. Mobile, desktop or both.

It calls the official Google PageSpeed Insights API (pagespeedonline/v5/runPagespeed) and passes Google's Lighthouse results through, so the numbers match what pagespeed.web.dev shows.

  • One row per URL and device, in a flat table you can open in Excel or Google Sheets.
  • Bring your own Google API key for your own quota, or run without one on Google's shared free quota (small, see Limits).
  • Retries 429 and 5xx errors with backoff, and honors Retry-After.
  • Stops by itself when your max cost per run is reached.
  • Failed, timed-out and rate-limited analyses are never charged.
  • Your API key is never written to the log or the dataset.

What can I use it for?

UseHow
SEO audits for a clientList the home page, key landing pages and top blog posts; compare the four scores in one table.
Before/after checksRun the same list after a release and compare performanceScore, lcpMs and cls.
MonitoringSchedule the Actor weekly and send the dataset to a sheet or a webhook.
Competitor benchmarksPut your pages and competitors' pages in one run, mobile and desktop.
ProspectingFind slow sites worth pitching: sort by performanceScore, read opportunities.
AI agents and automationCall it through the Apify API or MCP and let an agent read the JSON.

How to use it

  1. Paste the URLs in Page URLs, one per line.
  2. Pick Device: mobile, desktop, or both.
  3. Optional but recommended for more than a handful of URLs: paste your own Google API key (see the FAQ).
  4. Start the run and open the Scores view.

Input example

{
"urls": ["https://example.com/", "https://www.wikipedia.org/"],
"strategy": "both",
"categories": ["performance", "accessibility", "best-practices", "seo"],
"apiKey": "YOUR_OWN_KEY"
}
FieldDefaultWhat it does
urlsrequiredPublic pages. https:// is added when missing; duplicates and #fragments are removed.
strategymobilemobile, desktop or both. both is two analyses (and two charges) per URL.
categoriesall fourWhich category scores to return.
apiKeynoneYour own PageSpeed Insights API key. Stored as a secret.
maxConcurrency5 with a key, 2 withoutAnalyses at the same time (max 20 with a key, 2 without).
requestTimeoutSecs120Time allowed for one analysis. Slow pages can take a minute.
maxRetries3Retries on 429, 5xx and network errors.

Output

One dataset item per URL and device. Example (shortened; values come from a mocked API response, not a live one):

{
"inputUrl": "https://example.com/",
"url": "https://example.com/",
"strategy": "mobile",
"status": "ok",
"errorKind": null,
"error": null,
"finalUrl": "https://example.com/",
"performanceScore": 91,
"accessibilityScore": 80,
"bestPracticesScore": 100,
"seoScore": 90,
"lcpMs": 2100,
"cls": 0.01,
"tbtMs": 80,
"inpMs": null,
"fcpMs": 900,
"speedIndexMs": 1400,
"fieldData": { "overall": "FAST", "lcp": { "p75": 1700, "rating": "FAST" } },
"opportunities": [
{ "id": "unused-javascript", "title": "Reduce unused JavaScript", "savingsMs": 300, "savingsBytes": 90000, "displayValue": null }
],
"lighthouseVersion": "12.0.0",
"analyzedAt": "2026-10-13T10:00:00.000Z"
}
FieldMeaning
performanceScore, accessibilityScore, bestPracticesScore, seoScoreLighthouse scores, 0 to 100.
lcpMs, cls, tbtMs, fcpMs, speedIndexMsLab metrics from the Lighthouse run.
inpMsLab INP when Lighthouse reports it. It usually does not; use tbtMs as the lab signal and fieldData.inp for real users.
fieldDataReal-user numbers (Chrome UX Report, 75th percentile) when the URL has enough traffic. null for small sites.
opportunitiesUp to 5 fixes with the largest estimated saving (savingsMs, savingsBytes).
statusok, failed, invalid-input or not-processed. Only ok rows are charged.
errorKind, errorWhy a row has no result: timeout, rate-limit, quota-daily, invalid-key, key-forbidden, bad-url, server, network, bad-response, cost-limit.

A SUMMARY record in the key-value store lists how many analyses were charged and failed, and why the run stopped, if it did.

How much does it cost?

You pay per event: url-analyzed, once for each URL and device read successfully. The price is shown on this page. Examples: 100 URLs on mobile is 100 events; 100 URLs on both devices is 200 events.

Not charged: failed analyses, timeouts, 429 and quota errors, invalid URLs, and rows marked not-processed.

Set a maximum cost per run in the run options. The Actor works out how many analyses that covers and stops there; the remaining URLs come back as free not-processed rows.

Google's API itself is free up to the quota of your key. You only pay Google if you choose to raise that quota yourself.

Limits

  • Without an API key you share Google's free quota with everyone else. It is small and is often used up for the day. When that happens the run stops with a clear message and charges nothing. For anything beyond a few URLs, use your own key.
  • Google measures from its own servers. Scores move a few points between runs of the same page; that is normal for Lighthouse. Run twice if a decision depends on 3 points.
  • Lab data is a simulation. fieldData is what real Chrome users saw, and only exists for pages with enough traffic.
  • Public pages only. Pages behind a login, a paywall or a firewall that blocks Google's servers will fail.
  • One analysis takes about 10 to 60 seconds, so large lists take a while. Higher concurrency helps only if your key's quota allows it.
  • The Actor does not crawl. It analyzes exactly the URLs you give it.
  • Google can change the API response. If a field disappears, the matching output field becomes null instead of the run failing.

It uses Google's public API as documented, with your key or the free shared quota, and reads only performance data about public pages. It collects no personal data and needs no login. You are responsible for following the Google APIs Terms of Service when you use your own key.

FAQ

How do I get an API key? In Google Cloud Console, create a project, enable the PageSpeed Insights API, and create an API key. It is free and gives you 25,000 requests a day. Restrict the key to that API if you can.

Is my key safe? It is a secret input field, it is sent only to Google, and it is removed from every log line and error message. Use a key you can revoke.

Why did my run stop with "daily quota"? The shared free quota (or your key's quota) is gone for today. Nothing was charged. Add your key or run again tomorrow.

Why is inpMs empty? Lighthouse lab runs do not measure real interactions, so there is usually no lab INP. Look at tbtMs and at fieldData.inp.

Can I run it on a schedule? Yes, with Apify Schedules. Keep the same URL list to compare runs.

Is it the same as pagespeed.web.dev? It uses the same API and Lighthouse engine, so scores should match within the usual run-to-run variation.

Not affiliated with or endorsed by Google. PageSpeed Insights and Lighthouse are Google products.