{
  "openapi": "3.0.1",
  "info": {
    "title": "SEO Site Audit - Crawler, Broken Links, Sitemap & Score",
    "description": "Crawl any website and audit on-page SEO: titles, meta descriptions, H1, canonical, noindex, hreflang, Open Graph, alt text, broken links, thin content, JSON-LD, sitemap, robots.txt, HTTPS and orphan pages, with a 0-100 score. US$ 10 per 1,000 pages.",
    "version": "0.1",
    "x-build-id": "e3EFEJMSGXwsEc0A0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~seo-site-audit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-seo-site-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/scrapewise~seo-site-audit/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-seo-site-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/scrapewise~seo-site-audit/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-seo-site-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",
        "properties": {
          "startUrls": {
            "title": "Websites",
            "type": "array",
            "description": "Websites to audit, one per line, as links or plain domains (for example https://crawlee.dev or example.com). The crawl starts at each link and stays on that website. Each website returns one row per audited page (status, title, meta description, headings, canonical, word count, broken links, issues and a page score) and one summary row with the site score and a prioritized issue list. Leave empty to audit an example website. Also accepts 'urls', 'websites' or 'domains'.",
            "items": {
              "type": "string"
            }
          },
          "maxPagesPerSite": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The crawl stops after this many pages on each website (1 to 10,000, default 100). Each audited page is charged, so this is the main cost control: 100 pages is enough for most small sites, raise it for full audits of large ones. Links found on the audited pages are still checked for broken links.",
            "default": 100
          },
          "includeSubdomains": {
            "title": "Include subdomains",
            "type": "boolean",
            "description": "Also crawls subdomains such as blog.example.com and shop.example.com when you start at example.com, and counts them in the same summary. Off (default): only the start host is crawled, with www and non-www treated as the same site.",
            "default": false
          },
          "includePatterns": {
            "title": "Only crawl URLs containing",
            "type": "array",
            "description": "Optional. Only crawl URLs that contain one of these texts or match these wildcard patterns, one per line (for example /blog/ or */products/*). Useful to audit one section of a large site. The start URL is always audited. Leave empty to crawl every page.",
            "items": {
              "type": "string"
            }
          },
          "excludePatterns": {
            "title": "Skip URLs containing",
            "type": "array",
            "description": "Optional. Skip URLs that contain one of these texts or match these wildcard patterns, one per line (for example /tag/, ?page= or */cart*). Skipped URLs are not crawled and not charged. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "crawlSitemapUrls": {
            "title": "Also crawl sitemap URLs",
            "type": "boolean",
            "description": "On by default: after following links, fills the remaining page budget with URLs from the website's XML sitemap, which finds pages with no internal links pointing to them (orphan pages). Turn off to audit only pages reachable by links.",
            "default": true
          },
          "checkExternalLinks": {
            "title": "Check external links",
            "type": "boolean",
            "description": "On by default: checks every outgoing link for 4xx and 5xx answers and dead domains, and reports them as broken links on the page that has them. Internal links are always checked. Turn off for a faster run focused on on-page issues. No extra charge.",
            "default": true
          },
          "maxLinkChecksPerSite": {
            "title": "Max extra link checks per website",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "Links that were not crawled (external links and internal links beyond the page limit) are checked with a light HEAD request, up to this number per website (0 to 20,000, default 500). 0 skips those checks. Link checks are not charged.",
            "default": 500
          },
          "minWordCount": {
            "title": "Thin content below (words)",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Pages with fewer visible words than this (default 200) get the THIN_CONTENT issue. Set a lower value for sites with short product or landing pages, or 0 to turn the check off.",
            "default": 200
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "On by default: skips URLs that robots.txt disallows for all crawlers and honors its Crawl-delay (up to 5 seconds). Turn off to audit your own site including pages hidden from crawlers. Skipped pages are free.",
            "default": true
          },
          "maxConcurrencyPerSite": {
            "title": "Parallel requests per website",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many pages of the same website are requested at the same time (1 to 10, default 4). Keep it low to be gentle with small servers; raise it for large sites on strong hosting to finish faster.",
            "default": 4
          },
          "delayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 30000,
            "type": "integer",
            "description": "Optional pause in milliseconds between page requests on the same website (0 to 30,000, default 0; for example 1000 for one second). Use it for servers that rate-limit crawlers.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional and off by default: most websites do not need a proxy. Turn on Apify Proxy only if a website blocks the crawler and its pages come back with 403 or 429 errors."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}