{
  "openapi": "3.0.1",
  "info": {
    "title": "Company Tech Stack API",
    "description": "Detect any company's tech stack and hiring footprint from its public ATS job board. 80+ tools across cloud, data, AI and business systems.",
    "version": "1.0",
    "x-build-id": "XAek8yBqp9hH2pyuV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/spool~company-tech-stack-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-spool-company-tech-stack-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/spool~company-tech-stack-api/runs": {
      "post": {
        "operationId": "runs-sync-spool-company-tech-stack-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/spool~company-tech-stack-api/run-sync": {
      "post": {
        "operationId": "run-sync-spool-company-tech-stack-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": {
          "discoverFrom": {
            "title": "1. Discover companies automatically",
            "enum": [
              "none",
              "ycombinator",
              "hackernews",
              "both"
            ],
            "type": "string",
            "description": "**This is what makes it a search rather than a lookup.**\n\nNo applicant tracking system publishes a directory, so normally you can only look up companies you can already name. Two public directories get around that:\n\n• **Y Combinator** — 6,202 companies across 59 industries, 335 tags and 50 batches. Heavily Greenhouse and Ashby.\n• **Hacker News** — the monthly *Ask HN: Who is hiring?* thread. About 240 companies each month, and **~95% of them are not YC**, which is the half of the market YC cannot reach.\n\nPick a source, filter it, and get back only the companies whose tech stack matches.",
            "default": "none"
          },
          "ycIndustries": {
            "title": "YC: industries",
            "type": "array",
            "description": "Leave empty for all 59. Type one per line — the big ones, with company counts:\n\n`b2b` (3,158) · `consumer` (884) · `healthcare` (697) · `fintech` (658) · `engineering-product-and-design` (620) · `industrials` (458) · `infrastructure` (321) · `productivity` (230) · `marketing` (169) · `real-estate-and-construction` (162) · `operations` (152) · `manufacturing-and-robotics` (145) · `healthcare-it` (141) · `finance-and-accounting` (138) · `supply-chain-and-logistics` (138) · `sales` (135)\n\nSeveral industries are combined with OR. An unknown name is reported in the log rather than silently ignored.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ycTags": {
            "title": "YC: tags",
            "type": "array",
            "description": "Far finer than industries — 335 available. Type one per line:\n\n`saas` (1,097) · `artificial-intelligence` (998) · `ai` (889) · `fintech` (705) · `developer-tools` (548) · `marketplace` (307) · `generative-ai` (255) · `machine-learning` (236) · `analytics` (186) · `health-tech` (173) · `open-source` (170) · `productivity` (168) · `education` (164) · `ai-assistant` (161) · `hardware` (160) · `biotech` (148) · `payments` (146)\n\n**Tags and industries combine with AND.** Industry `b2b` plus tag `ai` gives B2B companies that are also tagged AI — 611 of them, 212 hiring.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ycBatches": {
            "title": "YC: batches",
            "type": "array",
            "description": "One per line, as `winter-2024`, `summer-2023`, `winter-2022`. 50 batches are available. Leave empty for all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "ycStages": {
            "title": "YC: stage",
            "type": "array",
            "description": "Early (5,116 companies) or Growth (1,086). Leave empty for both.",
            "items": {
              "type": "string",
              "enum": [
                "Early",
                "Growth"
              ]
            },
            "default": []
          },
          "ycRegions": {
            "title": "YC: regions",
            "type": "array",
            "description": "Leave empty for everywhere. A company can sit in several — `Remote` and `United States of America` often both apply.",
            "items": {
              "type": "string",
              "enum": [
                "United States of America",
                "America / Canada",
                "Europe",
                "Remote",
                "Fully Remote",
                "Partly Remote",
                "Asia",
                "Latin America",
                "Africa",
                "Middle East",
                "Oceania",
                "Canada"
              ]
            },
            "default": []
          },
          "ycOnlyHiring": {
            "title": "YC: only companies currently hiring",
            "type": "boolean",
            "description": "Strongly recommended, and on by default. A company with no open roles has no job board to read, so scanning it spends a lookup to learn nothing. 1,477 of the 6,200 are hiring.",
            "default": true
          },
          "ycOnlyTopCompanies": {
            "title": "YC: only top companies",
            "type": "boolean",
            "description": "YC's own `top_company` flag — the breakout names. Narrow, but every one is a serious buyer.",
            "default": false
          },
          "ycMinTeamSize": {
            "title": "YC: minimum team size",
            "minimum": 0,
            "type": "integer",
            "description": "Filter out companies below this headcount. Useful when a two-person startup is not worth a sales call."
          },
          "ycMaxTeamSize": {
            "title": "YC: maximum team size",
            "minimum": 0,
            "type": "integer",
            "description": "Filter out companies above this headcount."
          },
          "hnMonths": {
            "title": "HN: how many monthly threads",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How far back to read *Ask HN: Who is hiring?*. Each thread carries roughly 240 companies, and repeats across months are merged, so 3 months yields several hundred distinct companies — most of them not in any startup directory.",
            "default": 3
          },
          "maxCompanies": {
            "title": "How many discovered companies to scan",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Cap on discovered companies per run, applied **after** duplicates are merged, so it counts companies actually scanned. Each takes about a second. Start at 100 to see the shape of the results, then raise it.",
            "default": 100
          },
          "companies": {
            "title": "2. Or name companies yourself",
            "type": "array",
            "description": "Company names, domains, or ATS board URLs — mix them freely. Works on its own, or alongside discovery.\n\n• Name: `Stripe`, `Two Chairs`\n• Domain: `ramp.com`\n• Board URL: `https://boards.greenhouse.io/oklo` (always resolves)\n\nAbout 89% of companies that use a supported ATS resolve from the name alone.",
            "items": {
              "type": "string"
            }
          },
          "requireTech": {
            "title": "3. Only keep companies using these technologies",
            "type": "array",
            "description": "**The filter that turns a scan into a lead list.** Type technology names exactly as they appear in the output — `Salesforce`, `NetSuite`, `Snowflake`, `Kubernetes`, `Anthropic`, `SOC 2`.\n\nLeave empty to keep every company. 190 technologies are detected in total.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "requireTechMode": {
            "title": "Match any or all of them",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "`any` casts a wide net; `all` finds companies running a specific combination — for example Snowflake **and** dbt **and** Looker, which is a modern-data-stack shop.",
            "default": "any"
          },
          "requireSignals": {
            "title": "Only keep companies matching these signals",
            "type": "array",
            "description": "Written as `key:value`, one per line. Examples:\n\n• `salesLed:true` — sales org outgrowing engineering, the classic expansion moment\n• `aiAdoption:committed`\n• `dataMaturity:advanced`\n• `hiringScale:scale-up`\n• `remotePosture:remote-first`\n\nEvery signal in the output can be filtered this way.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyProvider": {
            "title": "Applicant tracking system",
            "enum": [
              "any",
              "greenhouse",
              "ashby",
              "lever",
              "smartrecruiters"
            ],
            "type": "string",
            "description": "Restrict the lookup to one ATS. Leave on **Any** to try Greenhouse, then Ashby, then Lever, then SmartRecruiters — which is what you want unless you already know.",
            "default": "any"
          },
          "minJobMentions": {
            "title": "Minimum job mentions per technology",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How much evidence before a technology counts. `1` keeps every mention; raise it to keep only tools the company is clearly committed to. A tool named in 1 job of 600 is a mention — named in 40, it's a commitment.",
            "default": 1
          },
          "techCategories": {
            "title": "Only these technology categories",
            "type": "array",
            "description": "Leave empty for everything. Pick categories to narrow the output — `business` alone gives you Salesforce, HubSpot, NetSuite, SAP and Workday, which is usually what a sales team wants.",
            "items": {
              "type": "string",
              "enum": [
                "language",
                "frontend",
                "backend",
                "cloud",
                "devops",
                "database",
                "data",
                "ai",
                "business",
                "security",
                "observability"
              ],
              "enumTitles": [
                "Languages",
                "Frontend",
                "Backend",
                "Cloud",
                "DevOps",
                "Databases",
                "Data & analytics",
                "AI / ML",
                "Business systems",
                "Security & compliance",
                "Observability"
              ]
            },
            "default": []
          },
          "detailLimit": {
            "title": "SmartRecruiters: descriptions to read",
            "minimum": 0,
            "maximum": 300,
            "type": "integer",
            "description": "Only affects SmartRecruiters, the one ATS that needs a separate request per job to get its description. Bosch alone lists 4,811 roles, so descriptions are read for this many and the rest still contribute titles, departments and locations. The other three return descriptions in one request and ignore this.",
            "default": 60
          },
          "includeJobs": {
            "title": "Include the individual jobs",
            "type": "boolean",
            "description": "Adds every open role to the row, each with its own detected tech, department and seniority. Off by default so the output stays one clean line per company.",
            "default": false
          },
          "includeJobDescriptions": {
            "title": "Include full job descriptions",
            "type": "boolean",
            "description": "Only applies when the jobs above are included. Descriptions run several thousand characters each, so this makes the dataset much larger.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Companies looked up in parallel. These are plain public JSON endpoints with no proxy involved, so the only reason to keep this modest is politeness.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}