{
  "openapi": "3.0.1",
  "info": {
    "title": "Hiring Signals & Salary Changes — ATS Job Tracker",
    "description": "Track company hiring changes across four ATS platforms. Get full job descriptions, published salaries, remote status and source links. Compare runs to find new, changed, reopened and no-longer-listed jobs with persistent history.",
    "version": "1.0",
    "x-build-id": "tyTcPoEClIbVtgM8v"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/agency-shift~hiring-signals-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-agency-shift-hiring-signals-scraper",
        "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/agency-shift~hiring-signals-scraper/runs": {
      "post": {
        "operationId": "runs-sync-agency-shift-hiring-signals-scraper",
        "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/agency-shift~hiring-signals-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-agency-shift-hiring-signals-scraper",
        "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": [
          "boardUrls"
        ],
        "properties": {
          "boardUrls": {
            "title": "Career-board URLs",
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "description": "Enter 1–20 supported HTTPS board URLs, one per line. Supported hosts: job-boards.greenhouse.io, boards.greenhouse.io, jobs.lever.co, jobs.eu.lever.co, jobs.ashbyhq.com and company.recruitee.com. A supported job URL selects its entire board. Custom company career domains are not supported. Recruitee works only where its careers API remains publicly accessible.",
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "Run mode",
            "enum": [
              "snapshot",
              "changes"
            ],
            "type": "string",
            "description": "Snapshot returns current jobs without reading or changing monitor history. Changes records a first baseline, then returns new, changed, reopened and confirmed no-longer-listed jobs on later runs.",
            "default": "snapshot"
          },
          "monitorName": {
            "title": "Monitor name",
            "pattern": "^(?:[a-z0-9][a-z0-9-]{0,39})?$",
            "type": "string",
            "description": "Required in Changes mode. Reuse this name with the same Apify account and Actor to continue history across runs and tasks. Use 1–40 lowercase letters, numbers or hyphens, starting with a letter or number. A new name starts a new baseline. Overlapping runs of the same monitor are rejected.",
            "default": ""
          },
          "maxResults": {
            "title": "Maximum output records",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum job or event records delivered in this run (1–10,000), also limited by your Apify spending cap. This limits output, not jobs fetched. In Changes mode, pending records are saved and delivered first on a later run of this monitor. Snapshot output can be truncated. Boards are processed in input order.",
            "default": 1000
          },
          "emitInitialSnapshot": {
            "title": "Return baseline records",
            "type": "boolean",
            "description": "In Changes mode, return baseline records when a board is first observed by this monitor. Turn off to save the first baseline silently and receive only later changes. Baseline records are charged when delivered. Does not affect Snapshot mode.",
            "default": true
          },
          "includeGreenhousePayRanges": {
            "title": "Enrich Greenhouse pay ranges",
            "type": "boolean",
            "description": "Request each Greenhouse job's detail endpoint to include published structured pay ranges. Adds one request per job and can increase runtime. Keep this setting unchanged for an existing Changes monitor, or choose a new monitor name. Turning it off still retains salary text in job descriptions.",
            "default": true
          },
          "missingConfirmations": {
            "title": "Successful missing scans before closure",
            "minimum": 2,
            "maximum": 5,
            "type": "integer",
            "description": "In Changes mode, a previously seen job must be absent from this many successful complete scans before a closed event is emitted. Closed means no longer listed, not filled. Failed or incomplete scans and the large-drop safeguard do not advance the missing counter.",
            "default": 2
          },
          "maxJobsPerBoard": {
            "title": "Maximum jobs per board",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Safety limit for complete board scans (1–5,000). If a board exceeds this count, that board fails instead of saving a truncated snapshot; its previous history and closure counters are kept. This is separate from the output limit.",
            "default": 2000
          },
          "allowLargeClosures": {
            "title": "Allow closure detection after a large board drop",
            "type": "boolean",
            "description": "Default false: if a board previously had at least 10 active jobs and now lists fewer than half that number, hold missing counters and closures for absent jobs. Seen jobs can still update. Enable only when a large drop is expected; the missing-confirmation threshold still applies.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}