Dev.to WebDev πŸ›  Dev πŸ‘ 0 πŸ“– 2 min read

Core Web Vitals for 500 URLs in one run, with the fixes ranked by time saved (no API key, $3 per 1,000)

pagespeed.web.dev is great for one page. For a client's top 200 pages, or every product page before a release, you end up pasting URLs one at a time and copying scores into a sheet. This guide runs Google's own PageSpee

pagespeed.web.dev is great for one page. For a client's top 200 pages, or every product page before a release, you end up pasting URLs one at a time and copying scores into a sheet.

This guide runs Google's own PageSpeed Insights engine on a whole list of URLs and returns one row per page. Each row has the four Lighthouse scores, the real-user Core Web Vitals (the same pass/fail verdict Search Console shows), and the top fixes ranked by milliseconds saved.

No Google account, API key or quota to manage.

Input

Open PageSpeed Insights Bulk Audit and paste your URLs:

{
  "urls": [
    "https://www.example.com/",
    "https://www.example.com/pricing",
    "https://www.example.com/blog/"
  ],
  "strategy": "mobile"
}

Mobile is what Google ranks on. Choose both to get a mobile and a desktop row for every page.

Output

One row per page and device. From a real run on cnn.com (mobile, 15 Nov 2026):

{
  "url": "https://www.cnn.com/",
  "strategy": "mobile",
  "status": "ok",
  "performanceScore": 19,
  "seoScore": 92,
  "accessibilityScore": 93,
  "bestPracticesScore": 54,
  "passesCoreWebVitals": true,
  "coreWebVitalsPage": {
    "overall": "FAST",
    "lcpMs": {
      "p75": 1485,
      "rating": "FAST"
    },
    "inpMs": {
      "p75": 160,
      "rating": "FAST"
    },
    "cls": {
      "p75": 0.04,
      "rating": "FAST"
    },
    "fcpMs": {
      "p75": 1051,
      "rating": "FAST"
    },
    "ttfbMs": {
      "p75": 256,
      "rating": "FAST"
    }
  },
  "lab": {
    "lcpMs": 6903,
    "fcpMs": 6903,
    "tbtMs": 2084,
    "speedIndexMs": 17806,
    "cls": 0.197,
    "ttfbMs": 110
  },
  "opportunities": [
    {
      "id": "unused-javascript",
      "title": "Reduce unused JavaScript",
      "savingsMs": 1360,
      "savingsBytes": 2487351
    }
  ],
  "failedSeoChecks": [
    "robots.txt is not valid"
  ]
}

Note the split: a performance score of 19 in the lab, while real Chrome users get a fast page and it passes Core Web Vitals. The lab simulates a slow phone on a throttled network; the field data is what visitors actually experienced. That's why the bulk report gives you both.

What to look at first:

  • passesCoreWebVitals: Google's own pass/fail from real Chrome users over the last 28 days. It's the number that affects ranking; the lab score doesn't.
  • coreWebVitalsPage vs coreWebVitalsOrigin: small pages often have no field data of their own (null), so the origin's numbers are the fallback Google uses too.
  • opportunities: already sorted by time saved. Fixing the first one or two usually moves the score more than everything else combined.

Sorting a big list

Export as CSV and sort by performanceScore, or filter passesCoreWebVitals = false. Then group the opportunities[0].title column. On most sites, a handful of fixes (one script, one hero image, one font) cover most failing pages.

Before and after a release

Save the list as a task and run it on a schedule (Apify β†’ Schedules). Each run keeps its own dataset, so you can compare scores per URL from one deploy to the next.

Run it from code

curl -X POST "https://api.apify.com/v2/acts/spellzcode~pagespeed-insights-bulk-audit/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"urls":["https://www.example.com/"],"strategy":"mobile"}'

Cost

$0.003 per audit, so $3 per 1,000. Pages Google can't load are reported with Google's message and cost nothing. Apify's free monthly credit covers about 1,700 audits.

Limits

  • Field data exists only for pages and origins with enough Chrome traffic. A null there is Google's answer, not an error.
  • Lab scores move a few points between runs, exactly as on pagespeed.web.dev.
  • Only public pages: anything behind a login comes back failed, free.

Related: Website SEO Audit checks titles, descriptions, headings and canonical tags on every page of a site, with a 0 to 100 score per page.

πŸ“° Read the original article on Dev.to WebDev

Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes β€” full credit and traffic to the original publisher.