{
  "openapi": "3.0.1",
  "info": {
    "title": "Technical SEO Audit: One Scored Row per Domain",
    "description": "Technical SEO audit tool for a list of domains. One scored row per site: robots.txt, sitemap health, status codes, redirect chains, soft 404s, structured data, title and meta tags, security headers, AI crawler policy and feeds. No API key, no proxy, export to CSV or JSON.",
    "version": "1.0",
    "x-build-id": "XD42U4GHCHhs9XMv6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~technical-seo-audit-composite/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-technical-seo-audit-composite",
        "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/accountable_eel~technical-seo-audit-composite/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-technical-seo-audit-composite",
        "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/accountable_eel~technical-seo-audit-composite/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-technical-seo-audit-composite",
        "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": {
          "domains": {
            "title": "Which websites do you want audited?",
            "type": "array",
            "description": "One domain per line, such as example.com. A full address works too: only the domain is used, and the audit always starts from the homepage. Each domain comes back as one scored row. Accepted formats: example.com, www.python.org, https://nodejs.org/en/about. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "sampleSize": {
            "title": "Pages to sample per domain",
            "type": "integer",
            "description": "How many pages of each site to open and check for broken links, redirects and soft 404s, picked evenly across the sitemap (or from the homepage's own links when there is no sitemap). 10 is a good default, 25 is the most, 0 skips page sampling. The price per domain is the same whatever you choose.",
            "default": 10
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep rows containing",
            "type": "array",
            "description": "Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip rows containing",
            "type": "array",
            "description": "Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "domain",
                "score",
                "grade",
                "issues",
                "issueCount",
                "scoreBreakdown",
                "homepageStatus",
                "homepageResponseMs",
                "httpsAvailable",
                "httpRedirectsToHttps",
                "redirectHops",
                "redirectChain",
                "robotsTxtFound",
                "robotsTxtUrl",
                "robotsDisallowRules",
                "sitemapFound",
                "sitemapUrl",
                "sitemapInRobotsTxt",
                "sitemapIsIndex",
                "sitemapUrlCount",
                "sampleSource",
                "pagesSampled",
                "pagesOk",
                "pagesRedirected",
                "pagesBroken",
                "brokenPages",
                "soft404Pages",
                "soft404Rate",
                "missingPageStatus",
                "title",
                "titleLength",
                "metaDescription",
                "descriptionLength",
                "canonical",
                "h1Count",
                "homepageNoindex",
                "lang",
                "hasOpenGraph",
                "structuredDataFound",
                "structuredDataTypes",
                "securityHeadersScore",
                "securityHeadersGrade",
                "securityHeadersMissing",
                "aiCrawlersBlocked",
                "aiCrawlersNamed",
                "hasLlmsTxt",
                "feedFound",
                "feedUrls",
                "sourceUrl",
                "requestsMade"
              ],
              "enumTitles": [
                "Audited host",
                "Score (0-100)",
                "Grade",
                "Issues found",
                "Number of issues",
                "Score breakdown",
                "Homepage status code",
                "Homepage response time (ms)",
                "HTTPS works?",
                "http redirects to https?",
                "Redirect hops",
                "Redirect chain",
                "robots.txt found?",
                "robots.txt address",
                "Disallow rules for all crawlers",
                "Sitemap found?",
                "Sitemap read",
                "Sitemap listed in robots.txt?",
                "Sitemap is an index?",
                "URLs in the sitemap read",
                "Where sampled pages came from",
                "Pages sampled",
                "Sampled pages OK",
                "Sampled pages that redirect",
                "Sampled pages broken",
                "Broken pages",
                "Soft-404 pages",
                "Soft-404 rate",
                "Status for a made-up page",
                "Homepage title",
                "Title length",
                "Meta description",
                "Description length",
                "Canonical URL",
                "H1 headings",
                "Homepage set to noindex?",
                "Page language",
                "Has Open Graph tags?",
                "Structured data found?",
                "Structured data types",
                "Security headers present (of 8)",
                "Security headers grade",
                "Security headers missing",
                "AI crawlers blocked",
                "AI crawlers named in robots.txt",
                "Has llms.txt?",
                "Feed found?",
                "Feed addresses",
                "Source URL",
                "Requests made"
              ]
            },
            "default": [
              "domain",
              "score",
              "grade",
              "issues",
              "issueCount",
              "scoreBreakdown",
              "homepageStatus",
              "homepageResponseMs",
              "httpsAvailable",
              "httpRedirectsToHttps",
              "redirectHops",
              "redirectChain",
              "robotsTxtFound",
              "robotsTxtUrl",
              "robotsDisallowRules",
              "sitemapFound",
              "sitemapUrl",
              "sitemapInRobotsTxt",
              "sitemapIsIndex",
              "sitemapUrlCount",
              "sampleSource",
              "pagesSampled",
              "pagesOk",
              "pagesRedirected",
              "pagesBroken",
              "brokenPages",
              "soft404Pages",
              "soft404Rate",
              "missingPageStatus",
              "title",
              "titleLength",
              "metaDescription",
              "descriptionLength",
              "canonical",
              "h1Count",
              "homepageNoindex",
              "lang",
              "hasOpenGraph",
              "structuredDataFound",
              "structuredDataTypes",
              "securityHeadersScore",
              "securityHeadersGrade",
              "securityHeadersMissing",
              "aiCrawlersBlocked",
              "aiCrawlersNamed",
              "hasLlmsTxt",
              "feedFound",
              "feedUrls",
              "sourceUrl",
              "requestsMade"
            ]
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}