Bulk PageSpeed Insights & Core Web Vitals Checker + Monitor avatar

Bulk PageSpeed Insights & Core Web Vitals Checker + Monitor

Pricing

from $4.50 / 1,000 page audit (per url, per device)s

Go to Apify Store
Bulk PageSpeed Insights & Core Web Vitals Checker + Monitor

Bulk PageSpeed Insights & Core Web Vitals Checker + Monitor

Core Web Vitals and PageSpeed bulk checker: run PageSpeed Insights (Lighthouse) on many URLs, a sitemap or a whole site. No API key needed. Real-user LCP, INP, CLS pass/fail with 6-month trends, top fixes, competitor comparison, Slack/Discord alerts and an HTML report.

Pricing

from $4.50 / 1,000 page audit (per url, per device)s

Rating

0.0

(0)

Developer

Tobby Tools

Tobby Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Share

Bulk PageSpeed Insights & Core Web Vitals Monitor

Check PageSpeed and real-user Core Web Vitals for a whole sitemap in minutes, and get a Slack, Discord or Teams alert when real users start seeing a slower site. $0.006 per page audit, no Google API key needed.

Proof
Speed (same 5 URLs, mobile, 18 Oct 2026)53 s, vs 145–195 s for the three other Apify PageSpeed/SEO Actors that returned results; two more returned 0 results (raw HTTP 429 errors)
Real-user dataThe only Actor in that test that returned Chrome UX Report (CrUX) field data: LCP, INP, CLS with pass/fail and a 6-month trend
Alerts without lab noiseOn a 30-URL monitoring run with the default settings, 0 alerts fired. Alerting on Lighthouse lab scores raised 7 false alerts on the same pages, because lab scores moved by up to 18 points between runs
Price$0.006 per page audit, no start fee, failed URLs free

Bulk PageSpeed Insights and Core Web Vitals checker for hundreds of URLs, a sitemap or a whole website. No API key needed. Paste your URLs and click Start. For every page you get Google Lighthouse scores, real-user Core Web Vitals (LCP, INP, CLS) with pass/fail and a 6-month trend, the top fixes ranked by time saved, what makes LCP slow, a screenshot, and a link to the full PageSpeed report. Schedule it and it alerts you in Slack, Discord or Teams when pages get slower.

It uses Google's official APIs (PageSpeed Insights API v5, Chrome UX Report API and CrUX History API). No scraping, no proxies, no 4 GB headless browser.

Use cases: who it's for

  • SEO and web agencies: audit a client's whole sitemap in minutes, then send a polished HTML report and a Sheets-ready table.
  • Developers and site owners: catch slow releases with scheduled monitoring. Alerts are based on real-user data, so lab noise doesn't trigger them.
  • Growth and sales teams: use the bulk Core Web Vitals checker for domains (field data only, about $1 per 1,000 URLs) to qualify leads or benchmark a market.
  • Anyone comparing against competitors: rank your pages against rival sites side by side.

Quick start

Paste URLs or a site address and click Start. The same input as JSON:

{
"urls": ["https://web.dev/", "https://www.example.com/"],
"sitemapUrls": ["https://www.example.com/"],
"maxSitemapUrls": 50,
"device": "mobile",
"monitorName": "acme-weekly",
"alertWebhookUrl": "https://discord.com/api/webhooks/…"
}

Leave monitorName and alertWebhookUrl empty for a one-off audit. A shortened real result is in Sample output. From code:

curl -X POST "https://api.apify.com/v2/acts/tobbyb~pagespeed-core-web-vitals-monitor/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" -d '{"urls":["https://web.dev/"],"device":"mobile"}'

There is also an n8n community node: n8n-nodes-pagespeed-core-web-vitals-monitor (GitHub).

What you get for each page

ScoresPerformance, Accessibility, Best Practices, SEO (Lighthouse 13)
Core Web Vitals (real users)coreWebVitals PASSED / FAILED / NO_DATA. p75 LCP, INP, CLS, FCP, TTFB with good / needs-improvement / poor ratings and % of good visits. Page level, falling back to the whole site (origin) for low-traffic pages
6-month trendWeekly real-user p75s for up to 40 weeks (CrUX History API), improving / stable / worsening, and how many weeks the page has been passing or failing
Lab metricsLCP, FCP, TBT, CLS, Speed Index, TTI, main-thread work, JavaScript execution time. Optional median of 2–5 runs with min–max spread
Why it's slowTop fixes with estimated ms and KB saved, LCP element and LCP breakdown (server / load delay / load time / render delay), layout-shift culprits, third-party cost, failed accessibility/SEO checks
ContextScreenshot, redirect chain, HTTP status, page weight, request count, DOM size, Lighthouse/Chrome version, link to the full PageSpeed Insights report
MonitoringStatus vs your previous runs (new / stable / improved / regressed), an exact list of what got worse for real users, and lab changes listed as info (labChanges)

Every run also saves:

  • a shareable HTML report: summary gauges, real-user distribution, site-wide top fixes, competitor ranking, page groups, expandable per-page details and errors with fixes;
  • a SUMMARY JSON.

Sample output (real run, web.dev, mobile, 3 lab runs)

{
"url": "https://web.dev/", "device": "mobile",
"performanceScore": 46, "accessibilityScore": 90, "bestPracticesScore": 96, "seoScore": 92,
"coreWebVitals": "FAILED", "coreWebVitalsScope": "url",
"fieldLcpMs": 3051, "fieldInpMs": 218, "fieldCls": 0.01,
"fieldLcpTrend": "worsening", "cwvStreakWeeks": 25,
"labLcpMs": 3935, "labTbtMs": 1165, "labCls": 0.118, "labRunsCount": 3, "performanceScoreRange": 14,
"topOpportunity": "Render-blocking requests (~2300 ms)",
"lcpBreakdown": { "ttfbMs": 4, "renderDelayMs": 648 },
"thirdParties": { "count": 7, "top": [{ "entity": "Google Tag Manager", "transferKiB": 586, "mainThreadMs": 1363 }] },
"opportunities": [{ "title": "Reduce unused CSS", "estimatedSavingsMs": 450, "estimatedSavingsKiB": 140 }],
"monitoringStatus": "stable",
"screenshotUrl": "https://api.apify.com/v2/key-value-stores/…/records/screenshot-mobile-…",
"psiReportUrl": "https://pagespeed.web.dev/analysis?url=https%3A%2F%2Fweb.dev%2F&form_factor=mobile"
}

How to check Core Web Vitals for many URLs

  1. Paste URLs (one per line). Or add a sitemap, or just your site address: the sitemap is found automatically through robots.txt.
  2. Pick Mobile, Desktop or Both.
  3. Click Start. Results stream into the dataset. Export to CSV, Excel, JSON or Google Sheets (use the Flat table view), or connect to Zapier, Make or n8n.

No Google API key is needed. See Use your own Google API key for big jobs.

Bulk Core Web Vitals checker (field data only)

Turn off Run Lighthouse lab test to fetch only real-user Chrome UX Report data. It takes about 1 second per URL, so thousands of URLs or competitor domains cost $0.001 each. Pages without enough Chrome traffic are not charged. The 6-month trend is included.

Core Web Vitals monitoring with alerts

  1. Set Monitor name (e.g. acme-shop-weekly).
  2. Add a Slack / Discord / Microsoft Teams webhook (or any https endpoint for JSON).
  3. Create an Apify Schedule (daily or weekly).

What triggers an alert (default): real-user data only. Each run compares every page's Chrome UX Report data with the previous run. You get an alert, and a regressed status, when:

  • Core Web Vitals go from PASSED to FAILED,
  • a real-user p75 (LCP, INP, CLS, FCP, TTFB) gets 10%+ worse,
  • a real-user rating gets worse (e.g. good → needs improvement).

Lab (Lighthouse) changes are shown but not alerted. Each row lists them in labChanges / labChangeSummary, and the report shows them in an "info only" section, compared with the median of earlier runs. We made this the default after measuring it. Google's lab tests are noisy: on 30 unchanged sites, scores moved by up to 18 points between runs 10 minutes apart. Even with medians and two-run confirmation, lab-based alerting still raised 2–7 false alerts per run. Real-user data is a 28-day aggregate, so it doesn't jump around like that.

Want lab alerts too? Turn on Also alert on lab changes. Lighthouse runs per page then defaults to 3 (median of 3 runs, charged as extra lab runs), and a lab drop must repeat on two runs in a row before it alerts. One-off dips are shown as suspected.

Overlapping runs. Don't run two schedules with the same monitor name at the same time. If it happens anyway, the Actor detects the other run and logs a warning. When saving, it merges both runs' results page by page (newest test wins) instead of overwriting them, and records this in the summary (monitorConcurrency).

Compare with competitors

Add competitor pages under Competitor URLs. The report and SUMMARY.comparison rank all sites by:

  • performance,
  • Core Web Vitals pass rate,
  • real-user LCP / INP / CLS.

They also show how far you are from the best competitor.

Page groups

Add groups like Blog = /blog/ or Products = ^/product/ to see pass rate, medians and the slowest page per template. Without groups, pages are grouped by their first folder.

Use your own Google API key

Without a key, the Actor uses its own shared Google quota, limited to 200 page audits per run. If the shared daily quota ever runs out, you get a clear SHARED_QUOTA_EXHAUSTED message (not charged). For big or frequent jobs, add your free key (2 minutes):

  1. In the Google Cloud console, create a project.
  2. Enable PageSpeed Insights API and Chrome UX Report API.
  3. Go to Credentials → Create credentials → API key, and paste it into Google API key. It is stored encrypted and never appears in the output.

Your key gets about 25,000 PageSpeed audits per day. The CrUX API allows 150 requests per minute. The Actor rate-limits itself and retries with back-off.

Errors never stop the run and are never charged

Each URL that can't be audited becomes a row with errorCode, a plain-English errorTitle and a concrete howToFix. Examples:

errorCodeerrorTitlehowToFix
HTTP_404Page not found (404)Fix or remove the link, or audit the URL it moved to
NOT_HTMLNot a web pagePDFs, images and JSON are skipped
DNS_FAILUREDomain does not existCheck the spelling
BLOCKED_BY_INTERSTITIALBlocked by a bot checkAllow-list PageSpeed in your firewall

Others include TIMEOUT, PSI_UNABLE_TO_PROCESS, SITEMAP_ERROR and SHARED_QUOTA_EXHAUSTED. 404s, non-HTML files and dead domains are caught by a quick pre-check before a PageSpeed call is spent. PageSpeed itself happily scores a 404 page as "100", and we catch that too.

How it compares

This Actorpagespeed.web.devSearch Console Core Web Vitals reportOther Apify PageSpeed Actors (our 5-URL test)
Many URLs or a sitemap in one goYes (up to 500 URLs per run; 200 audits per run on the shared key)One URL at a timeYour own verified sites only, grouped by URL patternYes
Real-user (CrUX) Core Web VitalsYes, page and origin, with a 6-month trendYes, one URL at a timeYesNone returned it
Lighthouse lab scores and fixesYes, top fixes with ms/KB savedYesNo16 and 49 fields in the two that ran Lighthouse
Competitor sitesYes, ranked side by sideOne at a timeYour own sites only–
Webhook alerts when real users get a slower siteSlack, Discord, Teams or any webhookNo––
ExportCSV, Excel, JSON, Google Sheets, HTML reportNo bulk export–Dataset
Errors (404, bot wall, quota)Typed error item with a fix, not chargedError message–2 of 5 returned raw 429 errors and 0 results

Pricing (pay per event)

EventPrice
Page audit (one URL on one device: lab + real-user data + trend)$0.006
Extra Lighthouse run for the median (only if runs per page > 1)$0.003
Field-data-only lookup (free when the page has no CrUX data)$0.001
Regression detected (monitoring)$0.002
HTML report (once per run, optional)$0.01

There is no start fee and failed URLs are free. Examples:

  • 500 URLs × mobile = $3.00
  • weekly monitoring of 100 URLs × both devices ≈ $1.21 per run
  • 1,000 domains, field data only ≈ $1

FAQ

Why do PageSpeed scores change between runs? Lighthouse runs in a simulated slow phone on Google's servers, and results vary (we saw ±18 points). Use Lighthouse runs per page (median) and rely on the real-user Core Web Vitals, which are 28-day aggregates.

Lab vs field data, which one matters? Google ranks with field data (real Chrome users, CrUX). Lab data explains why a page is slow. You get both.

Why does a page show NO_DATA? CrUX only covers pages with enough Chrome traffic. Then the whole site's (origin) data is used and marked coreWebVitalsScope: "origin".

Is INP available in the lab? No. INP needs real interactions, so it comes from CrUX. TBT is the lab proxy.

Why is lab TTFB sometimes 2–5 ms? Google measures it from its own datacenter, often next to your CDN. Use field TTFB for the real-world value.

Do I need a Google API key? No. Runs use a shared Google quota, up to 200 page audits per run. For bigger or frequent jobs, add your own free key (see above).

How do I get alerts in Discord or Slack? Set Monitor name and Alert webhook URL, then create an Apify Schedule. Alerts fire on real-user regressions by default.

Can I audit pages behind a login? No. Google must be able to load the page publicly.

Not affiliated with or endorsed by Google. PageSpeed Insights, Lighthouse and Chrome UX Report are Google products, used through their public APIs.