{
  "openapi": "3.0.1",
  "info": {
    "title": "Workday, Greenhouse, Lever, Ashby & Oracle Jobs Scraper (ATS)",
    "description": "Scrape all open jobs from company career sites on Workday, Greenhouse, Lever, Ashby and Oracle Recruiting Cloud (ATS) into one clean schema. Track new and closed job postings between runs and get per-company hiring signals.",
    "version": "0.1",
    "x-build-id": "wV2txQQ6qpX4R2yWp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hirewatch~career-sites-jobs-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hirewatch-career-sites-jobs-tracker",
        "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/hirewatch~career-sites-jobs-tracker/runs": {
      "post": {
        "operationId": "runs-sync-hirewatch-career-sites-jobs-tracker",
        "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/hirewatch~career-sites-jobs-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-hirewatch-career-sites-jobs-tracker",
        "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": {
          "targets": {
            "title": "Companies (career-site URLs, domains or names)",
            "type": "array",
            "description": "REQUIRED. List of companies to scrape, one per item. Each item is a job-board / career-site URL (Workday, Oracle Recruiting Cloud, Greenhouse, Lever, Ashby), a company careers page that embeds one, a company website domain (e.g. 'stripe.com'), or just a company name (looked up on Greenhouse, Lever and Ashby). Workday and Oracle always need the career-site URL. Optional display name: 'Name | URL'. Example: [\"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite\", \"Stripe\"].",
            "default": [
              "https://boards.greenhouse.io/stripe",
              "https://jobs.ashbyhq.com/ramp"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many jobs per company (default 1000). 0 = no limit (fetch the whole board). New/closed tracking is only fully accurate when the whole board is fetched.",
            "default": 1000
          },
          "maxItems": {
            "title": "Max job records in total",
            "minimum": 0,
            "type": "integer",
            "description": "Overall cap on job records this run outputs across all companies (and therefore on cost). 0 = no overall cap. AI agents: set e.g. 50-200 for quick answers.",
            "default": 0
          },
          "includeDescriptions": {
            "title": "Include full job descriptions",
            "type": "boolean",
            "description": "Adds descriptionText and descriptionHtml (e-mails and phone numbers removed). Free for Greenhouse/Lever/Ashby; for Workday and Oracle it needs one extra polite request per job (about 1 job per second per site), so runs are much slower.",
            "default": false
          },
          "titleKeywords": {
            "title": "Title keywords (any)",
            "type": "array",
            "description": "Only output jobs whose title contains at least one of these words or phrases (case-insensitive), e.g. [\"engineer\", \"data\"]. Tracking still covers all jobs.",
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location keywords (any)",
            "type": "array",
            "description": "Only output jobs whose location or country contains at least one of these, e.g. [\"Remote\", \"London\", \"United States\"].",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Only output jobs marked remote. Workday marks remote type only when descriptions are fetched.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Only output jobs posted in the last N days (e.g. 7). 0 = any date. Jobs without a posted date are excluded when this is set. Workday only shows approximate dates ('Posted 3 Days Ago', '30+ Days Ago').",
            "default": 0
          },
          "trackChanges": {
            "title": "Track new and closed jobs between runs",
            "type": "boolean",
            "description": "Remembers each company's jobs in a named key-value store, so every run labels jobs as new / unchanged / closed. Schedule the Actor (e.g. daily) to get a hiring-change feed.",
            "default": true
          },
          "outputMode": {
            "title": "Output",
            "enum": [
              "allJobs",
              "changesOnly"
            ],
            "type": "string",
            "description": "'allJobs' outputs every open job (plus jobs closed since the last run, labelled). 'changesOnly' outputs just new and closed jobs since the previous run, which is cheaper for daily monitoring.",
            "default": "allJobs"
          },
          "includeBaselineOnFirstRun": {
            "title": "Only changes: output all jobs on the first run",
            "type": "boolean",
            "description": "In 'changesOnly' mode the first run just records a baseline and outputs nothing. Turn this on to also get the full list on the first run.",
            "default": false
          },
          "includeCompanySummary": {
            "title": "Add a hiring-signal summary per company",
            "type": "boolean",
            "description": "One extra record per company (charged as one 'company-summary' event): total open jobs, new/closed since last run, trend, jobs posted in the last 7/30 days, top departments and locations, remote mix.",
            "default": true
          },
          "includeJobs": {
            "title": "Output job records",
            "type": "boolean",
            "description": "Turn off to get only company summaries (cheapest way to monitor hiring at many companies).",
            "default": true
          },
          "trackerId": {
            "title": "Tracker ID",
            "type": "string",
            "description": "Separate change histories for different tasks/schedules that watch the same companies.",
            "default": "default"
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store that keeps the previous run's jobs.",
            "default": "job-listings-tracker-state"
          },
          "requestDelaySecs": {
            "title": "Delay between requests to the same site (seconds)",
            "minimum": 0.5,
            "maximum": 30,
            "type": "number",
            "description": "Polite rate limit per host (minimum 0.5 s). A site's robots.txt Crawl-delay is used when larger.",
            "default": 1
          },
          "maxConcurrency": {
            "title": "Companies processed in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many companies are fetched at the same time. Requests to any single site are still spaced by the delay above.",
            "default": 4
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries on timeouts, 429 and 5xx responses, with exponential back-off and Retry-After support.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}