{
  "openapi": "3.0.1",
  "info": {
    "title": "Company Tech Stack & Domain Signals",
    "description": "Paste company domains, get one row each: website tech stack (CMS, e-commerce, analytics, marketing tools, CDN, hosting), mail provider and SPF/DMARC/DKIM grade, SaaS verification records, RDAP domain age and registrar, and hiring platform with open-job count. Public data only.",
    "version": "0.2",
    "x-build-id": "Xq2l8cuwmDWJ5CzWR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/signalscouter~company-tech-stack-signals/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-signalscouter-company-tech-stack-signals",
        "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/signalscouter~company-tech-stack-signals/runs": {
      "post": {
        "operationId": "runs-sync-signalscouter-company-tech-stack-signals",
        "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/signalscouter~company-tech-stack-signals/run-sync": {
      "post": {
        "operationId": "run-sync-signalscouter-company-tech-stack-signals",
        "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": {
          "domains": {
            "title": "Company domains or website URLs",
            "type": "array",
            "description": "One per line. Bare domains (stripe.com), full URLs (https://www.notion.so/product) or work email addresses (only the domain part is used). Inputs are de-duplicated by registrable domain (Public Suffix List): example.co.uk, shop.example.co.uk and jane@example.co.uk become one row, analysed and charged once, with every original input listed in its 'inputs' field. Sites on shared platforms (acme.myshopify.com, foo.github.io) stay separate. Run time: about 1 second per domain at the default 4 GB memory, so one hour handles roughly 3,500 domains; lists of roughly 3,500+ domains need a timeout longer than 1 hour. The default timeout is 4 hours (about 14,000 domains). Rule of thumb: timeout in seconds = domains x 1 at 4 GB (x 3 at 1 GB, x 6 at 512 MB) + 120.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Read domains from a dataset (optional)",
            "type": "string",
            "description": "ID of an Apify dataset to read extra domains from, e.g. the output of another Actor or an imported CRM export."
          },
          "datasetField": {
            "title": "Dataset field holding the domain",
            "type": "string",
            "description": "Field name in each dataset item that contains the domain or URL.",
            "default": "domain"
          },
          "checks": {
            "title": "Checks to run",
            "type": "array",
            "description": "Which signal groups to collect. The price per domain is the same whichever you choose.",
            "items": {
              "type": "string",
              "enum": [
                "tech",
                "dns",
                "emailSecurity",
                "rdap",
                "ats",
                "securityTxt"
              ],
              "enumTitles": [
                "Website technologies",
                "DNS (mail provider, DNS host, SaaS verification records, hosting network)",
                "Email security (SPF, DMARC, DKIM, MTA-STS, BIMI)",
                "Domain age & registrar (RDAP)",
                "Hiring platform & open jobs",
                "security.txt"
              ]
            },
            "default": [
              "tech",
              "dns",
              "emailSecurity",
              "rdap",
              "ats"
            ]
          },
          "pagesPerDomain": {
            "title": "Pages per domain",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Homepage only (1) is usually enough. Up to 5 adds same-site pages such as /pricing or /about to catch tools loaded only there. More pages = slower runs.",
            "default": 1
          },
          "atsProbeSlugs": {
            "title": "Guess job-board slug if no careers link is found",
            "type": "boolean",
            "description": "If the site doesn't link to its job board, try the company name on Greenhouse, Ashby and Lever. Matches are flagged detectedVia = 'slugProbe' because a same-named board can belong to a different company.",
            "default": true
          },
          "technologyFilter": {
            "title": "Only output domains using these technologies",
            "type": "array",
            "description": "Case-insensitive partial match on technology name, mail provider or hiring platform, e.g. 'Shopify', 'HubSpot', 'Microsoft 365', 'greenhouse'. Domains that don't match are skipped and not charged.",
            "items": {
              "type": "string"
            }
          },
          "categoryFilter": {
            "title": "Only output domains with a technology in these categories",
            "type": "array",
            "description": "Keep domains that use at least one technology of the chosen categories.",
            "items": {
              "type": "string",
              "enum": [
                "cms",
                "ecommerce",
                "analytics",
                "tagManager",
                "marketingAutomation",
                "advertising",
                "salesIntelligence",
                "chat",
                "payments",
                "cdn",
                "hosting",
                "webServer",
                "backend",
                "jsFramework",
                "consent",
                "abTesting",
                "reviews",
                "scheduling",
                "video",
                "search",
                "security",
                "monitoring",
                "crm",
                "affiliate",
                "headlessCms",
                "staticSiteGenerator"
              ]
            }
          },
          "onlyChanges": {
            "title": "Monitoring mode: only output changes since the last run",
            "type": "boolean",
            "description": "Remembers each domain's stack in a named key-value store ('company-tech-signals-state'). The first run outputs every domain (changes.firstSeen = true); later runs output only domains whose technologies, mail provider, DNS host, DMARC policy, hiring platform or registrar changed. Unchanged domains are not charged.",
            "default": false
          },
          "maxDomains": {
            "title": "Max domains",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many domains (0 = no limit).",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Max concurrent domains",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Domains processed in parallel. Requests to any single website are always sequential.",
            "default": 10
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Per HTTP request. Slow sites beyond this are reported as TIMEOUT.",
            "default": 15
          },
          "perHostDelaySecs": {
            "title": "Delay between requests to the same site (seconds)",
            "minimum": 0.2,
            "maximum": 10,
            "type": "number",
            "description": "Politeness gap between consecutive requests to one host. A longer robots.txt Crawl-delay (up to 10 s) is honoured automatically.",
            "default": 0.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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}