{
  "openapi": "3.0.1",
  "info": {
    "title": "Job Search Scraper — Live Jobs Direct from Company Career Pages",
    "description": "Live jobs read straight from 768 employers' career pages on 17 ATS platforms (Greenhouse, Workday, Lever, Ashby, SuccessFactors, Oracle). No reposts, no ghost jobs. Filter by title, keyword, category, location, remote, salary, experience and visa.",
    "version": "1.0",
    "x-build-id": "Zczm8eIQsgep63S1T"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/spool~job-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-spool-job-search",
        "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/spool~job-search/runs": {
      "post": {
        "operationId": "runs-sync-spool-job-search",
        "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/spool~job-search/run-sync": {
      "post": {
        "operationId": "run-sync-spool-job-search",
        "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": {
          "jobTitles": {
            "title": "1. Job titles",
            "type": "array",
            "description": "Roles to look for, one per line: `Software Engineer`, `Account Executive`, `Data Analyst`. A posting matches when the whole phrase appears in its title or every word of it does (`machine learning engineer` matches *Senior Engineer, Machine Learning*). Leave empty to search by keywords or category alone.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "2. Keywords (any of them)",
            "type": "array",
            "description": "Skills, technologies or words that must appear in the title or the posting text: `Python`, `Kubernetes`, `HIPAA`, `Salesforce`. Any keyword matching is enough (OR). Used together with job titles, a posting must satisfy both.",
            "items": {
              "type": "string"
            }
          },
          "jobCategories": {
            "title": "3. Job categories",
            "type": "array",
            "description": "Keep postings filed under these categories (30 categories, derived from the title and the employer's department label).",
            "items": {
              "type": "string",
              "enum": [
                "Software Engineering",
                "AI & Machine Learning",
                "Data & Analytics",
                "DevOps & Infrastructure",
                "Security",
                "Quality Assurance",
                "IT & Support",
                "Product Management",
                "Design & UX",
                "Project & Program Management",
                "Sales",
                "Marketing",
                "Customer Success & Support",
                "Finance & Accounting",
                "Legal & Compliance",
                "HR & Recruiting",
                "Consulting & Strategy",
                "Operations",
                "Supply Chain & Logistics",
                "Manufacturing & Hardware",
                "Skilled Trades & Field",
                "Healthcare & Life Sciences",
                "Research & Science",
                "Education & Training",
                "Content & Communications",
                "Administrative",
                "Retail & Hospitality",
                "Real Estate & Construction",
                "Executive & Leadership",
                "Other"
              ]
            }
          },
          "workplaceType": {
            "title": "4. Workplace type",
            "type": "array",
            "description": "Remote, hybrid or on-site, read from the employer's own location label and the posting text. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ]
            }
          },
          "location": {
            "title": "5. Location contains",
            "type": "string",
            "description": "Keep postings whose location mentions this text: `New York`, `London`, `Texas`, `Germany`. Matched against the employer's location label and the parsed city, region and country."
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Two-letter country codes to keep: `US`, `GB`, `DE`, `IN`. Parsed from the location label or a known city. Postings with no recognisable country are kept unless you also set a location.",
            "items": {
              "type": "string"
            }
          },
          "employmentType": {
            "title": "Employment type",
            "type": "array",
            "description": "Full-time, part-time, contract, internship or temporary. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "fulltime",
                "parttime",
                "contract",
                "internship",
                "temporary"
              ]
            }
          },
          "experienceLevel": {
            "title": "Experience level",
            "type": "array",
            "description": "Seniority read from the title: junior, mid, senior, manager, director, executive.",
            "items": {
              "type": "string",
              "enum": [
                "junior",
                "mid",
                "senior",
                "manager",
                "director",
                "executive"
              ]
            }
          },
          "minYearsExperience": {
            "title": "Years of experience, at least",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Keep postings asking for at least this many years (`5+ years of experience`). Postings that state no number are kept."
          },
          "maxYearsExperience": {
            "title": "Years of experience, at most",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Keep postings whose minimum requirement is at most this many years. `2` keeps entry-level and early-career roles. Postings that state no number are kept."
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep postings the employer published or updated within this many days. Postings that carry no date are left out when this is set (Rippling and Breezy boards publish none; Workday-type boards only for the roles whose details were read). Empty = all open roles."
          },
          "atsPlatforms": {
            "title": "ATS platforms",
            "type": "array",
            "description": "Only search employers on these systems. Leave empty for all 17.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "ashby",
                "lever",
                "workday",
                "smartrecruiters",
                "oracle",
                "successfactors",
                "phenom",
                "eightfold",
                "rippling",
                "breezy",
                "personio",
                "teamtailor",
                "pinpoint",
                "bamboohr",
                "recruitee",
                "amazon"
              ]
            }
          },
          "requireSalary": {
            "title": "Only postings that state a salary",
            "type": "boolean",
            "description": "Keep rows with a salary from the employer's structured fields or from a pay range stated in the posting text.",
            "default": false
          },
          "minSalaryUsd": {
            "title": "Minimum salary (USD, annualised)",
            "type": "integer",
            "description": "Compared against the annualised USD figure, so an hourly US wage and a monthly EUR salary are judged on one scale. Postings with no salary are dropped when this is set."
          },
          "visaSponsorship": {
            "title": "Only postings offering visa sponsorship",
            "type": "boolean",
            "description": "Keep postings whose text says sponsorship is available (`visa sponsorship available`, `H-1B transfers welcome`). Needs the posting text, so descriptions are read for every candidate. Postings that say sponsorship is not offered are marked `visaSponsorship: false` in the output.",
            "default": false
          },
          "requireTech": {
            "title": "Only postings naming these technologies",
            "type": "array",
            "description": "Keep rows whose text names any of these: `Kubernetes`, `Snowflake`, `Salesforce`, `React`… 190 technologies are recognised; spell them as in the `skills` output field.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Also search these companies",
            "type": "array",
            "description": "Employer names, domains or careers URLs, one per line (`Stripe`, `ramp.com`, `https://jobs.ashbyhq.com/openai`). Each is resolved to its public board, through its careers page if needed, and searched with the same filters. Up to 100.",
            "items": {
              "type": "string"
            }
          },
          "employerPool": {
            "title": "Verified employers to search",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "How many boards from the verified list of 1,129 to search, largest first. Rows start arriving within seconds; 300 covers the biggest employers in about four minutes, the whole list in about twelve. 0 searches only the companies you list.",
            "default": 300
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Stop after this many postings. Rows arrive as boards answer, so the first results land within seconds.",
            "default": 500
          },
          "dedupeMode": {
            "title": "Deduplicate results",
            "enum": [
              "location",
              "companyTitle",
              "none"
            ],
            "type": "string",
            "description": "`location` keeps one row per company, title and city (default). `companyTitle` collapses an employer's multi-location postings into one row. `none` keeps every posting.",
            "default": "location"
          },
          "maxDescriptionsPerBoard": {
            "title": "Max descriptions per Workday / Oracle / SuccessFactors / Phenom / Eightfold board",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Those platforms need one request per posting for its description; Greenhouse, Ashby and Lever send every description in the listing. Lower is faster.",
            "default": 30
          },
          "onlyNew": {
            "title": "Only new postings since the last run",
            "type": "boolean",
            "description": "Remember every posting this search has delivered and return only the ones not seen before. Memory is one record per search in a key-value store named `job-search-monitor` in your own account; postings not seen for 60 days are forgotten. Nothing delivered earlier is charged again.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the memory record. Leave empty and it is derived from the filters, so the same search always shares one memory. Set a name to share memory between searches, or change it to start fresh. It is a label, not a credential."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}