{
  "openapi": "3.0.1",
  "info": {
    "title": "Career Site Job Scraper: Greenhouse, Lever, Ashby, Workday",
    "description": "Get every open job from company career sites on Greenhouse, Lever, Ashby, Workday and SmartRecruiters via their public job-board feeds. Normalized fields, salary ranges, clean descriptions, filters, and new/closed job tracking between runs. $1.50 per 1,000 jobs.",
    "version": "1.1",
    "x-build-id": "0uoM5G2vQJiV8lCpW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fairfetch~career-site-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fairfetch-career-site-jobs-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/fairfetch~career-site-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-fairfetch-career-site-jobs-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/fairfetch~career-site-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-fairfetch-career-site-jobs-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",
        "required": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Companies (career-page URLs or ats:slug)",
            "minItems": 1,
            "type": "array",
            "description": "One job board per line, as a careers URL or ats:slug: greenhouse:stripe (job-boards.greenhouse.io/stripe), lever:palantir (jobs.lever.co/palantir; EU boards too), ashby:openai (jobs.ashbyhq.com/openai), workday:nvidia.wd5/NVIDIAExternalCareerSite (its myworkdayjobs.com URL), smartrecruiters:ServiceNow, or a company's own careers page with an embedded board. The same board entered twice is read once. A wrong slug or unreadable board gives one free error row with the reason.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (any of)",
            "type": "array",
            "description": "Keep only jobs whose title, department or team contains at least one of these words (case-insensitive). Leave empty to keep all jobs.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words, e.g. \"intern\" or \"senior\".",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (any of)",
            "type": "array",
            "description": "Keep only jobs with a location containing one of these texts (case-insensitive), e.g. \"London\", \"United States\". The special value \"Remote\" uses the same rule as \"Remote jobs only\" (including the option to keep jobs with unknown remote status), so hybrid or on-site jobs that list a \"Remote\" location are not matched.",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Departments / teams (any of)",
            "type": "array",
            "description": "Keep only jobs whose department or team contains one of these texts. Workday sites do not publish departments, so this filter is skipped for Workday.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only remote jobs: the ATS marks the job as remote, or (when the ATS gives no workplace type) a location says \"Remote\", e.g. \"US-Remote\". Hybrid and on-site jobs are never included, even when the ATS also flags them as remote-eligible. Jobs whose ATS doesn't say whether they are remote (output `remote: null`, common on Greenhouse and Workday) are left out unless you tick the next option.",
            "default": false
          },
          "includeUnknownRemote": {
            "title": "Remote only: also keep jobs with unknown remote status",
            "type": "boolean",
            "description": "With \"Remote jobs only\": also keep jobs whose ATS doesn't say whether they are remote (`remote: null`), so you can check them yourself. Hybrid and on-site jobs stay excluded.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs first published in the last N days (where the ATS publishes a date). Leave empty for no limit."
          },
          "includeDescription": {
            "title": "Include job description (clean text)",
            "type": "boolean",
            "description": "Add the full job description converted from HTML to clean plain text. For Workday and SmartRecruiters this needs one extra request per job, so runs take longer.",
            "default": true
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of matching jobs returned per company, newest first (by the ATS's date; undated jobs last). 0 = no limit. Lever boards are always read in full (Lever doesn't list by date); Workday and SmartRecruiters list newest first, so only the first pages are read without filters or tracking. Closed jobs from change tracking don't count. Big boards with descriptions can take minutes (one extra request per job on Workday and SmartRecruiters); 20-50 gives a quick answer.",
            "default": 0
          },
          "trackChanges": {
            "title": "Track new and closed jobs",
            "type": "boolean",
            "description": "Remember the jobs returned for each company in a named key-value store, so every later run marks jobs as \"new\" or \"existing\" and also returns jobs that have been taken down since the previous run as \"closed\". Schedule the Actor (e.g. daily) to monitor hiring. Turned on automatically when \"Return only new and closed jobs\" is ticked.",
            "default": false
          },
          "onlyNewAndClosed": {
            "title": "Return only new and closed jobs",
            "type": "boolean",
            "description": "Skip jobs that were already returned in an earlier run, so you only pay for changes. Needs change tracking, which this option turns on by itself. The first run returns every job as \"new\".",
            "default": false
          },
          "trackingId": {
            "title": "Tracking ID",
            "pattern": "^[A-Za-z0-9_-]{1,60}$",
            "type": "string",
            "description": "Name of the tracking state (used only with change tracking). Runs with the same ID share what has been seen; use different IDs for independent monitors (e.g. one per team or per filter set). Letters, numbers, dashes and underscores.",
            "default": "default"
          },
          "maxConcurrency": {
            "title": "Max parallel requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Upper limit of simultaneous HTTP requests. Requests to one host are additionally limited to 3 at a time to stay polite.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 300,
            "type": "integer",
            "description": "Timeout for a single HTTP request.",
            "default": 60
          },
          "maxRetries": {
            "title": "Max retries per request",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Retries for network errors, HTTP 429 and 5xx responses (exponential backoff, honours Retry-After).",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed for the public job-board feeds. Enable only if a site blocks your requests.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}