{
  "openapi": "3.0.1",
  "info": {
    "title": "Tech Stack Detector - Website CMS, Framework & Analytics",
    "description": "Tech stack detector: paste website URLs, get one row each: CMS (WordPress, Shopify...), frameworks, server/CDN, analytics, with evidence. $0.002 per site, unreachable URLs free. Click Start: the 3 prefilled sites cost $0.006.",
    "version": "0.1",
    "x-build-id": "iJ7fYd2thgpFWjgjo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pennydata~website-tech-stack-detector/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pennydata-website-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/pennydata~website-tech-stack-detector/runs": {
      "post": {
        "operationId": "runs-sync-pennydata-website-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/pennydata~website-tech-stack-detector/run-sync": {
      "post": {
        "operationId": "run-sync-pennydata-website-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": {
          "url": {
            "title": "URL (single)",
            "type": "string",
            "description": "Alias for a single URL; same as putting it in \"urls\"."
          },
          "domains": {
            "title": "Domains (alias)",
            "type": "array",
            "description": "Alias: list of bare domains or URLs, analyzed together with \"urls\".",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "URLs",
            "type": "array",
            "description": "Public http(s) pages to analyze (bare domains like example.com are accepted). Aliases: \"url\" (single) and \"domains\" (list) are also accepted.",
            "default": [
              {
                "url": "https://wordpress.org"
              },
              {
                "url": "https://www.shopify.com"
              },
              {
                "url": "https://github.com"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "startUrls": {
            "title": "Start URLs (alias)",
            "type": "array",
            "description": "Alias for \"urls\": request-list objects ({\"url\": ...}) or plain strings, analyzed together with \"urls\".",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "websites": {
            "title": "Websites (alias)",
            "type": "array",
            "description": "Alias: list of websites (bare domains or URLs), analyzed together with \"urls\".",
            "items": {
              "type": "string"
            }
          },
          "targetUrls": {
            "title": "Target URLs (alias)",
            "type": "array",
            "description": "Alias for \"urls\" (same field name as other tech-stack actors): bare domains or URLs, analyzed together with \"urls\".",
            "items": {
              "type": "string"
            }
          },
          "compareToDatasetId": {
            "title": "Compare to previous dataset ID",
            "type": "string",
            "description": "Optional. Dataset ID of an earlier run of this Actor. Each site then gets added[] and removed[] technologies versus that run (previousFound=false if the site was not in it). Use with a weekly schedule to monitor competitor tech changes."
          },
          "checkCves": {
            "title": "Check known CVEs (NVD)",
            "type": "boolean",
            "description": "For technologies whose version the site exposes (WordPress, Drupal, Joomla, jQuery, Bootstrap, Nginx, Apache, PHP), look up known CVEs in the free NIST NVD API and add cves, cveCount and maxSeverity to each item. Same price per site. Slower: NVD allows about 5 requests per 30 s without a key.",
            "default": false
          },
          "nvdApiKey": {
            "title": "NVD API key (optional)",
            "type": "string",
            "description": "Optional free key from nvd.nist.gov/developers/request-an-api-key; raises the NVD rate limit about 10x."
          },
          "respectRobotsTxt": {
            "title": "Respect robots.txt",
            "type": "boolean",
            "description": "Skip URLs disallowed for all bots in the site's robots.txt (skipped URLs are not charged).",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of sites analyzed in parallel (1-20).",
            "default": 5
          },
          "timeoutSecs": {
            "title": "Request timeout (s)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Per-request timeout in seconds (5-60). Alias: \"timeout_seconds\".",
            "default": 20
          },
          "timeout_seconds": {
            "title": "Timeout (alias)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Alias for \"timeoutSecs\"."
          },
          "verify_ssl": {
            "title": "Verify SSL (accepted, ignored)",
            "type": "boolean",
            "description": "Accepted so inputs saved for motivational_nickel/website-technology-detector run unchanged. Not used."
          },
          "navigationTimeoutSecs": {
            "title": "Navigation timeout (alias)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Alias for \"timeoutSecs\", accepted so inputs saved for magicfingers/techstack-detector run unchanged. \"timeoutSecs\" wins when both are set."
          },
          "waitForSecs": {
            "title": "waitForSecs (accepted, ignored)",
            "type": "integer",
            "description": "Accepted so inputs saved for magicfingers/techstack-detector run unchanged. Not used: headers, cookies, DNS and page content are always checked."
          },
          "checkHeaders": {
            "title": "checkHeaders (accepted, ignored)",
            "type": "boolean",
            "description": "Accepted so inputs saved for magicfingers/techstack-detector run unchanged. Not used: headers, cookies, DNS and page content are always checked."
          },
          "checkCookies": {
            "title": "checkCookies (accepted, ignored)",
            "type": "boolean",
            "description": "Accepted so inputs saved for magicfingers/techstack-detector run unchanged. Not used: headers, cookies, DNS and page content are always checked."
          },
          "checkDns": {
            "title": "checkDns (accepted, ignored)",
            "type": "boolean",
            "description": "Accepted so inputs saved for magicfingers/techstack-detector run unchanged. Not used: headers, cookies, DNS and page content are always checked."
          },
          "checkRobotsTxt": {
            "title": "checkRobotsTxt (accepted, ignored)",
            "type": "boolean",
            "description": "Accepted so inputs saved for magicfingers/techstack-detector run unchanged. Not used: headers, cookies, DNS and page content are always checked."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration (accepted, ignored)",
            "type": "object",
            "description": "Accepted so inputs saved for similar tech-stack Actors run unchanged. Not used."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}