# Lighthouse Batch Auditor — Performance, SEO & Core Web Vitals (`accurate_pouch/lighthouse-auditor`) Actor

Batch Lighthouse audits via Google PageSpeed Insights API. Performance, SEO, accessibility scores + Core Web Vitals (LCP, FID, CLS) for 100s of URLs. 3 audits free per run.

- **URL**: https://apify.com/accurate\_pouch/lighthouse-auditor.md
- **Developed by:** [Manchitt Sanan](https://apify.com/accurate_pouch) (community)
- **Categories:** SEO tools, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Lighthouse Batch Auditor — Performance, SEO & Core Web Vitals

Audit 100 URLs at once for Lighthouse performance, SEO, accessibility, and best practices scores — plus Core Web Vitals (LCP, FID, CLS). Uses Google PageSpeed Insights API..

---

### Why this exists

Lighthouse is the standard web performance audit tool (28K GitHub stars, 1.5M npm weekly downloads). But existing Apify actors either charge $0.08 per audit or have low success rates.

This actor:
- **Batch input** — audit 100s of URLs in one run
- **Mobile + Desktop** — run both strategies per URL, or choose one
- **All 4 Lighthouse categories** — performance, SEO, accessibility, best practices
- **Core Web Vitals breakdown** — LCP, FID, CLS, FCP, TTFB with good/needs-improvement/poor ratings
- **Top optimization opportunities** — actionable recommendations, prioritized by time savings
- **$0.003/audit** — 25x cheaper than the leading alternative ($0.08/audit)

---

### Quick start

```json
{
    "urls": ["https://example.com"],
    "strategy": "both"
}
````

Returns mobile and desktop scores for every URL.

***

### Feature comparison

| Feature | Lighthouse Checker (38 users) | Page Speed Analyzer (16 users) | **This actor** |
|---------|------------------------------|-------------------------------|--------------|
| Batch URLs | Yes | Yes | Yes |
| Mobile + Desktop | Yes | Unknown | Yes (configurable) |
| Performance score | Yes | Yes | Yes |
| SEO score | Yes | Unknown | Yes |
| Accessibility score | Yes | Unknown | Yes |
| Best practices score | Yes | Unknown | Yes |
| Core Web Vitals breakdown | Unknown | Unknown | Yes (LCP, FID, CLS, FCP, TTFB) |
| Optimization opportunities | Unknown | Unknown | Yes (top 5 per URL) |
| Bring your own API key | Unknown | Unknown | Yes |
| Rate limit control | Unknown | Unknown | Yes (configurable delay) |
| Dry run mode | No | No | Yes |
| Free tier | No | No | **3 audits free** |
| Price per audit | **$0.08** | $0.005 | **$0.003** |

***

### How it works

This actor uses the [Google PageSpeed Insights API](https://developers.google.com/speed/docs/insights/v5/get-started), which runs Lighthouse in Google's infrastructure and returns the same scores you'd get from Chrome DevTools or web.dev/measure.

- No headless browser needed — pure API calls, 256MB RAM
- Free API: 25 requests per 100 seconds (without API key), 25,000/day (with API key)
- Same scores as running Lighthouse locally — Google runs the same engine

***

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `urls` | array | *(required)* | URLs to audit |
| `strategy` | enum | `both` | `mobile`, `desktop`, or `both` |
| `categories` | array | all 4 | Which categories: `performance`, `seo`, `accessibility`, `best-practices` |
| `googleApiKey` | string | *(optional)* | Your Google API key for higher rate limits. Free at console.cloud.google.com |
| `delayMs` | integer | `1500` | Delay between API calls in ms. Lower = faster but may hit rate limits |
| `previousRunDatasetId` | string | *(optional)* | Dataset ID from a previous run. Output includes `delta` showing score changes. |
| `dryRun` | boolean | `false` | Run audits without charges |

***

### Output

Each URL × strategy combination produces one dataset item:

```json
{
    "url": "https://example.com",
    "strategy": "mobile",
    "scores": {
        "performance": 87,
        "seo": 95,
        "accessibility": 78,
        "bestPractices": 92
    },
    "coreWebVitals": {
        "lcp": { "value": 2.1, "unit": "s", "rating": "good" },
        "fid": { "value": 45, "unit": "ms", "rating": "good" },
        "cls": { "value": 0.08, "unit": "", "rating": "needs-improvement" },
        "fcp": { "value": 1.5, "unit": "s", "rating": "good" },
        "ttfb": { "value": 320, "unit": "ms", "rating": "good" }
    },
    "topOpportunities": [
        {
            "id": "unused-css-rules",
            "title": "Remove unused CSS",
            "savings": "0.8 s",
            "description": "Remove dead rules from stylesheets..."
        }
    ],
    "auditedAt": "2026-04-13T10:00:00Z",
    "status": "success",
    "error": null
}
```

#### Delta tracking (score changes over time)

If you provide `previousRunDatasetId`, each result includes a `delta` object:

```json
{
    "delta": {
        "performance": +5,
        "seo": 0,
        "accessibility": -2,
        "bestPractices": +3
    },
    "previousAuditedAt": "2026-04-10T10:00:00Z"
}
```

Find the dataset ID in the **Output** tab of any previous run. This lets you track whether your optimizations are actually improving scores.

#### Core Web Vitals ratings

| Metric | Good | Needs Improvement | Poor |
|--------|------|-------------------|------|
| LCP | ≤ 2.5s | 2.5–4.0s | > 4.0s |
| FID | ≤ 100ms | 100–300ms | > 300ms |
| CLS | ≤ 0.1 | 0.1–0.25 | > 0.25 |

***

### Pricing

**$0.003 per audit** (pay-per-event pricing).

- "both" strategy = 2 audits per URL (mobile + desktop).
- Failed audits and dry runs are never charged.
- 100 URLs, both strategies = 200 audits = $0.60

***

### Limitations

- **API-based, not local Chrome.** Results come from Google's PageSpeed Insights API. Scores may differ slightly from running Lighthouse locally due to Google's infrastructure.
- **Rate limits without API key.** Without your own Google API key, you're limited to ~25 requests per 100 seconds. For large batches, provide your own key (free to create).
- **No JavaScript execution control.** Unlike running Lighthouse locally, you can't customize the network throttling or CPU slowdown.

***

### Related Tools by manchittlab

- **[Broken Link Checker](https://apify.com/accurate_pouch/broken-link-checker)** — Recursively crawl your website and find every broken link, 404, redirect, and timeout.
- **[Email Validator Pro](https://apify.com/accurate_pouch/email-validator)** — Bulk email validation with SMTP check, 5,300+ disposable domains, deliverability scoring.
- **[Image Processor](https://apify.com/accurate_pouch/image-processor)** — Batch resize, convert to WebP/AVIF, compress, watermark. Powered by sharp.
- **[Domain Age Checker](https://apify.com/accurate_pouch/domain-age-checker)** — Bulk RDAP domain age, registration, and expiration lookup.
- **[Tech Stack Detector](https://apify.com/accurate_pouch/tech-stack-detector)** — Detect frameworks, CMS, analytics, CDN, and 100+ technologies for any URL.
- **[Google Sheets Reader & Writer](https://apify.com/accurate_pouch/google-sheets-rw)** — Read any Google Sheet to JSON or append rows. Service Account auth.

***

### Run on Apify

[![Run on Apify](https://apify.com/static/run-on-apify.svg)](https://apify.com/accurate_pouch/lighthouse-auditor)

No setup needed. Click above to run in the cloud. $0.003 per operation.

# Actor input Schema

## `urls` (type: `array`):

List of URLs to run Lighthouse audits on.

## `strategy` (type: `string`):

Audit as mobile device, desktop, or both. 'both' runs two audits per URL.

## `categories` (type: `array`):

Which Lighthouse categories to include. Default: all four.

## `googleApiKey` (type: `string`):

Your own Google PageSpeed Insights API key for higher rate limits (25K/day vs 25/100s). Free to create at console.cloud.google.com.

## `delayMs` (type: `integer`):

Milliseconds to wait between API calls. Lower = faster but risks rate limiting. Ignored if you provide your own API key.

## `previousRunDatasetId` (type: `string`):

Dataset ID from a previous Lighthouse run. If provided, results include a 'delta' field showing score changes since that run. Find this in the run's Output tab.

## `googleSheetsId` (type: `string`):

Export audit results to a Google Sheet. Paste the spreadsheet ID from the URL.

## `googleServiceAccountKey` (type: `string`):

Full JSON contents of your Google Service Account key file. Required for Sheets export.

## `dryRun` (type: `boolean`):

Run audits but don't charge. Results are still returned.

## Actor input object example

```json
{
  "urls": [
    "https://example.com"
  ],
  "strategy": "both",
  "categories": [
    "performance",
    "seo",
    "accessibility",
    "best-practices"
  ],
  "delayMs": 1500,
  "dryRun": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://example.com"
    ],
    "categories": [
        "performance",
        "seo",
        "accessibility",
        "best-practices"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("accurate_pouch/lighthouse-auditor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://example.com"],
    "categories": [
        "performance",
        "seo",
        "accessibility",
        "best-practices",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("accurate_pouch/lighthouse-auditor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://example.com"
  ],
  "categories": [
    "performance",
    "seo",
    "accessibility",
    "best-practices"
  ]
}' |
apify call accurate_pouch/lighthouse-auditor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=accurate_pouch/lighthouse-auditor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Lighthouse Batch Auditor — Performance, SEO & Core Web Vitals",
        "description": "Batch Lighthouse audits via Google PageSpeed Insights API. Performance, SEO, accessibility scores + Core Web Vitals (LCP, FID, CLS) for 100s of URLs. 3 audits free per run.",
        "version": "0.1",
        "x-build-id": "EdwM7jHriYkswSB3s"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/accurate_pouch~lighthouse-auditor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-accurate_pouch-lighthouse-auditor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/accurate_pouch~lighthouse-auditor/runs": {
            "post": {
                "operationId": "runs-sync-accurate_pouch-lighthouse-auditor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/accurate_pouch~lighthouse-auditor/run-sync": {
            "post": {
                "operationId": "run-sync-accurate_pouch-lighthouse-auditor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "urls"
                ],
                "properties": {
                    "urls": {
                        "title": "URLs to Audit",
                        "type": "array",
                        "description": "List of URLs to run Lighthouse audits on.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "strategy": {
                        "title": "Device Strategy",
                        "enum": [
                            "mobile",
                            "desktop",
                            "both"
                        ],
                        "type": "string",
                        "description": "Audit as mobile device, desktop, or both. 'both' runs two audits per URL.",
                        "default": "both"
                    },
                    "categories": {
                        "title": "Audit Categories",
                        "type": "array",
                        "description": "Which Lighthouse categories to include. Default: all four."
                    },
                    "googleApiKey": {
                        "title": "Google API Key (optional)",
                        "type": "string",
                        "description": "Your own Google PageSpeed Insights API key for higher rate limits (25K/day vs 25/100s). Free to create at console.cloud.google.com."
                    },
                    "delayMs": {
                        "title": "Delay Between Requests (ms)",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Milliseconds to wait between API calls. Lower = faster but risks rate limiting. Ignored if you provide your own API key.",
                        "default": 1500
                    },
                    "previousRunDatasetId": {
                        "title": "Previous Run Dataset ID",
                        "type": "string",
                        "description": "Dataset ID from a previous Lighthouse run. If provided, results include a 'delta' field showing score changes since that run. Find this in the run's Output tab."
                    },
                    "googleSheetsId": {
                        "title": "Google Sheets Export — Spreadsheet ID",
                        "type": "string",
                        "description": "Export audit results to a Google Sheet. Paste the spreadsheet ID from the URL."
                    },
                    "googleServiceAccountKey": {
                        "title": "Google Sheets Export — Service Account Key",
                        "type": "string",
                        "description": "Full JSON contents of your Google Service Account key file. Required for Sheets export."
                    },
                    "dryRun": {
                        "title": "Dry Run",
                        "type": "boolean",
                        "description": "Run audits but don't charge. Results are still returned.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
