Bulk Lighthouse Audit: PageSpeed Scores & Core Web Vitals avatar

Bulk Lighthouse Audit: PageSpeed Scores & Core Web Vitals

Pricing

from $25.00 / 1,000 page audits

Go to Apify Store
Bulk Lighthouse Audit: PageSpeed Scores & Core Web Vitals

Bulk Lighthouse Audit: PageSpeed Scores & Core Web Vitals

Run Google Lighthouse on a list of URLs: performance, accessibility, best practices and SEO scores, Core Web Vitals (LCP, CLS, TBT, FCP) and the failing audits for each page, mobile or desktop. No Google API key needed. Failed pages are free.

Pricing

from $25.00 / 1,000 page audits

Rating

0.0

(0)

Developer

Catalin Friptu

Catalin Friptu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Run Google Lighthouse on a whole list of URLs and get one clean row per page: performance, accessibility, best practices and SEO scores, the Core Web Vitals lab metrics (LCP, CLS, TBT, FCP, Speed Index) and the list of failing audits that explain the score. Mobile, desktop or both.

  • No Google API key, no quota. Every page is audited by Lighthouse 13 in a fresh headless Chrome inside the Actor, the same engine that powers PageSpeed Insights and Chrome DevTools.
  • $25 per 1,000 audits ($0.025 per page), and failed pages are free. A page that is down, returns 404 or never paints costs nothing; you still get a row with the reason.
  • What to fix, not just a number. Each row lists the failing audits (score below 90) per category, worst first: unused JavaScript, render-blocking requests, missing alt text, colour contrast, missing meta description...
  • Optional full HTML report per page, the same report you see in Chrome DevTools, saved in the run's key-value store and linked from the row.
  • Paste a list of domains (acme.com) or full URLs (https://acme.com/pricing); duplicates are removed.

Who it's for

  • SEO and web agencies auditing every client site, or a prospect list, in one run and exporting the scores to a spreadsheet or a report.
  • Developers and site owners tracking Core Web Vitals across all important pages after each release (schedule the Actor daily or weekly).
  • Lead generation: find businesses with slow or broken websites, then pitch them a fix.
  • AI agents and automations (MCP, Make, Zapier, n8n) that need page-quality scores through one API call.

Input

FieldDefaultDescription
startUrlsPages to audit: full URLs or plain domains (audited over https://).
strategymobilemobile (PageSpeed Insights default: emulated phone, slow 4G, 4x CPU slowdown), desktop, or both (two audits per URL).
categoriesall fourAny of performance, accessibility, best-practices, seo.
saveHtmlReportfalseAlso save Lighthouse's HTML report for each page (0.5-1 MB each) and link it in report_url.
maxWaitForLoadSecs45How long Lighthouse waits for a page to finish loading.
{
"startUrls": ["acme-dental.com", "https://www.example-bakery.co.uk/menu"],
"strategy": "both",
"categories": ["performance", "seo"],
"saveHtmlReport": true
}

Output

One row per URL and device.

FieldDescription
url, strategy, final_urlThe page you gave, mobile or desktop, and the URL after redirects.
performance, accessibility, best_practices, seoLighthouse scores, 0-100 (null for categories you didn't ask for).
lcp_ms, cls, tbt_ms, fcp_ms, speed_index_ms, tti_msLargest Contentful Paint, Cumulative Layout Shift, Total Blocking Time, First Contentful Paint, Speed Index, Time to Interactive.
server_response_ms, total_byte_weightTime to first byte of the HTML document, and the total page weight in bytes.
issues, issue_countFailing audits (category, id, title, score, display_value), worst first; up to 25 in issues, the full count in issue_count.
report_urlLink to the full HTML report when saveHtmlReport is on.
lighthouse_version, run_warnings, audited_atLighthouse version, its warnings for this page, UTC timestamp.
errorWhy a page could not be audited (ERRORED_DOCUMENT_REQUEST: Status code: 404, NO_FCP, DNS errors...). These rows are free.

Example row from a real run (issues shortened to 2):

{
"url": "https://www.python.org/",
"strategy": "mobile",
"final_url": "https://www.python.org/",
"performance": 82,
"accessibility": 75,
"best_practices": 100,
"seo": 92,
"fcp_ms": 2585,
"lcp_ms": 4307,
"tbt_ms": 0,
"cls": 0.003,
"speed_index_ms": 2585,
"tti_ms": 4307,
"server_response_ms": 3,
"total_byte_weight": 515809,
"issues": [
{"category": "accessibility", "id": "aria-required-children", "title": "Elements with an ARIA `[role]` that require children to contain a specific `[role]` are missing some or all of those required children.", "score": 0, "display_value": null},
{"category": "accessibility", "id": "aria-hidden-focus", "title": "`[aria-hidden=\"true\"]` elements contain focusable descendents", "score": 0, "display_value": null}
],
"issue_count": 19,
"report_url": null,
"lighthouse_version": "13.5.0",
"run_warnings": [],
"audited_at": "2026-10-24T03:42:57.765Z",
"error": null
}

The dataset has three views: Scores, Core Web Vitals and metrics and All fields. Export to CSV, Excel or JSON, send it to Google Sheets through an Apify integration, or read it from the API:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("malmurk/bulk-lighthouse-audit").call(run_input={
"startUrls": ["acme-dental.com", "example-bakery.co.uk"],
"strategy": "mobile",
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["url"], row["performance"], row["seo"], row["lcp_ms"], row["error"])

Pricing

Pay per event:

EventPriceCharged for
audit$25 per 1,000 audits ($0.025 each)One page audited on one device with at least one score.
Actor start$0.00005 per GB of memoryOnce per run.
  • Failed audits (page down, 404, DNS error, page never paints) are free.
  • strategy: both is two audits per URL.
  • The run stops cleanly at the maximum charge you set for it.

200 pages on mobile only = $5. 500 pages on mobile and desktop = 1,000 audits = $25.

FAQ

Why do my scores differ from PageSpeed Insights? Lighthouse lab scores always vary from run to run and machine to machine; Google's own docs say to expect a few points of difference on every run. This Actor uses the same Lighthouse version and the same mobile/desktop settings as PageSpeed Insights, but runs on Apify's servers, not Google's. Compare pages within one run (or across runs of this Actor) rather than against a score taken elsewhere. PageSpeed Insights also shows field data from real Chrome users (CrUX); this Actor reports lab data only.

How long does it take? About 10 seconds for a light page and 30-60 seconds for a heavy one (big JavaScript bundles, many third-party scripts); a few very heavy pages take up to 2 minutes. Pages are audited one at a time on purpose: running several audits in parallel on the same CPU makes the performance scores unreliable. 100 pages take roughly 20-60 minutes; for thousands of pages, split the list into several runs and start them in parallel.

Does it use proxies or bypass bot protection? No. A site that blocks headless Chrome or shows a CAPTCHA gets audited as served (often a low score) or gets an error row, which is free.

Why is the memory fixed at 4 GB? Chrome plus Lighthouse needs it: with less memory the CPU share is too small and heavy pages time out or never paint. You pay per audit, not for memory, so there is nothing to tune.

Can it audit pages behind a login? No. Only publicly reachable pages.

Can I schedule it? Yes: save the input as an Apify task and add a schedule (daily, weekly) to track your Core Web Vitals over time.

Limitations

  • Lab data only (no CrUX field data).
  • One page at a time, so very large lists take hours.
  • Each audit has a hard limit of 150 seconds; a page that never finishes loading in that time gets an error row (free).

Local development

npm install
npm test # unit tests + a real Lighthouse audit of a local page (needs Chrome installed)

Built on Lighthouse (Apache-2.0) and chrome-launcher (Apache-2.0).