Lighthouse Audit avatar

Lighthouse Audit

Pricing

from $2.70 / 1,000 audits

Go to Apify Store
Lighthouse Audit

Lighthouse Audit

Run Lighthouse lab audits for public web pages on mobile or desktop profiles. Get category scores, lab metrics, audit findings, and optional HTML, JSON, or CSV reports in your dataset.

Pricing

from $2.70 / 1,000 audits

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

🚦 Find page issues with a Lighthouse audit

Lighthouse Audit is for developers, SEO teams, and site owners who need to check public web pages. Get category scores, lab loading metrics, failed checks, and ranked ways to improve a page. Audit a list of URLs with one set of settings, then use the saved data to plan fixes or compare later checks. You do not need to supply a source login or Google API key.

📊 Scores, lab metrics, and page findings

Each submitted URL has one dataset row with the selected mobile or desktop audits. Choose both profiles to see their scores and lab metrics side by side. Each completed audit includes:

  • Scores from 0 to 1 for the selected performance, accessibility, best practices, and SEO categories.
  • LCP, FCP, TBT, CLS, and Speed Index lab metrics.
  • Failed audit checks and ranked optimization opportunities, with explanations and estimated savings when available.
  • The final URL after redirects, network profile, and Lighthouse version.
  • Optional HTML, JSON, or CSV report links.
  • Earlier category scores and regression flags when prior history is available.

The results are lab measurements, not real-user or field data. Scores can change between runs. Missing detail for a check does not make the core scores invalid. If an audit cannot finish, its profile has a failure status and reason instead of measurements.

▶️ Run a public page audit

  1. Add the public HTTP(S) URLs you want to check.
  2. Choose mobile, desktop, or both device profiles.
  3. Select the categories and a network profile. These settings apply to every URL in the run.
  4. Choose extra report formats if you need them.
  5. Start the run and open Audit results to read the dataset.

Submit the pages you want to audit. The Actor does not crawl a site, find sitemap URLs, log in to private pages, or apply fixes to a page.

⚙️ Input

Input fields

FieldTypeWhat it does
urlsarray of objectsRequired. Adds one or more public HTTP(S) pages. Each URL uses the same audit settings.
urls[].urlstringRequired full public HTTP(S) URL for one page. Pages that need a login are not supported.
deviceProfilesarray of stringsSelects mobile, desktop, or both. Defaults to mobile. Both runs each URL twice and adds a side-by-side comparison when results are available.
categoriesarray of stringsSelects one or more of performance, accessibility, best-practices, and seo. Defaults to all four.
networkProfilestringSets the network conditions for every selected device profile: mobileSlow4G, mobileFast4G, or desktopDense4G. Defaults to mobileSlow4G.
reportFormatsarray of stringsAdds html for reading, json for code, or csv for spreadsheets. Leave empty for dataset results only. Defaults to an empty array.

Input example

This is the public input from a successful current-beta run with the default audit settings:

{
"urls": [
{
"url": "https://example.com"
}
],
"deviceProfiles": [
"mobile"
],
"categories": [
"performance",
"accessibility",
"best-practices",
"seo"
],
"networkProfile": "mobileSlow4G",
"reportFormats": []
}

🧾 Output

Run output link

FieldTypeWhat it does
datasetstringOpens the dataset overview with one row per submitted URL and the selected device audits.

Completed audit fields

Mobile and desktop audits use the same shape. The table lists both real field paths. Only selected device profiles appear. Optional findings, history, and reports appear when available. Each category object contains only the categories available for that audit or comparison.

FieldTypeWhat it does
requestedUrlstringPublic URL submitted for the audit.
mobileAudit, desktopAuditobjectAudit for the named device profile.
mobileAudit.finalUrl, desktopAudit.finalUrlstringURL reached after redirects.
mobileAudit.networkProfile, desktopAudit.networkProfilestringNetwork profile used: mobileSlow4G, mobileFast4G, or desktopDense4G.
mobileAudit.lighthouseVersion, desktopAudit.lighthouseVersionstringLighthouse engine version used.
mobileAudit.categoryScores, desktopAudit.categoryScoresobjectScores for the requested categories, from 0 to 1.
mobileAudit.categoryScores.performance, desktopAudit.categoryScores.performancenumberPerformance score.
mobileAudit.categoryScores.accessibility, desktopAudit.categoryScores.accessibilitynumberAccessibility score.
mobileAudit.categoryScores.bestPractices, desktopAudit.categoryScores.bestPracticesnumberBest practices score.
mobileAudit.categoryScores.seo, desktopAudit.categoryScores.seonumberSEO score.
mobileAudit.labMetrics, desktopAudit.labMetricsobjectLab loading measurements.
mobileAudit.labMetrics.lcpMs, desktopAudit.labMetrics.lcpMsnumberLargest Contentful Paint in milliseconds.
mobileAudit.labMetrics.fcpMs, desktopAudit.labMetrics.fcpMsnumberFirst Contentful Paint in milliseconds.
mobileAudit.labMetrics.tbtMs, desktopAudit.labMetrics.tbtMsnumberTotal Blocking Time in milliseconds.
mobileAudit.labMetrics.cls, desktopAudit.labMetrics.clsnumberCumulative Layout Shift, with no time unit.
mobileAudit.labMetrics.speedIndex, desktopAudit.labMetrics.speedIndexnumberSpeed Index in milliseconds.
mobileAudit.failedAudits, desktopAudit.failedAuditsarray of objectsFailed Lighthouse checks, when detail is available.
mobileAudit.failedAudits[].id, desktopAudit.failedAudits[].idstringLighthouse audit ID.
mobileAudit.failedAudits[].title, desktopAudit.failedAudits[].titlestringLighthouse audit title.
mobileAudit.failedAudits[].description, desktopAudit.failedAudits[].descriptionstringLighthouse explanation of the failed check.
mobileAudit.failedAudits[].score, desktopAudit.failedAudits[].scorenumberAudit score from 0 to 1, when supplied.
mobileAudit.failedAudits[].displayValue, desktopAudit.failedAudits[].displayValuestringFormatted value shown by Lighthouse, when supplied.
mobileAudit.optimizationOpportunities, desktopAudit.optimizationOpportunitiesarray of objectsWays to improve the page, in priority order, when detail is available.
mobileAudit.optimizationOpportunities[].id, desktopAudit.optimizationOpportunities[].idstringLighthouse opportunity ID.
mobileAudit.optimizationOpportunities[].title, desktopAudit.optimizationOpportunities[].titlestringLighthouse opportunity title.
mobileAudit.optimizationOpportunities[].description, desktopAudit.optimizationOpportunities[].descriptionstringLighthouse explanation of the opportunity.
mobileAudit.optimizationOpportunities[].estimatedSavingsMs, desktopAudit.optimizationOpportunities[].estimatedSavingsMsnumberEstimated time savings in milliseconds, when supplied.
mobileAudit.optimizationOpportunities[].estimatedSavingsBytes, desktopAudit.optimizationOpportunities[].estimatedSavingsBytesnumberEstimated transfer savings in bytes, when supplied.
mobileAudit.optimizationOpportunities[].displayValue, desktopAudit.optimizationOpportunities[].displayValuestringFormatted opportunity value, when supplied.
mobileAudit.scoreComparison, desktopAudit.scoreComparisonobjectEarlier scores and regression flags, when prior history is available.
mobileAudit.scoreComparison.previousCategoryScores, desktopAudit.scoreComparison.previousCategoryScoresobjectEarlier scores used for the comparison, from 0 to 1.
mobileAudit.scoreComparison.previousCategoryScores.performance, desktopAudit.scoreComparison.previousCategoryScores.performancenumberEarlier performance score.
mobileAudit.scoreComparison.previousCategoryScores.accessibility, desktopAudit.scoreComparison.previousCategoryScores.accessibilitynumberEarlier accessibility score.
mobileAudit.scoreComparison.previousCategoryScores.bestPractices, desktopAudit.scoreComparison.previousCategoryScores.bestPracticesnumberEarlier best practices score.
mobileAudit.scoreComparison.previousCategoryScores.seo, desktopAudit.scoreComparison.previousCategoryScores.seonumberEarlier SEO score.
mobileAudit.scoreComparison.regressionFlags, desktopAudit.scoreComparison.regressionFlagsobjectWhether scores fell for categories present in both audits.
mobileAudit.scoreComparison.regressionFlags.performance, desktopAudit.scoreComparison.regressionFlags.performancebooleanWhether the performance score fell.
mobileAudit.scoreComparison.regressionFlags.accessibility, desktopAudit.scoreComparison.regressionFlags.accessibilitybooleanWhether the accessibility score fell.
mobileAudit.scoreComparison.regressionFlags.bestPractices, desktopAudit.scoreComparison.regressionFlags.bestPracticesbooleanWhether the best practices score fell.
mobileAudit.scoreComparison.regressionFlags.seo, desktopAudit.scoreComparison.regressionFlags.seobooleanWhether the SEO score fell.
mobileAudit.reports, desktopAudit.reportsobjectOptional report links for this device audit.
mobileAudit.reports.htmlUrl, desktopAudit.reports.htmlUrlstringApify storage URL for the HTML report, when selected.
mobileAudit.reports.jsonUrl, desktopAudit.reports.jsonUrlstringApify storage URL for the detailed JSON report, when selected.
mobileAudit.reports.csvUrl, desktopAudit.reports.csvUrlstringApify storage URL for the CSV summary, when selected.

Completed audit example

This complete row comes from a successful current-beta run. It shows scores, lab metrics, findings, and a comparison with earlier scores:

{
"requestedUrl": "https://example.com",
"mobileAudit": {
"finalUrl": "https://example.com/",
"networkProfile": "mobileSlow4G",
"lighthouseVersion": "13.5.0",
"categoryScores": {
"performance": 1,
"accessibility": 0.96,
"bestPractices": 1,
"seo": 0.8
},
"scoreComparison": {
"previousCategoryScores": {
"performance": 1,
"accessibility": 0.96,
"bestPractices": 1,
"seo": 0.8
},
"regressionFlags": {
"performance": false,
"accessibility": false,
"bestPractices": false,
"seo": false
}
},
"labMetrics": {
"lcpMs": 1047.743,
"fcpMs": 1047.743,
"tbtMs": 1,
"cls": 0.005159732408618392,
"speedIndex": 1674.9231739989154
},
"failedAudits": [
{
"id": "landmark-one-main",
"title": "Document does not have a main landmark.",
"description": "One main landmark helps screen reader users navigate a web page. [Learn more about landmarks](https://dequeuniversity.com/rules/axe/4.13/landmark-one-main).",
"score": 0
},
{
"id": "meta-description",
"title": "Document does not have a meta description",
"description": "Meta descriptions may be included in search results to concisely summarize page content. [Learn more about the meta description](https://developer.chrome.com/docs/lighthouse/seo/meta-description/).",
"score": 0
},
{
"id": "link-text",
"title": "Links do not have descriptive text",
"description": "Descriptive link text helps search engines understand your content. [Learn how to make links more accessible](https://developer.chrome.com/docs/lighthouse/seo/link-text/).",
"score": 0,
"displayValue": "1 link found"
},
{
"id": "cache-insight",
"title": "Use efficient cache lifetimes",
"description": "A long cache lifetime can speed up repeat visits to your page. [Learn more about caching](https://developer.chrome.com/docs/performance/insights/cache).",
"score": 0.5,
"displayValue": "Est savings of 2 KiB"
},
{
"id": "network-dependency-tree-insight",
"title": "Network dependency tree",
"description": "[Avoid chaining critical requests](https://developer.chrome.com/docs/performance/insights/network-dependency-tree) by reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load.",
"score": 0
}
],
"optimizationOpportunities": [
{
"id": "server-response-time",
"title": "Initial server response time was short",
"description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
"estimatedSavingsMs": 157,
"displayValue": "Root document took 260 ms"
},
{
"id": "redirects",
"title": "Avoid multiple page redirects",
"description": "Redirects introduce additional delays before the page can be loaded. [Learn how to avoid page redirects](https://developer.chrome.com/docs/lighthouse/performance/redirects/).",
"estimatedSavingsMs": 0
},
{
"id": "unminified-css",
"title": "Minify CSS",
"description": "Minifying CSS files can reduce network payload sizes. [Learn how to minify CSS](https://developer.chrome.com/docs/lighthouse/performance/unminified-css/).",
"estimatedSavingsMs": 0,
"estimatedSavingsBytes": 0
},
{
"id": "unminified-javascript",
"title": "Minify JavaScript",
"description": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn how to minify JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/).",
"estimatedSavingsMs": 0,
"estimatedSavingsBytes": 0
},
{
"id": "unused-css-rules",
"title": "Reduce unused CSS",
"description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
"estimatedSavingsMs": 0,
"estimatedSavingsBytes": 0
},
{
"id": "unused-javascript",
"title": "Reduce unused JavaScript",
"description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
"estimatedSavingsMs": 0,
"estimatedSavingsBytes": 0
}
]
}
}

Both device profiles

This row from another successful current-beta run is shortened because the full row exceeds 10,000 characters. The "..." strings stand for omitted findings and report links. Compare the mobile and desktop scores and metrics in the same row:

{
"requestedUrl": "https://example.com",
"mobileAudit": {
"finalUrl": "https://example.com/",
"networkProfile": "desktopDense4G",
"lighthouseVersion": "13.5.0",
"categoryScores": {
"performance": 1,
"accessibility": 0.96,
"bestPractices": 1,
"seo": 0.8
},
"scoreComparison": {
"previousCategoryScores": {
"performance": 1,
"accessibility": 0.96,
"bestPractices": 1,
"seo": 0.8
},
"regressionFlags": {
"performance": false,
"accessibility": false,
"bestPractices": false,
"seo": false
}
},
"labMetrics": {
"lcpMs": 231,
"fcpMs": 231,
"tbtMs": 0,
"cls": 0,
"speedIndex": 370.4555970834841
},
"failedAudits": "...",
"optimizationOpportunities": "...",
"reports": "..."
},
"desktopAudit": {
"finalUrl": "https://example.com/",
"networkProfile": "desktopDense4G",
"lighthouseVersion": "13.5.0",
"categoryScores": {
"performance": 0.79,
"accessibility": 0.96,
"bestPractices": 1,
"seo": 0.8
},
"labMetrics": {
"lcpMs": 1150.215,
"fcpMs": 1050.715,
"tbtMs": 280,
"cls": 0.00122130609184835,
"speedIndex": 2546.5367451475136
},
"failedAudits": "...",
"optimizationOpportunities": "...",
"reports": "..."
}
}

Failed audit fields

Either profile can have this failure shape. It has no scores, lab metrics, findings, or report links. A row can also contain a completed audit for the other selected profile, using the table above.

FieldTypeWhat it does
requestedUrlstringPublic URL submitted for the audit.
mobileAudit, desktopAuditobjectFailure details for the named device profile, when selected.
mobileAudit.status, desktopAudit.statusstringfailed when the audit could not produce Lighthouse measurements.
mobileAudit.reason, desktopAudit.reasonstringShort reason the audit could not finish.

This complete failure row comes from a successful current-beta run:

{
"requestedUrl": "https://www.iana.org/robots.txt",
"mobileAudit": {
"status": "failed",
"reason": "temporary source access failure"
}
}

💳 Pricing

This Actor uses pay-per-event pricing. One Audit event is charged for each successful lab audit of one public URL on one device profile. Choosing both profiles can create two events per URL if both audits finish. Failed audits do not create this event. See the Pricing tab for current tier prices.

🔌 Integrations

Run the Actor through Apify Console or the Apify API. Use Apify datasets, schedules, webhooks, and platform integrations to send audit data to your workflow. Your workflow can read the scores to build reports or decide when to raise an alert.

❓ FAQ

Why does a device audit have a failure status instead of scores?

The audit could not finish. Read its reason field to see why. A failed profile has no Lighthouse measurements and does not create an Audit event.

Does the network profile follow the device profile?

You choose them separately. The same networkProfile applies to every selected device profile in the run. You can use both devices with one network setting to compare their results.

When do earlier scores and regression flags appear?

They appear when prior audit history is available. A regression flag is true when a category score is lower than its earlier score. Only categories present in both results can be compared.

Can I use different settings for each URL in one run?

No. All URLs share one set of device, category, network, and report settings. Use separate runs when you need different settings.

Can I get an HTML Lighthouse report?

Yes. Select html in reportFormats. Use json for a detailed machine-readable report or csv for a spreadsheet summary. The audit's reports object holds the links when they are available.

Are these Google PageSpeed Insights field results?

No. This Actor returns Lighthouse lab measurements. It does not return real-user or field metrics. You do not need to provide a Google API key to run these public page audits.

Does an accessibility score prove the page is fully accessible?

Treat it as a Lighthouse check score and review the returned findings. The Actor reports audit results; it does not promise a pass outcome or fix the page.

Can I audit a whole site or a page behind a login?

Submit each public HTTP(S) page you want to check. The Actor does not find new pages, follow site links, or access pages that need a login or private session.

Will a repeated website speed test give the same score?

Scores can vary between lab runs. Keep the settings the same when you compare results, and check the reported Lighthouse version and network profile.

📝 Changelog

v0.0 (01-10-2026)

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré