{
  "openapi": "3.0.1",
  "info": {
    "title": "Core Web Vitals Checker: Bulk PageSpeed & Lighthouse Audit",
    "description": "Core Web Vitals checker for many URLs at once. Run a bulk PageSpeed / Lighthouse audit on mobile and desktop and get a site speed report: scores, LCP, CLS, TBT with good/poor ratings, top fixes per page, optional real-user CrUX data (INP) and alerts when pages get slower.",
    "version": "0.1",
    "x-build-id": "VPy1sGh4v0BBNNzJo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datacolada~lighthouse-core-web-vitals-auditor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datacolada-lighthouse-core-web-vitals-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/datacolada~lighthouse-core-web-vitals-auditor/runs": {
      "post": {
        "operationId": "runs-sync-datacolada-lighthouse-core-web-vitals-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/datacolada~lighthouse-core-web-vitals-auditor/run-sync": {
      "post": {
        "operationId": "run-sync-datacolada-lighthouse-core-web-vitals-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",
        "properties": {
          "startUrls": {
            "title": "URLs to audit",
            "type": "array",
            "description": "Required unless sitemapUrl is set. Public pages to audit. Each item must be an object with a full URL, e.g. [{\"url\":\"https://example.com\"},{\"url\":\"https://example.org/pricing\"}]; plain strings are rejected by input validation. Each URL is audited once per device. Private and internal network addresses are refused.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "sitemapUrl": {
            "title": "Sitemap URL (optional)",
            "type": "string",
            "description": "Optional sitemap.xml URL, e.g. https://example.com/sitemap.xml. Every listed page is audited (sitemap index files are followed one level), capped by maxUrls. Use instead of or together with startUrls."
          },
          "maxUrls": {
            "title": "Max URLs",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Upper limit on pages per run (after adding sitemap pages). Each URL is audited once per device.",
            "default": 50
          },
          "devices": {
            "title": "Devices",
            "type": "array",
            "description": "Mobile uses Lighthouse's default Moto G Power emulation with slow 4G and 4x CPU slowdown (what Google ranks on). Desktop uses Lighthouse's desktop preset. Pick both to get two rows per URL.",
            "items": {
              "type": "string",
              "enum": [
                "mobile",
                "desktop"
              ],
              "enumTitles": [
                "Mobile (Google's ranking view)",
                "Desktop"
              ]
            },
            "default": [
              "mobile"
            ]
          },
          "categories": {
            "title": "Lighthouse categories",
            "type": "array",
            "description": "Performance is always included. Add Accessibility, Best practices, SEO, or the new Agentic Browsing category (how well AI agents can use the page: llms.txt, WebMCP, agent accessibility). Same price either way.",
            "items": {
              "type": "string",
              "enum": [
                "performance",
                "accessibility",
                "best-practices",
                "seo",
                "agentic-browsing"
              ],
              "enumTitles": [
                "Performance",
                "Accessibility",
                "Best practices",
                "SEO",
                "Agentic browsing (AI agents)"
              ]
            },
            "default": [
              "performance",
              "accessibility",
              "best-practices",
              "seo"
            ]
          },
          "runsPerUrl": {
            "title": "Runs per URL (median)",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Lighthouse scores vary from run to run. Set 3 to audit each URL/device three times and keep the median run (Google's recommended practice). Each run is charged as one audit.",
            "default": 1
          },
          "maxOpportunities": {
            "title": "Top fixes per page",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many of the biggest improvement opportunities to list per page, ranked by estimated time saved.",
            "default": 3
          },
          "performanceBudget": {
            "title": "Performance score budget (optional)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Optional pass/fail threshold 0-100, e.g. 90. Each row gets budgetPassed = true when the performance score is at least this number. Leave empty for no budget."
          },
          "compareWithPrevious": {
            "title": "Track changes since the last run",
            "type": "boolean",
            "description": "Compare each page with the previous run of the same monitor and flag regressions (score drop of at least the threshold below, or LCP/CLS/TBT moving to a worse rating). Schedule the Actor to turn this into a speed monitor.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Baselines are kept per monitor name, so separate projects or clients do not overwrite each other.",
            "default": "default"
          },
          "scoreChangeThreshold": {
            "title": "Score change threshold (points)",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Smallest performance score change that counts as a regression or improvement. Lighthouse naturally moves a few points between runs, so 10 avoids false alarms.",
            "default": 10
          },
          "googleApiKey": {
            "title": "Google API key (optional, free, beta)",
            "type": "string",
            "description": "Your own free Google Cloud API key. With the PageSpeed Insights API enabled, audits run on Google's servers (scores match pagespeed.web.dev). With the Chrome UX Report API enabled, you also get real-user (field) Core Web Vitals p75: LCP, INP, CLS, FCP, TTFB with pass/fail, using the URL's data or, if there is not enough, the whole site's. No extra charge. See the README for a 2-minute setup."
          },
          "engine": {
            "title": "Engine",
            "enum": [
              "auto",
              "lighthouse",
              "psi"
            ],
            "type": "string",
            "description": "With your own free Google API key the audits run on Google's PageSpeed Insights servers, so scores match pagespeed.web.dev exactly and runs are faster. Without a key, Lighthouse runs inside this Actor (same Lighthouse version, cloud CPU).",
            "default": "auto"
          },
          "fieldDataLevel": {
            "title": "Field data level",
            "enum": [
              "url-then-origin",
              "url",
              "origin"
            ],
            "type": "string",
            "description": "Which CrUX record to use.",
            "default": "url-then-origin"
          },
          "saveHtmlReport": {
            "title": "Save full HTML Lighthouse report",
            "type": "boolean",
            "description": "Store the standard Lighthouse HTML report for each page and link it in reportUrl (open it in a browser or share it with a client).",
            "default": false
          },
          "maxConcurrency": {
            "title": "Parallel audits",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "1 gives the most accurate lab numbers. With Lighthouse in this run, each parallel audit needs about 8 GB of memory, otherwise audits share CPU and scores drop (capped at 3). With the PageSpeed Insights engine you can use up to 10, since Google's servers do the work. Leave empty for the default: 1 with Lighthouse, 5 with PageSpeed Insights."
          },
          "pageTimeoutSecs": {
            "title": "Page load timeout (seconds)",
            "minimum": 15,
            "maximum": 180,
            "type": "integer",
            "description": "How long Lighthouse waits for a page to load.",
            "default": 45
          },
          "cpuCalibration": {
            "title": "CPU calibration",
            "enum": [
              "auto",
              "off"
            ],
            "type": "string",
            "description": "Lighthouse slows the CPU 4x for mobile, assuming a fast desktop machine. Cloud containers are slower, so raw defaults overstate TBT and LCP. Auto measures this machine's CPU (Lighthouse's own benchmarkIndex) and scales the slowdown so scores stay close to PageSpeed Insights. The multiplier used is in the output.",
            "default": "auto"
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}