{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse Jobs - Remote Jobs, Salaries & Job Descriptions",
    "description": "Get Greenhouse jobs from company board URLs or tokens. One row per job: title, location, department, full description, apply URL, dates and published salaries. Filter titles, locations, remote or hybrid jobs before billing. Exclude known job IDs for new jobs. No login or API key needed.",
    "version": "1.0",
    "x-build-id": "tYyrnYa4AqQF7J0L8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kestrel~greenhouse-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kestrel-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/kestrel~greenhouse-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-kestrel-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/kestrel~greenhouse-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-kestrel-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",
        "required": [
          "boards"
        ],
        "properties": {
          "boards": {
            "title": "Company job boards",
            "type": "array",
            "description": "Required: company board tokens such as [\"anthropic\"] or HTTPS board URLs. Up to 20 boards. Individual job URLs and arbitrary company names are not supported. Searches only these boards, not a global jobs index. One returned job = one charge.",
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerBoard": {
            "title": "Maximum jobs per board",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "100 by default; 1-5000. Applied AFTER all filters and excluded IDs. For the newest 20 matching jobs from each company, pass 20. Fewer may exist. Sorted by source date descending.",
            "default": 100
          },
          "maxResults": {
            "title": "Maximum jobs in the run",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "1000 by default; 1-10000 across all boards. Stops early even if boards remain. With 10 here, the bill is at most $0.03. Use Apify run option maxTotalChargeUsd for a monetary cap.",
            "default": 1000
          },
          "titleKeywords": {
            "title": "Job title keywords",
            "type": "array",
            "description": "[\"engineer\", \"developer\"] matches either phrase in the job title, case-insensitively. Empty = all titles. Different filter fields combine with AND. Filtered jobs are free and do not use up the result cap.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location keywords",
            "type": "array",
            "description": "[\"London\", \"New York\"] matches either phrase in any listed location, case-insensitively. Empty = anywhere. This is text matching, not a country boundary or eligibility check. Free filter applied before the cap.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "departmentKeywords": {
            "title": "Department keywords",
            "type": "array",
            "description": "[\"Engineering\"] matches any department containing that phrase. Empty = all departments; multiple phrases use OR. Free filter before the cap.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "workplaceType": {
            "title": "Workplace type",
            "enum": [
              "any",
              "remote",
              "hybrid",
              "on_site"
            ],
            "type": "string",
            "description": "\"any\" (default) keeps all jobs. \"remote\", \"hybrid\" or \"on_site\" keeps only that classification. Hybrid is not treated as remote. Unknown classifications are excluded when a specific type is requested. Remote does not mean work from any country. Free filter.",
            "default": "any"
          },
          "sinceDate": {
            "title": "Source date on or after",
            "type": "string",
            "description": "Empty = no date filter. Example \"2026-10-01\" includes jobs with updated_at (last edit, NOT first publication) on or after midnight UTC. Jobs without this source date are excluded. This does not detect first-seen jobs; use excludeJobIds for repeat runs. Free filter.",
            "default": ""
          },
          "includeCompensation": {
            "title": "Include published compensation",
            "type": "boolean",
            "description": "true (default) includes published salary_ranges and compensation_raw at no extra charge. Missing pay is never estimated. false returns salary_ranges=[], compensation_raw=null and compensation_status=\"not_requested\". true fetches one public detail page per matching job; false skips those requests.",
            "default": true
          },
          "onlyWithCompensation": {
            "title": "Only jobs with published pay",
            "type": "boolean",
            "description": "false (default) includes jobs whether or not pay is published. true keeps only jobs with a numeric published pay range, requires includeCompensation=true, and filters BEFORE the cap. No extra charge; excluded jobs are free. Pay ranges may include OTE; inspect their labels and descriptions.",
            "default": false
          },
          "excludeJobIds": {
            "title": "Previously delivered job IDs",
            "type": "array",
            "description": "[\"4461450008\"] excludes known job_id values. For multiple boards, prefer full job_key values from earlier output to avoid ID collisions. Maximum 10000. Empty = no exclusions. Excluded jobs cost nothing. Your workflow must save/pass this list; the actor does not schedule itself or retain monitoring state.",
            "default": [],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}