{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse Jobs Scraper & API - Deduplicated, Pay Once Per Job",
    "description": "Scrape every open job from any Greenhouse careers page: title, department, office, location, posting date, apply link, full description. Deduplicated across runs, you pay once per job. Also reads Lever, Ashby, Workable and SmartRecruiters boards.",
    "version": "1.1",
    "x-build-id": "UEgt8IlYFJaYhvHWO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~greenhouse-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-greenhouse-jobs-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/automation_craft~greenhouse-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-greenhouse-jobs-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/automation_craft~greenhouse-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-greenhouse-jobs-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",
        "properties": {
          "companies": {
            "title": "Companies / careers pages",
            "type": "array",
            "description": "One entry per company. Paste the Greenhouse careers URL (boards.greenhouse.io/<company>, job-boards.greenhouse.io/<company>, boards.eu.greenhouse.io/<company>), or just the company token (the board token is the last part of the careers URL, lower case), e.g. \"stripe\". Greenhouse, Lever, Ashby, Workable and SmartRecruiters URLs are all recognised, so you can mix boards from other ATS platforms in the same run.",
            "items": {
              "type": "string"
            }
          },
          "provider": {
            "title": "ATS for bare company names",
            "enum": [
              "auto",
              "greenhouse",
              "lever",
              "ashby",
              "workable",
              "smartrecruiters"
            ],
            "type": "string",
            "description": "Which ATS a plain company token (no URL) belongs to. Preset to Greenhouse for this listing. URLs and provider:token entries always win.",
            "default": "greenhouse"
          },
          "includeDescription": {
            "title": "Include full job descriptions",
            "type": "boolean",
            "description": "Attach the full job description (HTML and plain text) to every new job. $0.50 per 1,000 jobs that actually got one. SmartRecruiters needs one extra request per job for this."
          },
          "includeKeywords": {
            "title": "Must contain",
            "type": "array",
            "description": "Keep only jobs that contain at least one of these words or phrases (case-insensitive) in the fields chosen below.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Must not contain",
            "type": "array",
            "description": "Drop jobs that contain any of these words or phrases.",
            "items": {
              "type": "string"
            }
          },
          "keywordFields": {
            "title": "Fields to check",
            "type": "array",
            "description": "Where the keyword filters look. Description text is available for Greenhouse, Lever, Ashby and Workable at filter time; SmartRecruiters descriptions are fetched after selection, so keyword filters there check the other fields.",
            "items": {
              "type": "string",
              "enum": [
                "title",
                "departments",
                "team",
                "location",
                "description"
              ],
              "enumTitles": [
                "Title",
                "Departments",
                "Team / function",
                "Location(s)",
                "Description text"
              ]
            }
          },
          "searchText": {
            "title": "Quick keyword",
            "type": "string",
            "description": "Single keyword over title, department, team and location (kept for API compatibility; \"Must contain\" is more flexible)."
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep only jobs whose location (any listed office or country) contains one of these, e.g. \"London\", \"Remote\", \"United States\". Case-insensitive.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs the ATS explicitly marks as remote. Greenhouse has no remote flag, so Greenhouse jobs only match when their location text says \"Remote\".",
            "default": false
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only jobs whose employment type contains one of these, e.g. \"Full\", \"Part\", \"Contract\", \"Intern\". Greenhouse does not publish this field.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within",
            "enum": [
              "any",
              "1",
              "3",
              "7",
              "14",
              "30",
              "90"
            ],
            "type": "string",
            "description": "Only jobs first published in this window (exact, based on the posting date the ATS publishes). Any number of days works through the API."
          },
          "postedAfter": {
            "title": "Posted after (exact)",
            "type": "string",
            "description": "Optional exact start date/time (ISO 8601). Overrides \"Posted within\"."
          },
          "postedBefore": {
            "title": "Posted before (exact)",
            "type": "string",
            "description": "Optional exact end date/time (ISO 8601)."
          },
          "dedupMemoryName": {
            "title": "Memory name (skip jobs you already received)",
            "type": "string",
            "description": "Give this search a name, e.g. \"competitor-watch-weekly\". Jobs delivered under that name are remembered in your account and never delivered or charged again in later runs. Leave empty to only remove duplicates within one run."
          },
          "emitDuplicates": {
            "title": "Also return already-known jobs (free, flagged)",
            "type": "boolean",
            "description": "Return jobs the memory already knows, marked isDuplicate = true and changeType = DUPLICATE or UPDATED (content changed since you last received it). Never charged.",
            "default": false
          },
          "resetDedupMemory": {
            "title": "Reset this memory first",
            "type": "boolean",
            "description": "Forget everything stored under the memory name before running.",
            "default": false
          },
          "maxJobsPerCompany": {
            "title": "Max new jobs per company",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap on new, charged jobs per careers page. Honored exactly. Known duplicates do not count."
          },
          "maxJobsTotal": {
            "title": "Max new jobs total",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Overall cap on new, charged jobs for the run. Honored exactly."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}