The problem
Checking how a page performs on Google PageSpeed Insights means pasting one URL at a time into a web form, waiting for the audit, and copying numbers out of the report. For one page that is fine. For an agency auditing a client portfolio, or a team comparing a representative set of pages around a release — homepage, content, product — the manual loop is slow and the results land in a spreadsheet with no measurement context attached.
The programmatic route is not much lighter. The PageSpeed Insights API requires a Google API key, returns the full Lighthouse JSON — megabytes of audits, traces and screenshots you did not ask for — and leaves you to write the parsing, validation and comparison logic yourself. Paid audit dashboards solve this with a monthly subscription, which is a heavy commitment for what is ultimately "run the same audit for these URLs and give me comparable numbers."
What the actor does
The Google PageSpeed Insights Bulk Website Auditor calls the PageSpeed Insights v5 runPagespeed API for a list of public URLs. Google performs the remote Lighthouse audit; the actor validates the returned report and projects a compact structured summary — not the full Lighthouse JSON, traces, screenshots or HTML. No buyer API key is required or accepted: service access belongs to the operator and is supplied through a secret environment variable.
Each unique URL × device strategy produces one report row containing:
- the native Lighthouse
performanceScoreon a zero-to-one scale (zero preserved as a valid score); - five lab metrics — LCP, TBT, FCP and Speed Index in milliseconds, plus unitless CLS;
-
fetchTimeandlighthouseVersion, so comparisons keep their measurement context; - up to five source-reported
topOpportunitieswith estimated savings, sorted by largest millisecond saving; -
categoryScoresfor any additional requested categories (accessibility, best-practices, SEO), with performance always included because the report contract requires its metrics.
The input contract is deliberately small: urls (1–20 public HTTP(S) URLs), strategies (mobile, desktop, or both) and categories. URLs × strategies must stay at or below 20 per run. Credentials, nonstandard ports, localhost names and private IP literals are rejected, and target DNS is resolved and validated before submission.
Operational outcomes are honest and mostly free. A rate-limited row after bounded retries with Retry-After handling, a missing owner configuration, an invalid upstream response or a documented size/time limit produces an explicit explanatory row with found: false — never billed as a result. A low or zero performance score, by contrast, is still a complete, valid report when the lab evidence checks out.
Example: input and output
{
"urls": [
"https://example.com"
],
"strategies": [
"mobile"
],
"categories": [
"performance"
]
}
An unedited dataset row from an accepted platform run of that exact input (mobile report for example.com):
{
"input": "https://example.com/",
"sourceUrl": "https://www.googleapis.com/pagespeedonline/v5/runPagespeed",
"found": true,
"status": "ok",
"resultCount": 1,
"partial": false,
"error": "",
"warnings": [],
"checkedAt": "2026-09-05T21:18:43.387Z",
"schemaVersion": "1.0",
"url": "https://example.com/",
"strategy": "mobile",
"finalUrl": "https://example.com/",
"performanceScore": 1,
"LCP": 756,
"CLS": 0,
"TBT": 0,
"FCP": 756,
"SI": 756,
"metricSource": "lab",
"fetchTime": "2026-09-05T21:18:38.636Z",
"lighthouseVersion": "13.4.1",
"topOpportunities": [],
"categoryScores": {
"performance": 1
}
}
Pricing and the free limit
The actor is pay-per-event: $0.003 per run start plus $0.002 per complete report, where one report is one URL × one strategy regardless of how many categories are selected. One complete mobile report costs $0.005 all-in; the maximum 20 reports in a single run cost $0.043. Explanatory rows (rate limits, configuration problems, incomplete reports) emit no result event and are free.
Apify's free plan gives $5 of usage credits per month. At this tariff, $5 covers about 116 full 20-report runs (116 × $0.043 ≈ $4.99) — roughly 2,300 reports, or auditing a 100-site list on one strategy about 23 times over.
Try it
Start with the prefilled example input, then swap in your own permitted public pages: Google PageSpeed Insights Bulk Website Auditor
For AI agents and MCP
The actor takes JSON in and returns structured JSON dataset rows plus an OUTPUT summary record (requested, processed, delivered, paid, free and fatal state), so an agent can call it through the Apify API, poll or webhook for completion, and branch on the row status — ok rows carry metrics, while rate_limited or configuration_required rows are operational signals, not zero scores. The README documents an MCP server setup for the actor alongside JavaScript, Python and CLI examples, and covers webhook and n8n/Make/Zapier patterns for downstream processing.
Top comments (0)