{
  "openapi": "3.0.1",
  "info": {
    "title": "Career Site Jobs Feed: New Job Postings Monitor",
    "description": "A feed of new job postings straight from company career sites: search a built-in directory of 692 boards or your own list, filter by time range, title, location, salary and visa sponsorship, and get only new jobs on each scheduled run. Expired-job tracking. $2 per 1,000 jobs.",
    "version": "0.1",
    "x-build-id": "OwOUJ4jHACwWsc4ze"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fecklesspleb~career-site-jobs-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fecklesspleb-career-site-jobs-feed",
        "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/fecklesspleb~career-site-jobs-feed/runs": {
      "post": {
        "operationId": "runs-sync-fecklesspleb-career-site-jobs-feed",
        "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/fecklesspleb~career-site-jobs-feed/run-sync": {
      "post": {
        "operationId": "run-sync-fecklesspleb-career-site-jobs-feed",
        "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": {
          "timeRange": {
            "title": "Posted within",
            "enum": [
              "1h",
              "24h",
              "7d",
              "30d",
              "all"
            ],
            "type": "string",
            "description": "Only jobs whose ATS publish or update date falls in this window. Left empty, the last 7 days are used. Jobs without a date are left out unless 'Include undated jobs' is on."
          },
          "titleSearch": {
            "title": "Job title search",
            "type": "array",
            "description": "Keep jobs whose title matches. Each list item is one alternative (OR). Words inside an item must all appear, as whole words. End a word with * to match a prefix (engineer* matches engineering). Put a phrase in \"double quotes\" to keep it together.",
            "items": {
              "type": "string"
            }
          },
          "titleExclusionSearch": {
            "title": "Job title exclusion",
            "type": "array",
            "description": "Drop jobs whose title matches any item. Same syntax as the title search.",
            "items": {
              "type": "string"
            }
          },
          "locationSearch": {
            "title": "Location search",
            "type": "array",
            "description": "Keep jobs whose location text matches (city, region or country as the company wrote it). 'remote' also matches jobs the ATS marks as remote. Each list item is one alternative (OR). Words inside an item must all appear, as whole words. End a word with * to match a prefix (engineer* matches engineering). Put a phrase in \"double quotes\" to keep it together.",
            "items": {
              "type": "string"
            }
          },
          "locationExclusionSearch": {
            "title": "Location exclusion",
            "type": "array",
            "description": "Drop jobs whose location text matches any item.",
            "items": {
              "type": "string"
            }
          },
          "descriptionSearch": {
            "title": "Description search",
            "type": "array",
            "description": "Keep jobs whose description matches. Same syntax as the title search.",
            "items": {
              "type": "string"
            }
          },
          "descriptionExclusionSearch": {
            "title": "Description exclusion",
            "type": "array",
            "description": "Drop jobs whose description matches any item.",
            "items": {
              "type": "string"
            }
          },
          "organizationSearch": {
            "title": "Company name search",
            "type": "array",
            "description": "Keep only these companies. For the built-in directory this is applied to company names before any request, so a narrow search is fast and cheap.",
            "items": {
              "type": "string"
            }
          },
          "organizationExclusionSearch": {
            "title": "Company name exclusion",
            "type": "array",
            "description": "Leave these companies out (also applied to the directory before any request).",
            "items": {
              "type": "string"
            }
          },
          "atsFilter": {
            "title": "ATS platforms",
            "uniqueItems": true,
            "type": "array",
            "description": "Read only these ATS platforms (directory and your own companies). Empty means all supported platforms.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby",
                "workable",
                "recruitee",
                "teamtailor"
              ],
              "enumTitles": [
                "Greenhouse",
                "Lever",
                "Ashby",
                "Workable",
                "Recruitee",
                "Teamtailor"
              ]
            }
          },
          "workArrangement": {
            "title": "Work arrangement",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep jobs with one of these arrangements (derived from the ATS field, location and title). Jobs with no detectable arrangement are left out when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "employmentTypes": {
            "title": "Employment type",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep jobs whose normalised employment type is one of these. Jobs whose ATS gives no type are left out when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "FULL_TIME",
                "PART_TIME",
                "CONTRACTOR",
                "TEMPORARY",
                "INTERN",
                "PER_DIEM",
                "VOLUNTEER",
                "OTHER"
              ],
              "enumTitles": [
                "Full time",
                "Part time",
                "Contractor",
                "Temporary",
                "Internship",
                "Per diem",
                "Volunteer",
                "Other"
              ]
            }
          },
          "seniority": {
            "title": "Seniority",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep jobs with one of these seniority levels (derived from the title). Jobs whose title shows no level are left out when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "staff",
                "lead",
                "principal",
                "manager",
                "director",
                "vp",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Junior / entry",
                "Mid",
                "Senior",
                "Staff",
                "Lead",
                "Principal",
                "Manager",
                "Director",
                "VP",
                "Executive"
              ]
            }
          },
          "minAnnualSalary": {
            "title": "Minimum annual salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs that publish a salary whose annualised top (or bottom, if only one is given) is at least this. Jobs without a salary are left out when this is set."
          },
          "salaryCurrency": {
            "title": "Salary currency",
            "type": "string",
            "description": "With 'Minimum annual salary': also require this ISO currency code."
          },
          "hasSalary": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Return only jobs that state a salary, from the ATS's pay field or a range in the description (any currency or period). Jobs without one are dropped before they are output, so they are never charged.",
            "default": false
          },
          "minAnnualSalaryUsd": {
            "title": "Minimum annual salary (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep jobs whose annual salary in US dollars reaches this amount (the top of the range, or its only figure, is at least this). Salaries are annualised (hour x 2,080, day x 260, week x 52, month x 12) and converted with a fixed rate table bundled with the Actor (rough reference rates, see salaryAnnualUsdMin). Jobs whose salary cannot be converted (none given, no pay period, or an unlisted currency) are dropped unless 'Keep jobs without a salary' is on."
          },
          "maxAnnualSalaryUsd": {
            "title": "Maximum annual salary (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep jobs whose annual USD salary starts at or below this amount (the bottom of the range, or its only figure). Same conversion and handling of jobs without a convertible salary as the minimum."
          },
          "includeJobsWithoutSalary": {
            "title": "Keep jobs without a salary",
            "type": "boolean",
            "description": "With a minimum or maximum annual USD salary set, also keep jobs whose salary is missing or cannot be converted. Ignored when 'Only jobs with a salary' is on (jobs with no salary are dropped) and when no USD bound is set.",
            "default": false
          },
          "visaSponsorship": {
            "title": "Visa sponsorship",
            "enum": [
              "any",
              "yes",
              "not_no"
            ],
            "type": "string",
            "description": "Filter on visaSponsorship, read from the description text (yes / no / not stated). Pattern-based, not a legal statement by the employer.",
            "default": "any"
          },
          "maxYearsExperience": {
            "title": "Max years of experience required",
            "minimum": 0,
            "maximum": 30,
            "type": "integer",
            "description": "Drop jobs whose description asks for more years than this (e.g. 2 for early-career). Jobs that state no number are kept."
          },
          "excludeAgencies": {
            "title": "Exclude recruiting agencies",
            "type": "boolean",
            "description": "Leave out jobs that look like they were posted by a staffing or recruitment agency: the company name (e.g. Randstad, Hays, \"… Staffing\", \"… Recruitment\", \"Personalberatung\") or wording such as \"on behalf of our client\" or \"für unseren Kunden suchen wir\" in the description. It is a heuristic, so check the isAgency field before relying on it. Every job carries isAgency whether or not this is on; excluded jobs are never output or charged.",
            "default": false
          },
          "dedupeBy": {
            "title": "Remove duplicate jobs",
            "enum": [
              "none",
              "job",
              "companyTitle"
            ],
            "type": "string",
            "description": "Drop duplicates inside this run before they are output, so you never pay for them. <b>None</b>: every job is output (as before). <b>Same job</b>: a job with the same company, title and first location as one already output in this run is dropped (the dedupeKey field). <b>Same company and title (merge locations)</b>: jobs of one company with the same title are output as one record whose locations list holds all their locations, with duplicateCount and mergedUids; such records are output when the company's board has been read. Duplicates of jobs output by earlier runs are not affected (use Only new jobs for that).",
            "default": "none"
          },
          "departments": {
            "title": "Department or team",
            "type": "array",
            "description": "Keep jobs whose department or team matches. Same syntax as the title search.",
            "items": {
              "type": "string"
            }
          },
          "includeUndatedJobs": {
            "title": "Include undated jobs",
            "type": "boolean",
            "description": "Keep jobs that carry no posted date when 'Posted within' is not 'Any time'.",
            "default": false
          },
          "companies": {
            "title": "Companies (optional)",
            "type": "array",
            "description": "Leave empty to search the built-in directory of public career boards. Or list your own: a board URL (https://boards.greenhouse.io/airbnb, https://jobs.lever.co/palantir, https://jobs.ashbyhq.com/ramp, https://apply.workable.com/huggingface, https://bunq.recruitee.com, https://proxima.teamtailor.com), 'ats:slug' such as 'greenhouse:airbnb', a bare slug or company name (each supported ATS is tried), or a careers page that embeds one of these boards. Workday, SmartRecruiters and Personio are not supported. Up to 2,000 entries.",
            "items": {
              "type": "string"
            }
          },
          "searchDirectory": {
            "title": "Search the built-in company directory",
            "type": "boolean",
            "description": "On by default when 'Companies' is empty; turn on to search the directory as well as your own list, or off to never use it. The directory holds about 690 verified public Greenhouse, Ashby and Lever boards (startups and tech companies), refreshed with each Actor version."
          },
          "maxDirectoryCompanies": {
            "title": "Max directory companies",
            "minimum": 0,
            "type": "integer",
            "description": "Use only the N largest directory boards. Left empty: 100, which keeps a run to about 20 seconds. 0 means the whole directory (692 boards, about 3 minutes)."
          },
          "includeExpired": {
            "title": "Report expired jobs",
            "type": "boolean",
            "description": "On scheduled runs, add a free record with status 'expired' for each job an earlier run returned that its board no longer lists. Only boards read completely in this run are checked. Uses the state store.",
            "default": false
          },
          "onlyNewJobs": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Return only jobs not returned by an earlier run with the same state store, so a schedule gives a clean feed and you pay only for new jobs.",
            "default": false
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store for 'Only new jobs', 'Report expired jobs' and first-seen dates. Use a different name per independent feed.",
            "default": "career-site-jobs-feed-state"
          },
          "trackFirstSeen": {
            "title": "Track first-seen dates",
            "type": "boolean",
            "description": "Keep firstSeenAt across runs without dropping jobs you already got.",
            "default": false
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Write the job description to the output. Descriptions are always read for the enrichment (visa, experience, skills).",
            "default": true
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "text",
              "html",
              "both"
            ],
            "type": "string",
            "description": "Plain text, HTML, or both.",
            "default": "text"
          },
          "redactContacts": {
            "title": "Remove contact details from descriptions",
            "type": "boolean",
            "description": "Replace e-mail addresses, phone numbers and 'Your recruiter: <name>' lines with placeholders. The Actor never outputs recruiter or hiring-manager fields.",
            "default": true
          },
          "maxItems": {
            "title": "Max jobs in total",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many paid jobs. Left empty: 100. 0 means no limit. The run also stops at your 'Maximum cost per run'. The form is prefilled with 4 for a cheap demo run (4 x $0.002 = $0.008); raise it for real runs. An empty input {} is the same demo: it stops at 4 jobs. Any value you set other than 4 (100 included) is a real run."
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many matching jobs per company. 0 means no limit. A capped board is not checked for expired jobs.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Companies in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many boards to read at once. Requests to each host are spaced regardless (robots.txt Crawl-delay is honoured).",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}