{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Open Roles: Greenhouse, Lever, Ashby Jobs",
    "description": "Open roles from the public job-board APIs of Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee plus schema.org pages, in one clean schema with seniority, department, salary, remote flag and apply URL.",
    "version": "0.4",
    "x-build-id": "eu6g1hTfFgiVYc2m0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/transparent_meteorite~ats-open-roles/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-transparent_meteorite-ats-open-roles",
        "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/transparent_meteorite~ats-open-roles/runs": {
      "post": {
        "operationId": "runs-sync-transparent_meteorite-ats-open-roles",
        "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/transparent_meteorite~ats-open-roles/run-sync": {
      "post": {
        "operationId": "run-sync-transparent_meteorite-ats-open-roles",
        "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, names or slugs)",
            "type": "array",
            "description": "One company per line. Paste a careers URL (boards.greenhouse.io/stripe, jobs.lever.co/spotify, jobs.ashbyhq.com/ramp, apply.workable.com/blueground, jobs.smartrecruiters.com/ServiceNow, bunq.recruitee.com, applied.bamboohr.com, acme.breezy.hr, shopify.pinpointhq.com, acme.jobs.personio.de, www.arbeitnow.com, remotive.com or remoteok.com for those remote-job feeds (attribution field included), or any career page with schema.org JobPosting markup) or just a company name or slug like \"airbnb\". A name is checked against all ten ATS APIs; a URL is more precise. Example: [\"airbnb\",\"https://jobs.lever.co/spotify\",\"https://jobs.ashbyhq.com/ramp\"].",
            "default": [
              "airbnb",
              "https://jobs.lever.co/spotify",
              "https://jobs.ashbyhq.com/ramp"
            ],
            "items": {
              "type": "string"
            }
          },
          "companyPreset": {
            "title": "Company preset",
            "enum": [
              "",
              "yc-top",
              "ai-labs",
              "fintech",
              "devtools"
            ],
            "type": "string",
            "description": "Add a ready-made list of verified public job boards: yc-top, ai-labs, fintech or devtools (several allowed, separated by commas). Each board returned live jobs when the list was last checked. If you leave Companies at its default, only the preset is fetched; anything else you type in Companies is added to the preset.",
            "default": ""
          },
          "keywords": {
            "title": "Keyword filter (any match)",
            "type": "array",
            "description": "Keep only jobs whose title, department or location contains at least one of these words (not case-sensitive), e.g. \"engineer\", \"sales\", \"remote\". Leave empty for every open job.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (any match)",
            "type": "array",
            "description": "Keep only jobs whose location contains one of these strings (not case-sensitive), e.g. \"Detroit\", \"Michigan\", \"United States\".",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs flagged remote by the employer or with \"remote\" in the location.",
            "default": false
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Newest matching jobs taken per company per run. 10 is enough for a quick look; raise it (up to 5,000) to get every open role.",
            "default": 100
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop jobs whose title, department or location contains any of these words, e.g. \"intern\".",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Departments (substring, any match)",
            "type": "array",
            "description": "Keep only jobs whose department contains one of these words (not case-sensitive), e.g. \"engineering\", \"sales\". Jobs with no department are dropped when this is set.",
            "items": {
              "type": "string"
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only jobs of these types: full-time, part-time, contract, intern, temporary. Only ATS vendors that publish an employment type can match (Lever, Ashby, BambooHR, Breezy, Personio, Recruitee, SmartRecruiters and schema.org pages do; Greenhouse usually does not). Jobs with no published type are dropped when this is set. Example: [\"full-time\",\"contract\"].",
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "Job title keywords",
            "type": "array",
            "description": "Keep only jobs whose TITLE contains any of these words or phrases, for example [\"data engineer\",\"analytics engineer\"]. Unlike Keywords (which also search department and location) this matches the title only.",
            "items": {
              "type": "string"
            }
          },
          "includeCompanies": {
            "title": "Only these companies",
            "type": "array",
            "description": "Optional. After the career boards are read, keep only companies whose name or board slug matches one of these entries (partial match). Handy together with a Company preset.",
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Optional. Skip companies whose name or board slug matches one of these entries (partial match), for example staffing agencies or your own employer.",
            "items": {
              "type": "string"
            }
          },
          "postedAfter": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Only jobs posted on or after this date, format YYYY-MM-DD. Jobs whose ATS publishes no posting date are dropped when this is set."
          },
          "postedBefore": {
            "title": "Posted on or before",
            "type": "string",
            "description": "Only jobs posted on or before this date (that whole day included), format YYYY-MM-DD."
          },
          "minSalary": {
            "title": "Minimum yearly salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs whose published pay range reaches at least this amount, converted to a yearly figure (hourly x 2080, monthly x 12). Jobs without published pay are dropped when this is set."
          },
          "maxSalary": {
            "title": "Maximum yearly salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs whose published pay range starts at or below this yearly amount. Jobs without published pay are dropped when this is set."
          },
          "workModels": {
            "title": "Work models",
            "type": "array",
            "description": "Keep only these work models: remote, hybrid, on_site. Uses the ATS workplace type, or the remote flag / the word Remote in the location when the ATS has no type.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "on_site"
              ]
            }
          },
          "skillsInclude": {
            "title": "Skills or tools required (any)",
            "type": "array",
            "description": "Keep only jobs whose title or description mentions any of these skills, for example [\"python\",\"dbt\",\"kubernetes\"]. Whole-word match. The description is read for this even when Include description is off, and jobs that fail are not charged.",
            "items": {
              "type": "string"
            }
          },
          "skillsExclude": {
            "title": "Skills or words to exclude",
            "type": "array",
            "description": "Drop jobs whose title or description mentions any of these terms, for example [\"clearance\",\"php\"]. Dropped jobs are not charged.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within last N days",
            "minimum": 0,
            "type": "integer",
            "description": "Drop jobs posted longer ago than this. Jobs with no posted date are kept. 0 = no limit.",
            "default": 0
          },
          "onlyNewSinceLastRun": {
            "title": "Only new since last run (deduped)",
            "type": "boolean",
            "description": "Deliver only jobs you have not received before (tracked per company between runs). Repeat runs then return only newly posted roles, and already-seen jobs are never charged. Turn off to get the full current list every time.",
            "default": true
          },
          "maxJobsTotal": {
            "title": "Max jobs per run",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on job rows, and charges, across all companies in this run. At $0.002 per job, 5,000 jobs = $10.",
            "default": 200
          },
          "includeDescription": {
            "title": "Include description text",
            "type": "boolean",
            "description": "Include the job description as plain text. Turn off for faster runs on SmartRecruiters and Workable (one less request per job). Same price either way.",
            "default": true
          },
          "stateStoreName": {
            "title": "Dedupe store name",
            "type": "string",
            "description": "Name of the key-value store that remembers which jobs you already received. Use a different name per feed or customer, or change it to start fresh. Example: \"acme-weekly-feed\".",
            "default": "ats-open-roles-seen"
          },
          "monitorMode": {
            "title": "Monitor mode (only new or changed)",
            "type": "boolean",
            "description": "Recurring-run mode: return only jobs that are new or whose title, location, department, employment type or URL changed since the last monitor run (use a high enough Max jobs per company so the whole board is covered). The first run is a baseline and returns every matching job. Unchanged jobs are not returned and not charged. Each row gets a changeType of new or changed.",
            "default": false
          },
          "reportRemoved": {
            "title": "Also report removed (monitor mode)",
            "type": "boolean",
            "description": "With monitor mode on, also emit one row with changeType \"removed\" for jobs that were on a company's career board in an earlier run and are gone now, only for companies whose full job board was read this run. Removed rows are free: they are not charged and never count toward your charge limit or max results. Nothing is reported as removed on the baseline run, when the fetch was incomplete or hit a cap, or when your input filters changed since the baseline (the next run re-learns the baseline instead). Default off.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the saved baseline. Use a different name per watch list so schedules do not overwrite each other. Default is 'default'. Example: \"eng-hiring\".",
            "default": "default"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}