{
  "openapi": "3.0.1",
  "info": {
    "title": "Tech Stack Lookup API - Detect Website Technologies",
    "description": "Detect the technologies behind any website: CMS, ecommerce platform, analytics, ads, payments, frameworks and more, with versions, categories and last confirmed dates. Optionally add company details, verified emails, phone numbers, social profiles and traffic signals. Bring your own key.",
    "version": "0.1",
    "x-build-id": "EgpihyhS7809M2Wq6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~tech-stack-lookup-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-tech-stack-lookup-api",
        "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/nabeelbaghoor~tech-stack-lookup-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-tech-stack-lookup-api",
        "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/nabeelbaghoor~tech-stack-lookup-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-tech-stack-lookup-api",
        "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": {
          "apiKey": {
            "title": "API key",
            "type": "string",
            "description": "Your own account's API key for this provider, created in its dashboard. Bring your own key: nothing is shared between runs and the key is never written to the dataset."
          },
          "urls": {
            "title": "Websites",
            "type": "array",
            "description": "Websites to look up, one per line. A bare domain works and is given a scheme for you, so a column pasted out of a CRM is fine. Ten websites go into each request on the default deep scan.",
            "items": {
              "type": "string"
            }
          },
          "sets": {
            "title": "Extra fields",
            "type": "array",
            "description": "Additional field sets to return alongside the technologies. Company adds name, industry, size, type and founding year. Contact adds phone numbers, emails, verified emails and WhatsApp numbers. Social adds LinkedIn, X, Facebook, Instagram, GitHub, TikTok, YouTube and Pinterest handles. Signals adds an estimated technology spend band and a traffic level.",
            "items": {
              "type": "string",
              "enum": [
                "meta",
                "company",
                "contact",
                "social",
                "signals",
                "locale",
                "security",
                "keywords",
                "events"
              ]
            },
            "default": []
          },
          "live": {
            "title": "Scan live",
            "type": "boolean",
            "description": "Scan the website now instead of reading the provider's cached record. Slower, more expensive in credits, and used with a shallow scan because a live deep scan is only completed through a callback URL on a server of your own, which an actor run cannot host.",
            "default": false
          },
          "recursive": {
            "title": "Deep scan",
            "type": "boolean",
            "description": "Follow internal links to index several pages of a site, which finds more technologies. On by default and the only mode that takes ten websites per request. Turning it off scans the homepage only, one website at a time, and always answers within the same request.",
            "default": true
          },
          "denoise": {
            "title": "Exclude low confidence results",
            "type": "boolean",
            "description": "Leave out detections the provider is not confident about. On by default. Turning it off returns more technologies per site and more false positives with them.",
            "default": true
          },
          "maxAgeMonths": {
            "title": "Maximum age of a detection",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Only return technologies verified within this many months. The provider defaults to 2. Use 1 for the freshest and fewest results, or a higher number for more results that are likelier to include technologies a site has since dropped."
          },
          "minAgeMonths": {
            "title": "Minimum age of a detection",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Only return technologies verified at least this many months ago. Used with a higher maximum age and monthly grouping turned on, this is how you read a site's history rather than its present."
          },
          "squash": {
            "title": "Merge monthly results",
            "type": "boolean",
            "description": "Merge results from several months into one set, which is what you want for a current snapshot. Turning it off groups results by month, which is how you see when a technology appeared or disappeared.",
            "default": true
          },
          "crawlRetries": {
            "title": "Times to ask again while crawling",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "A website the provider has never indexed starts a crawl and answers with no technologies. Repeating the request inside the hour is free, and the crawl usually finishes within minutes, so this run comes back for those websites this many times before writing them off.",
            "default": 2
          },
          "crawlWaitMinutes": {
            "title": "Minutes to wait between attempts",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "How long to wait before asking again for websites that are still being crawled. The provider suggests five minutes, and a crawl can take up to fifteen.",
            "default": 5
          },
          "skipEmptyResults": {
            "title": "Only keep websites with technologies",
            "type": "boolean",
            "description": "Leave websites with no detected technologies out of the dataset. They are never charged for either way, so this is about the shape of your output.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum rows",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many rows. One website produces one row, so this is a ceiling on the websites a run will store.",
            "default": 100
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "How fast this actor calls the provider. The documented limit is ten requests a second, so this is capped at 300 a minute, which leaves headroom on an account that is also serving your own application.",
            "default": 120
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}