{
  "openapi": "3.0.1",
  "info": {
    "title": "Website Technology & Tech Stack Detector: BuiltWith Alternative",
    "description": "Website technology detector and tech stack lookup for any list of sites, a Wappalyzer and BuiltWith alternative: CMS, shop system (Shopify, Shopware, WooCommerce), analytics, consent manager, CDN and frameworks, plus email provider and SaaS from DNS, and GDPR signals. Weekly change monitor.",
    "version": "0.1",
    "x-build-id": "j7a1XD00yFGWRZVe5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lindenwerk~tech-stack-detector/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lindenwerk-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/lindenwerk~tech-stack-detector/runs": {
      "post": {
        "operationId": "runs-sync-lindenwerk-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/lindenwerk~tech-stack-detector/run-sync": {
      "post": {
        "operationId": "run-sync-lindenwerk-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": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "Websites",
            "type": "array",
            "description": "Domains or URLs to analyse, one per line (example.de, www.example.com or https://example.com/shop/). Commas and spaces also separate entries. Duplicates and www/non-www variants are merged. Only public websites on ports 80/443; IP addresses and internal hostnames are refused.",
            "items": {
              "type": "string"
            }
          },
          "includeDns": {
            "title": "Include DNS analysis",
            "type": "boolean",
            "description": "Look up MX, SPF, DMARC, NS, the www CNAME and TXT verification records. Reveals the email provider (Google Workspace, Microsoft 365 ...), email sending services, DNS/hosting and SaaS tools verified on the domain (Atlassian, HubSpot, Zoom ...), even when the website blocks bots. Only the record type / vendor is reported, never the secret token values.",
            "default": true
          },
          "includeGdprSignals": {
            "title": "Include GDPR / privacy signals",
            "type": "boolean",
            "description": "Consent manager detected, trackers that are executable in the HTML before consent, Google Fonts loaded from Google, YouTube embeds without youtube-nocookie, Google Maps embeds, imprint and privacy-policy links, third-party hosts. Heuristic signals from the first HTML response, not legal advice.",
            "default": true
          },
          "includeSecurityHeaders": {
            "title": "Include security headers",
            "type": "boolean",
            "description": "HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy and HTTPS, plus a simple score (0-7).",
            "default": true
          },
          "includeEvidence": {
            "title": "Include evidence",
            "type": "boolean",
            "description": "For every technology, show up to three short snippets that triggered the detection (header, script URL, DNS record ...). Turn off for smaller output.",
            "default": true
          },
          "categories": {
            "title": "Only these categories",
            "uniqueItems": true,
            "type": "array",
            "description": "Leave empty for all categories. Example: CMS + Ecommerce + Consent management for a shop-system lead list.",
            "items": {
              "type": "string",
              "enum": [
                "A/B testing",
                "AI",
                "Accessibility",
                "Advertising",
                "Affiliate",
                "Analytics",
                "CDN",
                "CMS",
                "CRM",
                "Caching",
                "Captcha",
                "Chatbot",
                "Collaboration",
                "Consent management",
                "Customer data platform",
                "Customer support",
                "DNS hosting",
                "Developer tools",
                "Ecommerce",
                "Email marketing",
                "Email provider",
                "Email security",
                "Email sending",
                "Fonts",
                "Forms",
                "Hosting",
                "JavaScript framework",
                "JavaScript library",
                "Live chat",
                "Maps",
                "Marketing automation",
                "Monitoring",
                "Page builder",
                "Payments",
                "Programming language",
                "Push notifications",
                "Recruiting / ATS",
                "Reviews",
                "SEO",
                "SSL certificate authority",
                "SaaS (DNS verified)",
                "Scheduling",
                "Search",
                "Security",
                "Session recording",
                "Static site generator",
                "Tag manager",
                "Translation",
                "UI framework",
                "Video",
                "Web framework",
                "Web server",
                "Website builder",
                "Widgets"
              ]
            }
          },
          "minConfidence": {
            "title": "Minimum confidence",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Drop detections below this confidence (0-100). Meta generator tags = 100, headers/DNS = 95, script URLs = 90, cookies/resource URLs = 85, links = 80, HTML snippets = 75, implied = 60; +5 for every additional independent source.",
            "default": 0
          },
          "monitorKey": {
            "title": "Monitor key (change tracking)",
            "type": "string",
            "description": "Set a name (e.g. \"competitors\") and schedule the run weekly: every row then gets \"changes\" (technologies added/removed since the previous run with the same key). State is kept in the named key-value store \"tech-stack-monitor\"."
          },
          "onlyChanged": {
            "title": "Only output changed sites",
            "type": "boolean",
            "description": "With a monitor key: skip sites whose stack did not change (they are not charged). First runs always output everything.",
            "default": false
          },
          "maxSites": {
            "title": "Max sites",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Safety limit on the number of sites per run. The run also stops cleanly at your maximum charge.",
            "default": 1000
          },
          "maxConcurrency": {
            "title": "Parallel sites",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many websites are analysed at the same time. Each site gets one robots.txt and one page request.",
            "default": 20
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Timeout per HTTP request. Slow or unreachable sites are reported as timeout/unreachable and are free.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}