{
  "openapi": "3.0.1",
  "info": {
    "title": "Tech Stack Detector: Website Technology & SaaS Lookup",
    "description": "Detect the tech stack behind any list of websites: CMS, ecommerce platform, analytics and ad pixels, marketing and chat tools, frameworks, CDN, hosting and email provider. A BuiltWith and Wappalyzer alternative. Pay per website with findings; websites that fail are not charged.",
    "version": "0.1",
    "x-build-id": "qLl1rB2N6J9FEp1EN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datatools_studio~tech-stack-detector/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datatools_studio-tech-stack-detector",
        "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/datatools_studio~tech-stack-detector/runs": {
      "post": {
        "operationId": "runs-sync-datatools_studio-tech-stack-detector",
        "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/datatools_studio~tech-stack-detector/run-sync": {
      "post": {
        "operationId": "run-sync-datatools_studio-tech-stack-detector",
        "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 URLs to check, one per line, for example <code>example.com</code> or <code>https://shop.example.com</code>. Each website is checked through its homepage (or the exact URL you give) and its public DNS records. Up to 100,000 per run; duplicates are skipped.",
            "items": {
              "type": "string"
            }
          },
          "outputFormat": {
            "title": "Output format",
            "enum": [
              "full",
              "compact"
            ],
            "type": "string",
            "description": "<b>Full</b> gives every detail: versions, confidence, evidence, categories, email setup and DNS facts. <b>Compact</b> gives one short row per website (technology names, categories and email provider), handy for spreadsheets and AI agents.",
            "default": "full"
          },
          "minConfidence": {
            "title": "Minimum confidence",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Only report technologies detected with at least this confidence (1 to 100). Lower values find more, with more false positives.",
            "default": 50
          },
          "categories": {
            "title": "Only these categories",
            "type": "array",
            "description": "Leave empty to get everything. Otherwise only technologies in these categories or groups are returned, for example Ecommerce, Analytics, CMS or Marketing automation.",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "analytics",
                "marketing",
                "sales",
                "ecommerce",
                "cms",
                "advertising",
                "marketing automation",
                "crm",
                "live chat",
                "payment processors",
                "tag managers",
                "cdn",
                "hosting",
                "web servers",
                "javascript frameworks",
                "security",
                "cookie compliance",
                "email",
                "business tools"
              ],
              "enumTitles": [
                "Analytics (group)",
                "Marketing (group)",
                "Sales (group)",
                "Ecommerce",
                "CMS",
                "Advertising",
                "Marketing automation",
                "CRM",
                "Live chat",
                "Payment processors",
                "Tag managers",
                "CDN",
                "Hosting",
                "Web servers",
                "JavaScript frameworks",
                "Security",
                "Cookie compliance",
                "Email",
                "Business tools (group)"
              ]
            }
          },
          "includeDns": {
            "title": "Check DNS records",
            "type": "boolean",
            "description": "Read public DNS records (MX, TXT, SPF, DMARC, NS, CNAME) to find the email provider, email sending services and SaaS tools that verified the domain. Turn off for a faster, page-only check.",
            "default": true
          },
          "monitorChanges": {
            "title": "Report changes since the last run",
            "type": "boolean",
            "description": "Remember each website's technologies in a named key-value store in your own account, and add the technologies added or removed since your previous run. Useful with a schedule.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Storage name for change monitoring",
            "type": "string",
            "description": "Name of the key-value store (in your account) that keeps the last result of each website. Use different names to keep separate watch lists. The Actor creates this storage on the first run and can only use storages it created itself.",
            "default": "tech-stack-monitor"
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Skip the homepage of websites whose robots.txt asks automated tools not to load it. DNS checks still run for those websites.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many websites to check at the same time.",
            "default": 20
          },
          "requestTimeoutSecs": {
            "title": "Page timeout",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for a homepage before giving up.",
            "default": 20
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}