{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Technology Scraper - Tech Stack, CMS & Analytics Lookup",
    "description": "Detect any website's technology stack for $1.90 per 1,000 sites: CMS, ecommerce, analytics, ads, tag managers, frameworks, CDN, hosting, payments and email services, with versions, confidence and evidence. 7,600+ fingerprints, real browser render, DNS and TLS signals, change monitor.",
    "version": "0.1",
    "x-build-id": "gl8rraOdDTRuDauTw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/topapi~website-technology-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-topapi-website-technology-scraper",
        "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/topapi~website-technology-scraper/runs": {
      "post": {
        "operationId": "runs-sync-topapi-website-technology-scraper",
        "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/topapi~website-technology-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-topapi-website-technology-scraper",
        "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": "Websites",
            "type": "array",
            "description": "Domains or URLs, one per line, e.g. \"shopify.com\" or \"https://example.com/pricing\". Empty (and no file) runs a 3-site demo. A file that fails or has no domain fails the run, unbilled.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Website URLs (or a file)",
            "type": "array",
            "description": "Optional. The same as Websites, in URL form, or a link to a text/CSV file with one domain or URL per line.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "renderJavaScript": {
            "title": "Browser render",
            "enum": [
              "auto",
              "always",
              "never"
            ],
            "type": "string",
            "description": "Headless Chrome adds what JavaScript loads (globals, tags, pixels). Auto: pages that need it. Always: every page, but a cost limit can skip renders on long heavy lists (renderedWith: http).",
            "default": "auto"
          },
          "maxPagesPerDomain": {
            "title": "Pages per website",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Homepage plus up to N-1 same-site pages (pricing, checkout, blog, careers); contact, imprint and directions pages are never picked, in any common language. Each is charged as an extra page.",
            "default": 1
          },
          "includeDns": {
            "title": "DNS signals",
            "type": "boolean",
            "description": "Read the domain's DNS (MX, TXT, NS, SOA, CNAME) to detect email, DNS and SaaS services such as Google Workspace, Microsoft 365, SendGrid or Zendesk.",
            "default": true
          },
          "includeTls": {
            "title": "TLS certificate",
            "type": "boolean",
            "description": "Read the TLS certificate (issuer, validity) and detect the certificate authority.",
            "default": true
          },
          "renderWaitSecs": {
            "title": "Wait after load (seconds)",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "How long the browser waits after the page loads so tag managers can inject their tags (0-15).",
            "default": 3
          },
          "categories": {
            "title": "Only these categories",
            "type": "array",
            "description": "Keep only technologies in these categories, e.g. \"CMS\", \"Analytics\", \"Ecommerce\", \"Tag managers\". Empty = all. Monitor mode shows only changes in these categories.",
            "items": {
              "type": "string"
            }
          },
          "onlyTechnologies": {
            "title": "Check for technologies",
            "type": "array",
            "description": "\"Does it use X?\" mode: each row gets matches (true/false) and matchedTechnologies, e.g. \"Shopify\", \"HubSpot\", \"Salesforce\".",
            "items": {
              "type": "string"
            }
          },
          "onlyMatchingSites": {
            "title": "Only websites that match",
            "type": "boolean",
            "description": "With Check for technologies: return only websites that use at least one of them.",
            "default": false
          },
          "minConfidence": {
            "title": "Minimum confidence",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Drop technologies detected with a lower confidence (0-100). 0 keeps everything. Monitor mode shows only changes that pass it.",
            "default": 0
          },
          "includeEvidence": {
            "title": "Evidence",
            "type": "boolean",
            "description": "For each technology, the signals that matched (header, script URL, global variable, DOM selector, DNS record type) and the matched text.",
            "default": true
          },
          "includeSecurityHeaders": {
            "title": "Security headers",
            "type": "boolean",
            "description": "HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy and cross-origin headers of the homepage.",
            "default": true
          },
          "includeRawSignals": {
            "title": "Raw signals",
            "type": "boolean",
            "description": "Add the script URLs, XHR hosts, response headers and cookie names seen on the homepage (for audits). Store ids such as a Shopify shop id are removed.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode",
            "type": "boolean",
            "description": "Only websites whose stack changed since the last run (added, removed, versionChanged). A removal needs 2 runs that miss it (3 renders if browser-only). Changing a filter is not a change.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that remembers each website's last stack. Use one name per list you monitor.",
            "default": "website-technology-monitor"
          },
          "maxResults": {
            "title": "Max websites",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many delivered websites. 0 = analyze every website in the list.",
            "default": 0
          },
          "compact": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Core fields only (names, versions, categories, primary stack), sized for AI agents and MCP.",
            "default": false
          },
          "compareMode": {
            "title": "Compare websites",
            "type": "boolean",
            "description": "Also save a COMPARISON record: technologies common to all websites, shared ones and those unique to each website.",
            "default": false
          },
          "includeFailedSites": {
            "title": "Rows for failed websites",
            "type": "boolean",
            "description": "Add a free row (status blocked / unreachable / notFound ...) for websites that could not be analyzed, so every valid, distinct website gets a row.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: websites are fetched directly and a host that refuses is retried through the Apify proxy. Pick RESIDENTIAL for sites that block datacenter IPs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Parallel websites",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many websites are analyzed at the same time (1-50, capped at 8 per GB of memory: 16 at the default 2 GB).",
            "default": 10
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Time limit for each HTTP request (5-120).",
            "default": 20
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Follow robots.txt (User-agent: *): a disallowed website (or redirect) gets a free robotsDisallowed row; disallowed extra pages are never fetched or billed. No readable robots.txt = all allowed.",
            "default": false
          },
          "ignoreHttpsErrors": {
            "title": "Ignore HTTPS errors",
            "type": "boolean",
            "description": "Analyze websites with invalid or expired certificates.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}