{
  "openapi": "3.0.1",
  "info": {
    "title": "Ultimate SEO Audit & Website Analyzer",
    "description": "Renders every page in Chromium and audits meta tags, headings, content, technical SEO, structured data, lab performance, links, images, accessibility (axe-core), mobile, hreflang and AI-search visibility. Traceable scores, site action plan, run-to-run history, HTML/PDF/CSV reports.",
    "version": "0.1",
    "x-build-id": "h8CUhJvUfcdsSkQn7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/badr_xba~ultimate-seo-audit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-badr_xba-ultimate-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/badr_xba~ultimate-seo-audit/runs": {
      "post": {
        "operationId": "runs-sync-badr_xba-ultimate-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/badr_xba~ultimate-seo-audit/run-sync": {
      "post": {
        "operationId": "run-sync-badr_xba-ultimate-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",
        "properties": {
          "startUrls": {
            "title": "Websites or pages to audit",
            "type": "array",
            "description": "One or more URLs. Each website (host) gets its own report; several websites are compared side by side. Leave empty for a quick demo audit of books.toscrape.com.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "crawlPages": {
            "title": "Crawl the website",
            "type": "boolean",
            "description": "On: follow internal links from the start URLs (up to the page limit). Off: audit only the start URLs.",
            "default": true
          },
          "maxPages": {
            "title": "Max pages per website",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Pages audited (and charged) per website. Robots-blocked, excluded, duplicate, failed, file and turned-away URLs are never charged.",
            "default": 5
          },
          "maxDepth": {
            "title": "Max click depth",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "How many clicks away from a start URL the crawler may go (0 = start URLs only).",
            "default": 5
          },
          "seedFromSitemap": {
            "title": "Start from the XML sitemap",
            "type": "boolean",
            "description": "Also queue the URLs listed in the sitemap(s), up to the page limit. Sitemaps are always read for orphan-page and hreflang checks.",
            "default": false
          },
          "includeSubdomains": {
            "title": "Include subdomains",
            "type": "boolean",
            "description": "Treat blog.example.com and shop.example.com as part of example.com.",
            "default": false
          },
          "includeUrlPatterns": {
            "title": "Only URLs matching",
            "type": "array",
            "description": "Optional glob (e.g. /blog/**) or /regular expression/. When set, only matching URLs are audited.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeUrlPatterns": {
            "title": "Skip URLs matching",
            "type": "array",
            "description": "Glob (e.g. /cart/**, **?sort=*) or /regular expression/. Matching URLs are never audited.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Recommended. Only switch off for your own site.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Parallel pages",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Pages rendered at the same time. Each needs about 300-500 MB of memory. Requests to each host are also spaced politely.",
            "default": 3
          },
          "pageTimeoutSecs": {
            "title": "Page load timeout (seconds)",
            "minimum": 10,
            "maximum": 180,
            "type": "integer",
            "description": "How long to wait for one page to load before it is reported as failed (not charged).",
            "default": 45
          },
          "checkExternalLinks": {
            "title": "Check external links",
            "type": "boolean",
            "description": "Check links to other websites too (each unique URL once per run).",
            "default": true
          },
          "maxLinkChecksPerSite": {
            "title": "Max link/image checks per website",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "Unique URLs (links, images, canonical and hreflang targets) checked per website. 0 = no link checks.",
            "default": 1000
          },
          "maxImagesPerPage": {
            "title": "Max images analysed per page",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How many images per page are checked (size, format, alt text). 0 = skip image checks.",
            "default": 100
          },
          "soft404Probe": {
            "title": "Soft-404 probe",
            "type": "boolean",
            "description": "Request one random non-existent URL per website to learn what a missing page looks like.",
            "default": true
          },
          "auditMeta": {
            "title": "Meta tags",
            "type": "boolean",
            "description": "Title, meta description, Open Graph, Twitter cards, canonical, robots meta, charset.",
            "default": true
          },
          "auditHeadings": {
            "title": "Headings",
            "type": "boolean",
            "description": "Heading tree: missing or multiple H1, skipped levels, H1 vs title.",
            "default": true
          },
          "auditContent": {
            "title": "Content",
            "type": "boolean",
            "description": "Word count, sentences, reading ease, top keywords, duplicate and near-duplicate content.",
            "default": true
          },
          "auditTechnical": {
            "title": "Technical SEO",
            "type": "boolean",
            "description": "Status codes, HTTPS, redirects, indexability, robots.txt, sitemap, soft-404, JavaScript dependence.",
            "default": true
          },
          "auditSchema": {
            "title": "Structured data",
            "type": "boolean",
            "description": "JSON-LD, microdata and RDFa: parse errors and required properties for rich results.",
            "default": true
          },
          "auditPerformance": {
            "title": "Performance (lab)",
            "type": "boolean",
            "description": "Lab timings from one page load (LCP, CLS, FCP, TTFB, TBT). Approximate, not real-user data.",
            "default": true
          },
          "auditLinks": {
            "title": "Links",
            "type": "boolean",
            "description": "Internal and external links, nofollow, redirects and broken links (checked once per run).",
            "default": true
          },
          "auditImages": {
            "title": "Images",
            "type": "boolean",
            "description": "Alt text, dimensions, file size, format and broken images.",
            "default": true
          },
          "auditAccessibility": {
            "title": "Accessibility (axe-core)",
            "type": "boolean",
            "description": "Automated WCAG 2.x A/AA checks with axe-core. Does not prove conformance.",
            "default": true
          },
          "auditMobile": {
            "title": "Mobile",
            "type": "boolean",
            "description": "Viewport, layout at 375 px, horizontal scrolling, small tap targets and text.",
            "default": true
          },
          "auditInternational": {
            "title": "International (hreflang)",
            "type": "boolean",
            "description": "hreflang from HTML, HTTP headers and sitemaps: codes, return links, x-default.",
            "default": true
          },
          "auditAiVisibility": {
            "title": "AI search visibility",
            "type": "boolean",
            "description": "Which AI search and training bots robots.txt allows, plus llms.txt (information only).",
            "default": true
          },
          "generateHtmlReport": {
            "title": "HTML report",
            "type": "boolean",
            "description": "Save a visual HTML report (REPORT) in the key-value store. While the crawl runs, REPORT is updated at most once a minute and shows the progress.",
            "default": true
          },
          "pageScreenshots": {
            "title": "Page screenshots",
            "type": "boolean",
            "description": "Save a small above-the-fold JPEG of each audited page (desktop, plus phone when the mobile check runs) from the browser render the audit already does, and show it in the report. No extra charge; the images are stored in the run's key-value store.",
            "default": true
          },
          "generatePdfReport": {
            "title": "PDF report",
            "type": "boolean",
            "description": "Save a PDF version of the report (REPORT_PDF). Adds a few seconds.",
            "default": true
          },
          "useHistory": {
            "title": "Compare with previous runs",
            "type": "boolean",
            "description": "Keep a snapshot per website in a named key-value store and report new, fixed and regressed issues on the next run.",
            "default": true
          },
          "historyStoreName": {
            "title": "History store name",
            "type": "string",
            "description": "Named key-value store used for history (letters, digits and -).",
            "default": "seo-audit-history"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}