Batch PageSpeed & Core Web Vitals — Mobile+Desktop+CrUX avatar

Batch PageSpeed & Core Web Vitals — Mobile+Desktop+CrUX

Pricing

from $3.00 / 1,000 pagespeed reports

Go to Apify Store
Batch PageSpeed & Core Web Vitals — Mobile+Desktop+CrUX

Batch PageSpeed & Core Web Vitals — Mobile+Desktop+CrUX

Batch Google PageSpeed Insights via the official PSI API: mobile + desktop Lighthouse scores, LCP/CLS/TBT/FCP lab metrics and CrUX field data (LCP/CLS/INP p75). Markdown + CSV report. URL list, sitemap or dataset input. Bring your own free Google API key. Failed URLs free. 256 MB.

Pricing

from $3.00 / 1,000 pagespeed reports

Rating

0.0

(0)

Developer

新世紀書僮

新世紀書僮

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Share

Batch PageSpeed & Core Web Vitals — PSI API (Mobile + Desktop + CrUX)

Run Google PageSpeed Insights for a list of URLs, a sitemap, or another Actor's dataset — mobile and desktop in one run — and get:

  • Lighthouse scores (performance; optionally accessibility, best practices, SEO)
  • Lab Core Web Vitals: LCP, CLS, TBT, plus FCP, Speed Index, TTI, server response time (TTFB)
  • CrUX field data (real-user 28-day p75: LCP, CLS, INP, FCP, TTFB + good / needs-improvement / poor) whenever Google returns it, for the URL and for the origin
  • Top Lighthouse opportunities by estimated savings
  • A Markdown report (REPORT.md) and a CSV (REPORT.csv) in the run's key-value store, plus one dataset row per URL × strategy

It calls the official PageSpeed Insights v5 HTTP API only. No local Chrome, no Lighthouse binary, so the default memory is 256 MB.

Bring your own Google API key (important)

Google's PSI API needs an API key for any real volume. Without a key, Google's shared keyless quota usually answers HTTP 429 – Quota exceeded … Queries per day. When that happens the Actor:

  • marks the URL × strategy row as status: failed, errorClass: quota_exceeded, with a clear hint,
  • does not charge for it,
  • stops making further calls for the rest of the run (stopOnDailyQuota, on by default), so you are not billed for a run that can't succeed.

Getting a key is free and takes a couple of minutes:

  1. Open Google Cloud Console → APIs & Services → Library → enable PageSpeed Insights API.
  2. APIs & Services → Credentials → Create credentials → API key. Optionally restrict the key to the PageSpeed Insights API.
  3. Paste it into the googlePagespeedApiKey input field. It is stored as an encrypted secret input, sent to Google in a request header (never in the URL), and never written to logs or output.

This Actor has no wallet, top-up or identity-verification step. The only things you supply are URLs and, optionally, your own Google key.

Input

FieldTypeDefaultNotes
urlsarray—{ "url": "…" } objects, plain strings, or requestsFromUrl remote lists
sitemapUrlstring—sitemap.xml / sitemap index (.gz ok) / text list; capped by maxUrls
datasetIdstring—Dataset from Sitemap URL Discovery or URL Status Checker (reads url; skips rows with httpStatus >= 400)
keyValueStoreId / keyValueRecordKeystringDOC_TO_MARKDOWN_INPUTLoad URLs from a KV record
googlePagespeedApiKeysecret string—Recommended. Your Google API key
strategiesarray["mobile","desktop"]Each strategy = one PSI call and one report per URL
categoriesarray["performance"]Add accessibility, best-practices, seo at the same price
localestring—e.g. en, de, ja
maxUrlsinteger1000 = no limit
maxConcurrencyinteger21–5; PSI calls take 10–30 s each
maxRetriesinteger3Retries per-minute 429, 5xx and timeouts with backoff
requestTimeoutSecsinteger120Per PSI call
stopOnDailyQuotabooleantrueSkip remaining calls (free) once Google reports the daily quota is exhausted
topOpportunitiesinteger5Opportunities kept per row
includeFailedInCsvbooleantrueInclude failed rows in REPORT.csv

Example:

{
"urls": [{ "url": "https://example.com/" }],
"strategies": ["mobile", "desktop"],
"googlePagespeedApiKey": "YOUR_KEY"
}

Output

Dataset (one row per URL × strategy), main fields:

url, strategy, status, finalUrl, performanceScore, accessibilityScore, bestPracticesScore, seoScore, labLcpMs, labCls, labTbtMs, labFcpMs, labSpeedIndexMs, labTtiMs, labTtfbMs, cruxAvailable, cruxIsOriginFallback, cruxOverallCategory, cruxLcpP75, cruxLcpCategory, cruxClsP75, cruxClsCategory, cruxInpP75, cruxInpCategory, cruxFcpP75, cruxTtfbP75, cruxOrigin…, topOpportunities, lighthouseVersion, fetchTime, httpStatus, attempts, durationMs, errorClass, errorMessage

Key-value store: REPORT.md (lab table, CrUX table, opportunities, failed rows), REPORT.csv, SUMMARY / OUTPUT (counts, error classes, whether a key was used, what was charged).

errorClass values: quota_exceeded, skipped_quota, api_key_invalid, api_forbidden, lighthouse_error, bad_request, psi_server_error, timeout, network.

CrUX notes: CLS p75 is converted to the usual unitless value (Google's API returns it ×100). Low-traffic pages often have no URL-level field data. In that case PSI may fall back to origin data (cruxIsOriginFallback: true), or there may be none at all.

Pricing (pay per event)

EventPriceWhen
Actor start$0.001once per run (Apify synthetic event)
pagespeed-report$0.003per successful URL × strategy report

One URL with mobile + desktop is 2 reports, $0.006. Failed calls are free, including 429 quota, invalid key, timeouts and Lighthouse page-load errors. Your Google API usage is billed by Google under your own key's terms; PSI is normally free within Google's quota.

Chaining

  • Sitemap URL Discovery → pass its dataset id as datasetId to audit a whole site section.
  • URL Status Checker → pass its dataset id; broken URLs (httpStatus >= 400) are skipped automatically.

Limits & notes

  • Lab metrics vary from run to run (network, Google's test location). Compare trends, not single runs.
  • PSI can't test pages behind login, on localhost, or ones that block Google's Lighthouse user agent. Those come back as lighthouse_error, free.
  • Results are computed by Google's servers and returned as-is. INP exists only as field data (CrUX); lab responsiveness shows up as TBT.

License

AGPL-3.0. See LICENSE.