{
  "openapi": "3.0.1",
  "info": {
    "title": "Hiring Signals Monitor: Buying Signals from Job Postings",
    "description": "Turn a list of companies into sales and recruiting signals: new job postings matching your skills or tools (Rust, Kafka, Snowflake), hiring surges, and technologies added to or dropped from their website. Reads Greenhouse, Lever, Ashby, Recruitee, Personio and Teamtailor. Pay only for signals.",
    "version": "1.0",
    "x-build-id": "CghsWOVLfSdYrM1Qn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/humble-echidna~hiring-signals/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-humble-echidna-hiring-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/humble-echidna~hiring-signals/runs": {
      "post": {
        "operationId": "runs-sync-humble-echidna-hiring-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/humble-echidna~hiring-signals/run-sync": {
      "post": {
        "operationId": "run-sync-humble-echidna-hiring-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",
        "required": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "One company per line: a company name (e.g. Stripe), its careers page (e.g. https://linear.app/careers) or its job-board URL (e.g. https://boards.greenhouse.io/gitlab, or greenhouse:gitlab). Boards on Greenhouse, Lever, Ashby, Recruitee, Personio and Teamtailor are read. Add the website after ` | ` for tech-stack checks, e.g. `Ramp | ramp.com`; without it the domain is taken only from the careers page or job links. Up to 500 companies per run.",
            "default": [
              "https://boards.greenhouse.io/gitlab | gitlab.com",
              "https://boards.greenhouse.io/stripe",
              "https://jobs.lever.co/palantir | palantir.com",
              "Linear | linear.app"
            ],
            "items": {
              "type": "string"
            }
          },
          "signalKeywords": {
            "title": "Signal keywords (skills, tools, roles)",
            "type": "array",
            "description": "Roles count as a signal when they mention any of these as a whole word or phrase, case-insensitive: e.g. `Rust`, `Kafka`, `Snowflake`, `data engineer`. \"Go\" doesn't match \"Google\", but a short word can still match unrelated text, so prefer specific terms. Leave empty to count every new role (inside the department and location filters). Default: Python, Kafka, Rust.",
            "default": [
              "Python",
              "Kafka",
              "Rust"
            ],
            "items": {
              "type": "string"
            }
          },
          "matchIn": {
            "title": "Match keywords in",
            "enum": [
              "titleAndDescription",
              "title"
            ],
            "type": "string",
            "description": "Where the signal keywords are looked for: `titleAndDescription` (default; skills are mostly named in the description) or `title` (fewer, stronger matches, e.g. \"Senior Rust Engineer\").",
            "default": "titleAndDescription"
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Only roles whose department or team contains any of these words (case-insensitive), e.g. `Engineering`, `Data`. Also limits the open-role counts used for hiring surges. Leave empty for every department.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Only roles whose location or country contains any of these (case-insensitive), e.g. `London`, `Germany`, `Remote`. Also limits the open-role counts used for hiring surges. Leave empty for everywhere.",
            "items": {
              "type": "string"
            }
          },
          "sinceLastRun": {
            "title": "Only signals since my last run (monitoring)",
            "type": "boolean",
            "description": "On: each run compares every company with the last run of the same search (saved task) and returns only what's new since then: new matching roles, hiring surges and website stack changes. The first run is the baseline (roles posted in the last `lookbackDays` count as new). Off (default): every run reports matching roles posted in the last `lookbackDays` days; surges and stack changes need this on.",
            "default": false
          },
          "lookbackDays": {
            "title": "New roles: posted within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "With monitoring off, and on the first monitoring run, a matching role counts as new when its job board says it was posted within this many days. 1 to 365, default 30. Roles without a posting date don't count as new.",
            "default": 30
          },
          "surgePercent": {
            "title": "Hiring surge: growth (%)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "A hiring surge is reported when a company's open roles (inside the department and location filters) grew by at least this percentage within the surge window, and by at least the minimum number of roles. 1 to 1000, default 20. Needs monitoring on.",
            "default": 20
          },
          "surgeMinRoles": {
            "title": "Hiring surge: at least this many more roles",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The least number of extra open roles that makes a surge, so a board going from 2 to 3 roles isn't one. 1 to 10000, default 5.",
            "default": 5
          },
          "surgeWindowDays": {
            "title": "Hiring surge: window (days)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "Growth is measured from the oldest run inside this many days (or the latest run before it). The same surge isn't reported again within the window unless the roles grow by the same margin again. 1 to 90, default 30.",
            "default": 30
          },
          "detectTechStack": {
            "title": "Check each company's website tech stack",
            "type": "boolean",
            "description": "On (default): the company's home page is fetched once per run and its technologies (CMS, analytics, frameworks, CDN...) are listed; with monitoring on, technologies added or dropped since the last run are signals. Needs a domain (see `companies`). Off: job signals only.",
            "default": true
          },
          "stackCheckEveryDays": {
            "title": "Re-check each home page every (days)",
            "minimum": 1,
            "maximum": 90,
            "type": "integer",
            "description": "With monitoring on, a home page checked less than this many days ago isn't fetched again; its last stack is reported (`techStackCheckedAt` says when) and stack changes show up at the next check. Stacks change slowly, so this keeps daily monitors cheap. 1 to 90, default 7; 1 checks every run.",
            "default": 7
          },
          "stackTechnologies": {
            "title": "Only these technologies count as stack signals",
            "type": "array",
            "description": "Optional. When set, only these technologies being added or dropped count as a stack signal, e.g. `HubSpot`, `Segment`, `Intercom` (names as shown in `techStack`, case-insensitive). Empty (default): any technology change counts.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max companies with signals per run",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many companies with a signal (one result each), e.g. 50. Minimum 1; leave empty (the default) for no limit. Quiet companies are never results and don't count. The run also stops cleanly at the maximum cost per run you set in the run options, whichever comes first."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}