PageSpeed Insights Checker avatar

PageSpeed Insights Checker

Pricing

from $5.95 / 1,000 results

Go to Apify Store
PageSpeed Insights Checker

PageSpeed Insights Checker

PageSpeed Insights Checker audits URLs or pages found in a sitemap and returns Lighthouse scores, lab Core Web Vitals, failing audits, and CrUX field data when available. Run mobile or desktop reports, with no API key required by default; you can also use your own PageSpeed Insights API key.

Pricing

from $5.95 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Returns: one row per audited page and device with performanceScore, accessibilityScore, seoScore, largestContentfulPaintMs, cumulativeLayoutShift, fieldLcpP75Ms, failingAudits and sourceUrl. Input: {"urls": ["https://www.wikipedia.org/", "example.org"], "strategies": ["mobile"], "maxItems": 50} Best for: bulk Core Web Vitals audits for SEO agencies, monitoring a site's PageSpeed scores over time, and finding the slowest pages in a sitemap.

{
"url": "https://www.wikipedia.org/",
"strategy": "mobile",
"performanceScore": 100,
"seoScore": 100,
"largestContentfulPaintMs": 1389,
"cumulativeLayoutShift": 0.0009547550044766787,
"fieldLcpP75Ms": 1279,
"fieldInpP75Ms": 99
}

What does PageSpeed Insights Checker do?

PageSpeed Insights Checker runs Google PageSpeed Insights (Lighthouse) on a list of URLs, or on every page of a sitemap, and returns one clean row per page and device. Each row has the four Lighthouse category scores (performance, accessibility, best practices, SEO), the lab Core Web Vitals (LCP, CLS, TBT, FCP, Speed Index), real-user Chrome UX Report (CrUX) p75 values when Google has them, and a ranked list of the audits that fail.

You don't need a Google account, a login or an API key. By default the Actor asks the same backend the pagespeed.web.dev website uses, so you get the same reports you would see there, without pasting URLs into the website one at a time. If you already have your own free PageSpeed Insights API key, you can add it and the Actor uses the official PageSpeed Insights API instead.

It is built for jobs where one report at a time is too slow: an agency checking fifty client home pages every Monday, a web team auditing every blog post in a sitemap after a redesign, or an AI agent that needs Core Web Vitals for a handful of URLs as structured JSON.

What data can you get from PageSpeed Insights?

FieldDescriptionExample
urlThe page URL that was audited (Lighthouse requestedUrl)https://www.wikipedia.org/
finalUrlThe URL Lighthouse ended on after redirectshttps://www.wikipedia.org/
strategyDevice profile of the report: mobile or desktopmobile
fetchTimeWhen Google ran the audit, ISO 8601 UTC2026-10-19T00:20:48.892Z
lighthouseVersionLighthouse version used13.5.0
performanceScorePerformance score, 0-100100
accessibilityScoreAccessibility score, 0-10094
bestPracticesScoreBest-practices score, 0-100100
seoScoreSEO score, 0-100100
firstContentfulPaintMsLab First Contentful Paint, ms1113
largestContentfulPaintMsLab Largest Contentful Paint, ms1389
totalBlockingTimeMsLab Total Blocking Time, ms0
cumulativeLayoutShiftLab Cumulative Layout Shift0.00095
speedIndexMsLab Speed Index, ms2178.06
serverResponseTimeMsMain document server response time, ms110
totalByteWeightTotal bytes downloaded by the page101094
largestContentfulPaintDisplayLCP as Lighthouse shows it1.4 s
fieldDataScopeSource of the real-user data: url, origin or nullurl
fieldLcpP75MsReal-user LCP, 75th percentile, ms1279
fieldInpP75MsReal-user Interaction to Next Paint, p75, ms99
fieldClsP75Real-user CLS, p750
fieldFcpP75MsReal-user First Contentful Paint, p75, ms1156
fieldTtfbP75MsReal-user Time to First Byte, p75, ms535
failingAuditsAudits scoring below 0.9, biggest savings firstsee Output
runWarningsWarnings Lighthouse raised during the run[]
idStable id: strategy plus requested URLmobile:https://www.wikipedia.org/
sourceUrlLink to the report on pagespeed.web.devhttps://pagespeed.web.dev/analysis/https-www-wikipedia-org/w9n8erjr94?form_factor=mobile

Each entry in failingAudits has id, title, category, score, displayValue, savingsMs and savingsBytes, so you can sort pages by what to fix first.

How to use PageSpeed Insights Checker

  1. Open the Actor in the Apify Console and go to the Input tab.
  2. Paste your pages into Page URLs, one per line. Full URLs and bare domains such as example.org both work. Or put a sitemap.xml URL into Sitemap URLs to audit the pages it lists.
  3. Choose Strategies: mobile, desktop or both. Each page gives one result per strategy.
  4. Set Maximum results to cap how many reports you get (and pay for).
  5. Click Start. Each analysis takes 10 to 100 seconds on Google's side; up to 3 run at the same time by default.
  6. When the run finishes, open the Output tab, or export the dataset as JSON, CSV, Excel, XML or HTML.

A few things to know. maxItems counts reports, not pages. Ten pages with both strategies make up to 20 results. A page Google can't reach (a dead domain, a page that isn't HTML) is logged and skipped. It produces no result and no charge.

Real-user (CrUX) data exists only for pages and sites with enough Chrome traffic. Small sites often get null field metrics; the lab metrics and scores are still there. Lighthouse scores move a few points between runs because of network and CPU noise. For trends, schedule the Actor and compare over several runs.

Input

FieldTypeRequiredDescription
urlsarray of stringsYes, unless sitemapUrls is givenPages to audit. Full URLs or bare domains (https:// is added).
sitemapUrlsarray of stringsNositemap.xml or sitemap-index URLs; their pages are added to the list. Indexes are followed up to 2 levels deep.
strategiesarray of mobile / desktopNoDevice profiles to run. Default ["mobile"].
maxItemsintegerNoMaximum number of reports, 1-10000, default 50.
maxFailingAuditsintegerNoFailing audits kept per report, 0-50, default 10.
includeFieldDatabooleanNoAdd real-user CrUX p75 metrics when Google has them. Default true.
maxConcurrencyintegerNoAnalyses running at the same time, 1-5, default 3.
apiKeystring (secret)NoYour own PageSpeed Insights API key; switches to the official API.
proxyConfigurationobjectNoProxy settings. Default: Apify Proxy (datacenter).
{
"urls": ["https://www.wikipedia.org/", "https://www.w3.org/", "example.org"],
"sitemapUrls": ["https://blog.apify.com/sitemap.xml"],
"strategies": ["mobile", "desktop"],
"maxItems": 20,
"maxFailingAudits": 10,
"includeFieldData": true,
"maxConcurrency": 3,
"proxyConfiguration": { "useApifyProxy": true }
}

Output

Real items from a local run (some failingAudits entries trimmed for length):

[
{
"url": "https://example.org/",
"finalUrl": "https://example.org/",
"strategy": "mobile",
"fetchTime": "2026-10-19T00:20:49.213Z",
"lighthouseVersion": "13.5.0",
"performanceScore": 100,
"accessibilityScore": 96,
"bestPracticesScore": 100,
"seoScore": 80,
"firstContentfulPaintMs": 756,
"largestContentfulPaintMs": 812.5,
"totalBlockingTimeMs": 3.5,
"cumulativeLayoutShift": 0,
"speedIndexMs": 756,
"serverResponseTimeMs": 1,
"totalByteWeight": 2383,
"largestContentfulPaintDisplay": "0.8 s",
"fieldDataScope": "url",
"fieldLcpP75Ms": 854,
"fieldInpP75Ms": 71,
"fieldClsP75": 0,
"fieldFcpP75Ms": 755,
"fieldTtfbP75Ms": 523,
"failingAudits": [
{
"id": "landmark-one-main",
"title": "Document does not have a main landmark.",
"category": "accessibility",
"score": 0,
"displayValue": null,
"savingsMs": null,
"savingsBytes": null
},
{
"id": "link-text",
"title": "Links do not have descriptive text",
"category": "seo",
"score": 0,
"displayValue": "1 link found",
"savingsMs": null,
"savingsBytes": null
}
],
"runWarnings": [],
"id": "mobile:https://example.org/",
"sourceUrl": "https://pagespeed.web.dev/analysis/https-example-org/75gzwciw0m?form_factor=mobile"
},
{
"url": "https://www.wikipedia.org/",
"finalUrl": "https://www.wikipedia.org/",
"strategy": "mobile",
"fetchTime": "2026-10-19T00:20:48.892Z",
"lighthouseVersion": "13.5.0",
"performanceScore": 100,
"accessibilityScore": 94,
"bestPracticesScore": 100,
"seoScore": 100,
"firstContentfulPaintMs": 1113,
"largestContentfulPaintMs": 1389,
"totalBlockingTimeMs": 0,
"cumulativeLayoutShift": 0.0009547550044766787,
"speedIndexMs": 2178.0568614394815,
"serverResponseTimeMs": 110,
"totalByteWeight": 101094,
"largestContentfulPaintDisplay": "1.4 s",
"fieldDataScope": "url",
"fieldLcpP75Ms": 1279,
"fieldInpP75Ms": 99,
"fieldClsP75": 0,
"fieldFcpP75Ms": 1156,
"fieldTtfbP75Ms": 535,
"failingAudits": [
{
"id": "cache-insight",
"title": "Use efficient cache lifetimes",
"category": "performance",
"score": 0,
"displayValue": "Est savings of 27 KiB",
"savingsMs": 250,
"savingsBytes": null
},
{
"id": "image-delivery-insight",
"title": "Improve image delivery",
"category": "performance",
"score": 0,
"displayValue": "Est savings of 35 KiB",
"savingsMs": 100,
"savingsBytes": null
}
],
"runWarnings": [],
"id": "mobile:https://www.wikipedia.org/",
"sourceUrl": "https://pagespeed.web.dev/analysis/https-www-wikipedia-org/w9n8erjr94?form_factor=mobile"
}
]

The overview table in the Console shows the URL, strategy, the four scores, LCP, TBT, CLS, field LCP and INP, and the report link. Open sourceUrl to see the same report on pagespeed.web.dev with screenshots and full details.

How much does it cost to check PageSpeed Insights?

PageSpeed Insights Checker is charged per result, and one result is one report (one page on one strategy). You pay only for reports returned: pages Google can't analyse cost nothing, and maxItems caps the total. See the Pricing tab for the current price.

Apify platform usage (compute and proxy) is included. If you set a maximum cost per run, the Actor stops cleanly when it is reached and tells you so in the status message.

Use with AI agents (MCP)

Connect PageSpeed Insights Checker to Claude, Cursor or any MCP client through the Apify MCP server:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=axiomworks/pagespeed-insights-checker"
}
}
}

Example prompts:

  1. "Check the mobile PageSpeed score and Core Web Vitals for https://www.python.org/ and https://www.w3.org/ and tell me which one has the worse LCP."
  2. "Audit the first 20 pages of https://blog.apify.com/sitemap.xml on mobile and list the five slowest by largestContentfulPaintMs, with the top failing audit for each."
  3. "Compare mobile and desktop performance scores for example.org and explain the gap using the failing audits."

Agents get structured JSON back, so they can sort, compare and summarise without reading report pages.

Integrations and API

Run PageSpeed Insights Checker from your own code with the Apify API. Set APIFY_TOKEN to your Apify API token (send it in the Authorization header, never in the URL).

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("axiomworks/pagespeed-insights-checker").call(run_input={
"urls": ["https://www.wikipedia.org/", "https://www.w3.org/"],
"strategies": ["mobile", "desktop"],
"maxItems": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["url"], item["strategy"], item["performanceScore"], item["largestContentfulPaintMs"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('axiomworks/pagespeed-insights-checker').call({
urls: ['https://www.wikipedia.org/', 'https://www.w3.org/'],
strategies: ['mobile'],
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

cURL

curl -X POST "https://api.apify.com/v2/acts/axiomworks~pagespeed-insights-checker/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://www.wikipedia.org/"], "strategies": ["mobile"], "maxItems": 10}'

On the Integrations tab you can connect runs to Make, Zapier, n8n, Google Sheets, Slack or a webhook, for example to post a weekly table of scores to a sheet. Use Schedules to run the same audit every day or week and track Core Web Vitals over time.

FAQ

Do I need a Google API key? No. By default the Actor uses the backend of the public pagespeed.web.dev website, which needs no key. Google's keyless API shares one daily quota across everyone and is often exhausted, which is why the Actor doesn't rely on it. If you have your own key, put it in apiKey and the Actor calls the official API with it; if Google rejects the key, the run falls back to the default source.

Why are the field metrics null for some pages? Field data comes from the Chrome UX Report, which only covers pages and sites with enough real Chrome visitors. When Google has data for the exact page, fieldDataScope is url; when it only has data for the whole site, it is origin; when it has none, the field metrics are null.

Why do my scores differ a little from the last run? Lighthouse runs a real browser with simulated throttling, so network and CPU noise move scores by a few points. Field (CrUX) values are a 28-day rolling window and change slowly.

How long does a run take? Each analysis takes 10 to 100 seconds on Google's side. With the default 3 parallel analyses, 50 pages usually take a few minutes. You can raise maxConcurrency to 5.

Why did a URL return nothing? Google could not load it: the domain doesn't resolve, the page isn't HTML (an image or PDF), or the site blocked Lighthouse. The log names each skipped URL and the reason. Skipped URLs are not charged.

Can I audit a whole site? Yes. Put its sitemap URL into sitemapUrls. Sitemap indexes are followed up to two levels deep, and collecting stops once there are maxItems pages. Gzipped sitemaps (.xml.gz) are not supported; use the uncompressed one.

What does savingsMs mean in failingAudits? It is Lighthouse's estimate of how many milliseconds fixing that audit would save on LCP, FCP or TBT (the largest of the three). savingsBytes is the estimated bytes saved. Audits without an estimate, such as most accessibility checks, have null savings and come after the ones with savings.

The Actor requests public PageSpeed Insights reports, the same ones anyone can open on the pagespeed.web.dev website without logging in. It does not visit or crawl the audited pages itself, apart from reading the sitemaps you give it. You are responsible for how you use the results and for having the right to audit the URLs you submit.

PageSpeed Insights Checker is an independent tool. It is not affiliated with, endorsed by or sponsored by Google or PageSpeed Insights.

ActorWhat it does
Sitemap URL ExtractorLists every page URL in a sitemap, to pick which pages to audit.
Link Status CheckerChecks which links on a site are broken.
Semrush SEO Metrics ScraperSEO traffic and keyword metrics for a domain.
Google Search SERP ScraperGoogle search results for keywords, to see who ranks.

Feedback

Found a bug or need a field that isn't here? Open an issue on the Issues tab and we'll look at it.