{
  "openapi": "3.0.1",
  "info": {
    "title": "SEO Audit Crawler",
    "description": "Audit your own website's on-page SEO: crawl it from a start URL or sitemap and get a 0-100 score per page and site from a published formula, plus title and meta description length, H1s, canonical, robots, hreflang, Open Graph, JSON-LD, broken links and images, redirects and issues.",
    "version": "1.2",
    "x-build-id": "7yc7mdtSAYkeKhwUH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/humble-echidna~seo-audit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-humble-echidna-seo-audit",
        "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/humble-echidna~seo-audit/runs": {
      "post": {
        "operationId": "runs-sync-humble-echidna-seo-audit",
        "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/humble-echidna~seo-audit/run-sync": {
      "post": {
        "operationId": "run-sync-humble-echidna-seo-audit",
        "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": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Your site: one address per line, e.g. https://example.com/ (crawl) or example.com or https://example.com/sitemap.xml (sitemap). Pages on the same site (the same host, with or without www.) are audited; other sites' pages are only checked as links. Only public web addresses on the standard ports (80 and 443) are requested.",
            "default": [
              "https://crawlee.dev/"
            ],
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "Find pages by",
            "enum": [
              "crawl",
              "sitemap"
            ],
            "type": "string",
            "description": "`crawl` (default): start at your start URLs and follow same-site links, up to the crawl depth. `sitemap`: audit the pages your site's sitemaps list (robots.txt Sitemap: lines, else /sitemap.xml), then follow their links up to the crawl depth (0 = sitemap pages only). Both stop at `maxPages`.",
            "default": "crawl"
          },
          "maxPages": {
            "title": "Max pages per run",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Audit at most this many pages in total, 1 to 10,000 (default 10; you pay per page audited). Raise it to cover your whole site. The run also stops cleanly at the maximum cost per run you set in the run options, whichever comes first.",
            "default": 10
          },
          "maxDepth": {
            "title": "Crawl depth",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "How many clicks away from the start pages (or sitemap pages) to follow same-site links, 0 to 20 (default 3). 0 audits only the start pages.",
            "default": 3
          },
          "checkLinks": {
            "title": "Check links for broken ones",
            "type": "boolean",
            "description": "Check every link on the audited pages (each distinct URL once per run, HEAD first) and list the broken ones per page. Links to pages the crawl reads reuse that answer. Off: links aren't checked; only links to pages the crawl read get a status (images are a separate switch).",
            "default": true
          },
          "checkExternalLinks": {
            "title": "Check links to other sites",
            "type": "boolean",
            "description": "Also check links that point to other websites (checked, never crawled). Off: only links within your site.",
            "default": true
          },
          "checkImages": {
            "title": "Check images",
            "type": "boolean",
            "description": "Check every image on the audited pages (<img src>, each distinct address once per run, with a HEAD request) for broken images and files over 200 KB (from Content-Length), wherever they're hosted. Counts against Max link checks per run. Alt text and width/height attributes are read from the page either way. Off: no image requests.",
            "default": true
          },
          "maxLinkChecks": {
            "title": "Max link checks per run",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "At most this many links and images are checked per run, 0 to 50,000 (default 500; distinct URLs, not counting the pages audited). Links past it are counted in each page's linksNotChecked, images in imagesNotChecked. Link and image checks are free; this bounds how long a run takes.",
            "default": 500
          },
          "compareWithPreviousAudit": {
            "title": "Compare with the previous audit",
            "type": "boolean",
            "description": "Say what changed since the last run of this same audit (same start URLs, mode and settings; kept in your own account's key-value store \"seo-audit-memory\"): each page gets changeType new, changed or unchanged, with the fields and issues that changed, and the site summary counts issues added and fixed, new and fixed broken links, and pages added and removed. The first run with it on is the baseline. Changing the start URLs, mode or any setting above starts a new baseline.",
            "default": false
          },
          "onlyChangedPages": {
            "title": "Only return changed pages",
            "type": "boolean",
            "description": "Turns on the comparison and returns only new and changed pages ($0.01 each, as usual). Unchanged pages are still crawled and audited (they count in the site summary) but not returned, and cost a tenth of a page ($0.001 each; never for a page that refused or failed). The first run returns every page (the baseline). A 100-page site where nothing changed costs $0.10 a run. The maximum cost per run limits the pages read.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}