Bulk PageSpeed & Website Health Audit: Lighthouse, Web Vitals avatar

Bulk PageSpeed & Website Health Audit: Lighthouse, Web Vitals

Pricing

from $27.00 / 1,000 page speed test (lighthouse)s

Go to Apify Store
Bulk PageSpeed & Website Health Audit: Lighthouse, Web Vitals

Bulk PageSpeed & Website Health Audit: Lighthouse, Web Vitals

Test hundreds of websites with Google Lighthouse: performance, SEO, accessibility scores, Core Web Vitals and top fixes, plus a health check (HTTPS, SSL expiry, mobile-ready, title, platform, copyright year) and a ready-to-pitch problem summary per site. No API key needed.

Pricing

from $27.00 / 1,000 page speed test (lighthouse)s

Rating

0.0

(0)

Developer

Southern Data

Southern Data

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

15 hours ago

Last modified

Security

Limited permissions

Share

Give it a list of websites (or a lead list from another Actor). For each one it runs a real Google Lighthouse test in Chrome and a quick website health check, and returns one spreadsheet-ready row: performance / accessibility / best-practices / SEO scores, Core Web Vitals (LCP, CLS, TBT, FCP, Speed Index), page weight, the top fixes Lighthouse suggests, HTTPS and certificate expiry, mobile viewport, title / meta description / H1, noindex, platform (WordPress, Wix, Squarespace, Shopify…), copyright year, analytics, plus a plain-English problem list and pitch summary you can paste into an outreach email.

Built for web-design, SEO and marketing agencies prospecting local businesses, and for anyone who needs to check many sites at once.

Read this first: limits

  • Lab test, not Google's own servers. Without an API key the test runs Lighthouse 13 in Chrome on Apify's machines with Google's default mobile throttling. Scores are in the same family as pagespeed.web.dev but not identical. Lighthouse scores also change a little run to run: in our cloud tests the same page usually came back within ±3 points (15 of 21 repeated sites), but a few varied by up to 24 points. Use the scores to sort and spot slow sites, not as exact numbers.
  • We could not compare against PageSpeed Insights. Google's keyless PSI API answered "429 quota exceeded" every time we tried (1 Nov 2026), so there is no accuracy figure against PSI. If you need the exact pagespeed.web.dev numbers and real-visitor data, add your own free Google API key (see below). The own-key path is checked with bad and invalid keys, but we have not tested it with a real key yet.
  • Memory matters. Apify gives 1 CPU core per 4 GB. Lighthouse on 1 core reads blocking time 2–5× higher, so the default is 8192 MB (2 cores, one test at a time). Runs below 8 GB still work (min 2048 MB for speed tests) but each row says the numbers read high. health-only runs at 512 MB.
  • Very heavy sites can time out. Each test has a 150-second hard limit. A test that times out, fails or is blocked is free and the row says why.
  • No bypassing. Sites behind bot protection (Cloudflare challenge, 403) may refuse the test browser or the health check. We don't bypass bot checks, logins or cookie walls. When the health fetch is refused but the browser loads the page, the scores are given and the health columns are left blank, with a note.
  • Homepage only unless you give a full page link. One page = one test per device.
  • Real-visitor Core Web Vitals (field data) come only with your own Google API key.

Pricing

EventPriceWhen
page-speed-tested$0.03One page tested on one device with Lighthouse (includes the health check)
page-speed-tested-own-key$0.005One page tested on one device via PageSpeed Insights with your own Google API key
site-health-checked$0.0015One page in health-only mode

Store discount tiers: free-plan and Bronze users pay the prices above. Silver gets 5% off and Gold (and higher) gets 10% off.

100 websites, mobile only, cost at most $3.00. "Both" devices = 2 tests per page. Free: failed, timed-out, blocked, dead, parked and broken-certificate sites (speed mode), invalid input (Facebook / Instagram links, typos), duplicates, anything not processed, bad-input runs and the self-test. Set Maximum cost per run and the Actor stops cleanly there; untested sites go to the REMAINING record and are listed as not_processed (free).

Quick start

  1. Click Try for free.
  2. Paste websites, one per line (acmeplumbing.com.au, https://acme.com/services, or an email like info@acme.com.au), or a link to a CSV / TXT file or Google Sheet ("Anyone with the link can view") in websitesFileUrl, or pick a dataset from another run in datasetId, e.g. Local Business Leads from OpenStreetMap or Website Contact Finder. Name, phone and email columns are carried through to the output.
  3. Click Start. Open the Output tab: Overview, Speed & Core Web Vitals, Website health, Leads to pitch, Not tested / failed or All fields (CSV export). Download as CSV, Excel or JSON.

Via API:

curl -X POST "https://api.apify.com/v2/acts/southern-data~website-speed-audit/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"websites":["goodthingscafe.com.au","example.com"],"devices":"mobile"}'

Speed tests take about 20–40 s per page on the default 8 GB, one at a time: 100 pages ≈ 45–60 minutes. health-only checks 10 pages at a time from 1024 MB (3 at a time below that); 22 sites took 27 s at 512 MB.

Example row

A real row (input goodthingscafe.com.au, 1 Nov 2026), trimmed:

{
"domain": "goodthingscafe.com.au", "siteStatus": "ok", "platform": "Squarespace",
"pitchSummary": "Slow on mobile: Google Lighthouse speed score 39/100 (poor). Main content takes 12.8 s to appear on mobile (Google's target: 2.5 s or less). Heavy JavaScript blocks the page for 782 ms while loading (total blocking time; target 200 ms or less).",
"issueCount": 5,
"mobilePerformance": 39, "mobileAccessibility": 94, "mobileBestPractices": 73, "mobileSeo": 85,
"mobileLcpSec": 12.8, "mobileLcpRating": "poor", "mobileCls": 0.003, "mobileTbtMs": 782,
"mobilePageWeightKb": 2247, "mobileRequests": 84,
"mobileTopFixes": "Reduce unused JavaScript (Est savings of 572 KiB); Render-blocking requests (Est savings of 5,820 ms); …",
"httpsOk": true, "sslDaysLeft": 77, "httpRedirectsToHttps": true, "mobileViewport": true,
"pageTitle": "Good Things", "metaDescriptionLength": 0, "h1Count": 0, "analytics": "Meta Pixel",
"engine": "lighthouse", "lighthouseVersion": "13.6.0",
"notes": "No copyright year in the page HTML; Real-visitor Core Web Vitals (field data) need your own Google API key; lab scores only",
"chargedEvents": "page-speed-tested x1"
}

Input

FieldMeaning
websitesDomains, page links or email addresses. Duplicates are merged.
websitesFileUrlPublic CSV / TXT / Google Sheet. Uses the website / url / domain column; name / phone / email columns are carried over.
datasetIdA dataset from another Apify run (pick it in the dataset picker). Rows without a website are skipped, free.
modefull (Lighthouse + health check, default) or health-only (no browser, about 17× cheaper).
devicesmobile (default), desktop or both (2 tests per page).
googleApiKeyOptional, secret. Your own PageSpeed Insights key: Google's exact numbers plus real-visitor data, $0.005 per test.
maxWebsitesTest only the first N pages (cheap trial).
selfTestRun the built-in checks instead (no rows, no charge; the run fails if anything is broken).

What each field means

FieldMeaning
rowStatuschecked, invalid_input or not_processed (spend cap, time limit or maxWebsites)
siteStatusok, dead (domain doesn't resolve), unreachable, http_error, tls_error (broken / expired certificate), parked, blocked (bot check), not_html
issues, issueCount, pitchSummaryPlain-English problems sorted by importance; the summary is the top 3
mobile… / desktop…Status (tested / failed / skipped / not_requested), the 4 Lighthouse scores (0–100), LcpSec, Cls, TbtMs, FcpSec, SpeedIndexSec with good / needs-improvement / poor ratings, PageWeightKb, Requests, TopFixes, SeoIssues, AccessibilityIssues, Error (why a test failed)
field…Real-visitor Core Web Vitals from Chrome UX Report (own API key only)
httpsOk, sslDaysLeft, sslIssuer, httpRedirectsToHttpsHTTPS and certificate health
mobileViewport, pageTitle, titleLength, metaDescriptionLength, h1Count, noindex, structuredData, openGraph, faviconOn-page basics from the homepage HTML
platform, copyrightYear, analytics, serverResponseMs, htmlKb, languageSite build details. An old copyright year often means a neglected site
businessName, businessPhone, businessEmailCarried over from your file or dataset
engine, lighthouseVersion, cpuBenchmark, testedAtHow and when it was measured
notes, reasonWhy anything is blank or unusual
chargedEventsWhat this row cost

Blank always means "not measured", and notes / …Error / reason say why.

Tested (1 Nov 2026)

  • 34 cloud runs on the final builds (1.0.6–1.0.11): 33 succeeded; 1 ran out of memory in health-only at 256 MB, so the minimum is now 512 MB. 13 of 13 runs since that fix succeeded.
  • 94 Lighthouse tests at 8 GB on 33 real sites (small-business WordPress / Squarespace / Wix / Shopify sites, a council page, big brands, heavy JS): 94 of 94 tested, 0 timeouts. Dead, broken-certificate and error pages were skipped free (15). In a separate 4 GB run one site blocked the test browser (free, reported).
  • 223 output rows were checked against the dataset schema with 0 errors. Bad input (empty, wrong key, 404 file, unknown dataset, too little memory) always ended cleanly with a message and $0 charged.

Pairs with

Local Business Leads from OpenStreetMap → this Actor (find the slow, broken or outdated sites) → Website Contact Finder (get the email to pitch).

Responsible use

Each site gets a single homepage load per device plus one quick health fetch. Follow anti-spam law (Spam Act 2003 in Australia, CAN-SPAM, GDPR) when contacting businesses.