{
  "openapi": "3.0.1",
  "info": {
    "title": "Website SEO Audit & Checker: 0-100 Score + Client Report",
    "description": "SEO audit and website checker in one: a 0-100 score for SEO, speed, security, accessibility and email/DNS health, a prioritized fix list and a white-label HTML report for clients. Audit sites in bulk, no API key needed. Unreachable sites are free.",
    "version": "1.0",
    "x-build-id": "RdwlpecqAeVPsTZzx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pewterdesk~website-audit-report/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pewterdesk-website-audit-report",
        "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/pewterdesk~website-audit-report/runs": {
      "post": {
        "operationId": "runs-sync-pewterdesk-website-audit-report",
        "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/pewterdesk~website-audit-report/run-sync": {
      "post": {
        "operationId": "run-sync-pewterdesk-website-audit-report",
        "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": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "Websites to audit",
            "type": "array",
            "description": "One site per line: domains (acme.com) or URLs (https://www.acme.com/). Each site gets its own scored report. Duplicates and invalid lines are skipped and never charged.",
            "items": {
              "type": "string"
            }
          },
          "maxPagesPerSite": {
            "title": "Pages to sample per site",
            "minimum": 0,
            "maximum": 25,
            "type": "integer",
            "description": "Besides the homepage, this many pages are sampled from the sitemap (spread across site sections) and checked for titles, descriptions, H1s, alt text and status codes. Same price whatever you choose.",
            "default": 10
          },
          "checkBrokenLinks": {
            "title": "Check internal links on the homepage",
            "type": "boolean",
            "description": "HEAD-request internal links found on the homepage to find 404s and server errors.",
            "default": true
          },
          "maxLinksPerSite": {
            "title": "Max links to check per site",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Upper limit on internal links checked per site.",
            "default": 30
          },
          "includeEmailDomainChecks": {
            "title": "Email & domain checks (SPF, DMARC, domain expiry)",
            "type": "boolean",
            "description": "Public DNS and RDAP registry lookups: email spoofing protection, DMARC policy, CAA and domain expiry.",
            "default": true
          },
          "agencyName": {
            "title": "Your agency / brand name",
            "type": "string",
            "description": "Shown as 'Prepared by …' on every HTML report (white-label). Leave empty for an unbranded report."
          },
          "brandColor": {
            "title": "Brand color",
            "pattern": "^(#[0-9a-fA-F]{3,8})?$",
            "type": "string",
            "description": "Hex color for report accents, e.g. #2f6fed."
          },
          "logoUrl": {
            "title": "Logo URL (https)",
            "type": "string",
            "description": "Optional https:// link to your logo, shown in the report header."
          },
          "googleApiKey": {
            "title": "Google API key for PageSpeed Insights (optional)",
            "type": "string",
            "description": "Adds Lighthouse scores and real-user Core Web Vitals (one PageSpeed call per site). Free key, 25,000 requests/day: see README. Without it, performance is scored from fast built-in checks (server response time, compression, render-blocking scripts, page weight)."
          },
          "pageSpeedStrategy": {
            "title": "PageSpeed device",
            "enum": [
              "mobile",
              "desktop"
            ],
            "type": "string",
            "description": "Device used for the Lighthouse run when a Google key is given.",
            "default": "mobile"
          },
          "aiSummary": {
            "title": "Write an AI executive summary (needs your own LLM key)",
            "type": "boolean",
            "description": "Off by default. Every report already includes a rule-based summary and fix list at no extra cost. Turn on to add a client-friendly AI-written summary using your own OpenAI, Anthropic or OpenAI-compatible key. Only scores and the fix list are sent, never page content.",
            "default": false
          },
          "llmProvider": {
            "title": "LLM provider",
            "enum": [
              "openai",
              "anthropic",
              "openai-compatible"
            ],
            "type": "string",
            "description": "Which API your key belongs to. OpenAI-compatible covers OpenRouter, Groq, Together, local servers and similar.",
            "default": "openai"
          },
          "llmApiKey": {
            "title": "LLM API key",
            "type": "string",
            "description": "Your own key. Stored encrypted, never logged or written to the output."
          },
          "llmModel": {
            "title": "Model",
            "type": "string",
            "description": "Optional. Defaults: gpt-4o-mini (OpenAI), claude-3-5-haiku-latest (Anthropic). Required for OpenAI-compatible."
          },
          "llmBaseUrl": {
            "title": "Base URL (OpenAI-compatible only)",
            "type": "string",
            "description": "e.g. https://openrouter.ai/api/v1"
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Skip pages the site's robots.txt disallows. A site whose homepage is disallowed is skipped and not charged.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Sites audited in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Each site uses a handful of polite parallel requests.",
            "default": 3
          },
          "maxSites": {
            "title": "Max sites",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap on how many sites from the list are audited."
          },
          "dnsMode": {
            "title": "DNS resolution",
            "enum": [
              "auto",
              "system",
              "doh"
            ],
            "type": "string",
            "description": "auto = system DNS with DNS-over-HTTPS fallback. Usually leave on auto.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}