{
  "openapi": "3.0.1",
  "info": {
    "title": "Tech Stack Detector: Wappalyzer & BuiltWith Alt, CSV or Sheet",
    "description": "Wappalyzer and BuiltWith alternative: detects Shopify, WordPress, CMS, analytics, marketing, payments and email hosting behind every website in an Apify dataset, CSV, Excel or Google Sheet. 7,600+ technologies. Inputs: datasetId or fileUrl, websiteField. Charged per site. Agent-ready: x402, MCP.",
    "version": "0.1",
    "x-build-id": "ocwkQ9tTwJTCoi369"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nerolabs~tech-stack-detector/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nerolabs-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/nerolabs~tech-stack-detector/runs": {
      "post": {
        "operationId": "runs-sync-nerolabs-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/nerolabs~tech-stack-detector/run-sync": {
      "post": {
        "operationId": "run-sync-nerolabs-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",
        "properties": {
          "datasetId": {
            "title": "Dataset",
            "type": "string",
            "description": "An Apify dataset whose rows each hold a website or domain. Use the picker so the run is allowed to read it. Leave empty to use a file URL or inline data instead."
          },
          "fileUrl": {
            "title": "File URL (CSV, Excel, JSON or Google Sheet)",
            "type": "string",
            "description": "A public link to a CSV, TSV, Excel (.xlsx), JSON or JSON Lines file, or a Google Sheet shared as 'anyone with the link'. Used when no dataset is set."
          },
          "data": {
            "title": "Data (inline)",
            "type": "array",
            "description": "Rows as a JSON array, each with a website or domain field. Used when neither a dataset nor a file URL is set."
          },
          "fileFormat": {
            "title": "File format",
            "enum": [
              "auto",
              "csv",
              "tsv",
              "json",
              "jsonl",
              "xlsx"
            ],
            "type": "string",
            "description": "How to read the file URL. 'Detect automatically' works from the extension, the content type and the first bytes.",
            "default": "auto"
          },
          "websiteField": {
            "title": "Website field",
            "type": "string",
            "description": "The column holding each company's website or domain, for example 'website' or 'domain'. Leave empty to detect it automatically. Full URLs, bare domains and even an email address all work."
          },
          "technologies": {
            "title": "Technologies to look for",
            "type": "array",
            "description": "Exact technology names, for example 'Shopify', 'WordPress', 'WooCommerce', 'HubSpot', 'Klaviyo', 'Google Workspace' or 'Microsoft 365'. Matching ignores case. A name that is not in the fingerprint set is reported with suggestions and ignored.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories to look for",
            "type": "array",
            "description": "Match any technology in these categories, for example 'Ecommerce' or 'Marketing automation'.",
            "items": {
              "type": "string",
              "enum": [
                "A/B Testing",
                "Accessibility",
                "Accounting",
                "Advertising",
                "Affiliate programs",
                "Analytics",
                "Appointment scheduling",
                "Artificial Intelligence",
                "Augmented reality",
                "Authentication",
                "Blogs",
                "Browser fingerprinting",
                "Buy now pay later",
                "Caching",
                "Cart abandonment",
                "CDN",
                "CI",
                "CMS",
                "Comment systems",
                "Containers",
                "Content curation",
                "Control systems",
                "Cookie compliance",
                "CRM",
                "Cross border ecommerce",
                "Cryptominers",
                "Customer data platform",
                "Database managers",
                "Databases",
                "Development",
                "Digital asset management",
                "DMS",
                "Documentation",
                "Domain parking",
                "Drupal themes",
                "Ecommerce",
                "Ecommerce frontends",
                "Editors",
                "Email",
                "Feature management",
                "Feed readers",
                "Font scripts",
                "Form builders",
                "Fulfilment",
                "Fundraising & donations",
                "Geolocation",
                "Hosting",
                "Hosting panels",
                "IaaS",
                "Issue trackers",
                "JavaScript frameworks",
                "JavaScript graphics",
                "JavaScript libraries",
                "Live chat",
                "Livestreaming",
                "LMS",
                "Load balancers",
                "Loyalty & rewards",
                "Maps",
                "Marketing automation",
                "Media servers",
                "Message boards",
                "Miscellaneous",
                "Mobile frameworks",
                "Network devices",
                "Network storage",
                "Operating systems",
                "PaaS",
                "Page builders",
                "Payment processors",
                "Performance",
                "Personalisation",
                "Photo galleries",
                "Programming languages",
                "Recruitment & staffing",
                "Referral marketing",
                "Remote access",
                "Reservations & delivery",
                "Retargeting",
                "Returns",
                "Reverse proxies",
                "Reviews",
                "Rich text editors",
                "RUM",
                "Search engines",
                "Security",
                "Segmentation",
                "SEO",
                "Shipping carriers",
                "Shopify apps",
                "Shopify themes",
                "SSL/TLS certificate authorities",
                "Static site generator",
                "Surveys",
                "Tag managers",
                "Ticket booking",
                "Translation",
                "UI frameworks",
                "User onboarding",
                "Video players",
                "Web frameworks",
                "Web server extensions",
                "Web servers",
                "Webcams",
                "Webmail",
                "Widgets",
                "Wikis",
                "WordPress plugins",
                "WordPress themes"
              ]
            }
          },
          "matchMode": {
            "title": "Match",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "Whether a site must use any one of the listed technologies and categories, or all of them.",
            "default": "any"
          },
          "keep": {
            "title": "Rows to keep",
            "enum": [
              "all",
              "matching",
              "detected",
              "problems"
            ],
            "type": "string",
            "description": "Which rows to write out. Every row is still checked and every analysed site is still charged; this only controls what is returned.",
            "default": "all"
          },
          "minConfidence": {
            "title": "Minimum confidence (0 to 100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Drop detections below this confidence. Each technology comes with a confidence score; one seen only inside an inline loader script scores 75, and implied technologies inherit a lower score.",
            "default": 0
          },
          "checkDns": {
            "title": "Check DNS records",
            "type": "boolean",
            "description": "ON by default. Reads the domain's MX, TXT, NS and SOA records, which is how email hosting (Google Workspace, Microsoft 365), email sending services and DNS providers are detected, and which services the company has verified its domain with. No extra charge.",
            "default": true
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "ON by default. A site whose robots.txt disallows its homepage for automated agents is reported as 'disallowed_by_robots' and not charged.",
            "default": true
          },
          "retryBlockedWithProxy": {
            "title": "Retry blocked sites through a residential proxy",
            "type": "boolean",
            "description": "OFF by default. Large brands often refuse ordinary requests. When on, a blocked site is retried once through Apify's residential proxy; each site that then succeeds costs one extra 'residential retry' event on top of the normal site charge. A retry that still fails costs nothing.",
            "default": false
          },
          "concurrency": {
            "title": "Websites at once",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many websites are checked in parallel.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for a homepage before reporting the site as unreachable.",
            "default": 20
          },
          "exportFormats": {
            "title": "Also export as a file",
            "type": "array",
            "description": "Also write the results as a downloadable CSV and/or Excel file, with a public link in the run summary.",
            "items": {
              "type": "string",
              "enum": [
                "csv",
                "xlsx"
              ],
              "enumTitles": [
                "CSV",
                "Excel (.xlsx)"
              ]
            },
            "default": []
          },
          "outputDatasetName": {
            "title": "Also append to a named dataset",
            "type": "string",
            "description": "Optional. The results are also appended to this named dataset, so repeated runs build up one list. Not charged again."
          },
          "webhookUrl": {
            "title": "Webhook URL (optional)",
            "type": "string",
            "description": "Optional. When the run finishes, a JSON summary (counts, the most common technologies, download links) is POSTed here, for Zapier, Make, n8n, Slack or your own API."
          },
          "maxItems": {
            "title": "Maximum websites",
            "minimum": 1,
            "type": "integer",
            "description": "Check at most this many rows. Leave empty to check them all (up to 50,000 per run)."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}