{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk Website Audit: 1,000 Sites for $3 (SEO, SSL, DMARC)",
    "description": "Audit 1,000 websites for $3: one row per site with a 0-100 health score, top issues and public contact emails — SEO, SSL expiry, security headers, SPF/DMARC, sitemap. For web design leads and client-site monitoring. $0.003/site, failed sites free. Works via Apify MCP and x402.",
    "version": "0.1",
    "x-build-id": "rJ87NKpUzoucrfgKG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/quanta1810~website-health-audit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-quanta1810-website-health-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/quanta1810~website-health-audit/runs": {
      "post": {
        "operationId": "runs-sync-quanta1810-website-health-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/quanta1810~website-health-audit/run-sync": {
      "post": {
        "operationId": "run-sync-quanta1810-website-health-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": [
          "websites"
        ],
        "properties": {
          "websites": {
            "title": "Websites",
            "type": "array",
            "description": "Domains or homepage URLs, one per line (e.g. \"example.com\" or \"https://www.example.com\"). Duplicates and www/non-www twins are removed. Bare domains start on http:// so the HTTP→HTTPS redirect can be verified. Up to 50,000 sites per run (default 1-hour run timeout ≈ 3,000 sites; raise Timeout in run options for more). Cost: $0.003 per audited site (about $3 per 1,000); unreachable, bot-protected and login-walled sites are free.",
            "items": {
              "type": "string"
            }
          },
          "checkDns": {
            "title": "Check DNS & email security (SPF, DMARC, MX)",
            "type": "boolean",
            "description": "Look up A/AAAA, MX, NS, SPF, DMARC and CAA records for each domain (fills the dns.* columns). No extra cost.",
            "default": true
          },
          "checkSitemap": {
            "title": "Check robots.txt & XML sitemap",
            "type": "boolean",
            "description": "Fetch robots.txt, detect 'Disallow: /' for all crawlers and find the XML sitemap with its URL count (fills the crawl.* columns). No extra cost.",
            "default": true
          },
          "extractContacts": {
            "title": "Collect public contact emails",
            "type": "boolean",
            "description": "Find the contact email addresses the website itself publishes (mailto links and visible text on the homepage; if it lists none, ONE extra request to the contact/about page linked from it). Fills contactEmails (up to 10, role addresses like info@ first) and contactPage. Nothing is guessed, no third-party lookups, no social profiles, no phone numbers. No extra cost. You are responsible for contacting people lawfully (GDPR, CAN-SPAM, local law).",
            "default": true
          },
          "maxSites": {
            "title": "Max sites to audit",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Audit at most this many sites from the list (0 = all, maximum 50,000). Cost cap: each audited site costs $0.003, so 100 sites ≈ $0.30, 1,000 ≈ $3, 10,000 ≈ $30. You can also set \"Max cost per run\" in run options; sites beyond that budget are listed as skipped and not charged.",
            "default": 0
          },
          "monitorMode": {
            "title": "Monitoring mode (report only what changed)",
            "type": "boolean",
            "description": "For weekly / monthly scheduled runs of the same list. The Actor remembers each site's result in a key-value store in YOUR account (\"website-health-audit-monitor\") and on the next run tells you what changed. New or changed sites get the full row plus change = \"new\" / \"changed\" and a changes list (e.g. \"SSL expiry date: 2026-10-26 → 2027-01-24\", \"issues: +NO_DMARC\"); they cost $0.003 like a normal audit. Unchanged sites get a short row with status \"unchanged\" and cost only $0.0005. Blocked and unreachable sites stay free and keep their last remembered result.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the list to remember (letters, digits and dashes). Use a different name for each client or list you monitor, e.g. \"client-acme\". Default: \"default\".",
            "default": "default"
          },
          "includeUnchanged": {
            "title": "List unchanged sites",
            "type": "boolean",
            "description": "Monitoring mode only: add a short row (status \"unchanged\", score, top issues, SSL days left) for sites that did not change, so you can see every site was checked. Turn off to get only new and changed sites in the dataset — unchanged sites are still checked and billed at $0.0005, and counted in the MONITOR_SUMMARY record of the run's key-value store.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Parallel sites",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many websites to audit at the same time (1-50). Also limited by memory: about 1 parallel site per 48 MB, so 10 at the default 512 MB. Raise memory and this value together for big lists.",
            "default": 10
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 3,
            "maximum": 60,
            "type": "integer",
            "description": "Give up on a request after this many seconds (3-60). A site that never answers is reported as unreachable and not charged.",
            "default": 15
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}