{
  "openapi": "3.0.1",
  "info": {
    "title": "Career Site Jobs Scraper (Workday, Greenhouse, Lever & more)",
    "description": "Open jobs from company career sites on 12 ATSs (Workday, Greenhouse, Lever, Ashby, Workable, Personio & more) in one schema. Paste careers URLs or domains, or search thousands of companies at once by title and country. Get only new jobs; pay per matching job.",
    "version": "0.2",
    "x-build-id": "hZdkVFPo9JjSJxPgp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/folt~ats-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-folt-ats-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/folt~ats-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-folt-ats-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/folt~ats-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-folt-ats-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",
            "type": "array",
            "description": "One company per line. Accepts a job board or careers URL (e.g. https://jobs.lever.co/spotify, https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite), a company domain (e.g. gitlab.com), or an explicit ats:slug pair (greenhouse:gitlab, lever:spotify, ashby:openai, smartrecruiters:Wix2, workable:huggingface, recruitee:tbibank, teamtailor:polestar, personio:fadata-group, breezy:navaide, pinpoint:carto, bamboohr:prezi). Workday companies need the careers site URL; Breezy HR, Pinpoint and BambooHR need the board URL, the ats:slug pair, or a careers page that links to the board.",
            "items": {
              "type": "string"
            }
          },
          "searchAllCompanies": {
            "title": "Search all companies (company directory)",
            "type": "boolean",
            "description": "Also search the open jobs of every company in the Folt Labs company directory — thousands of companies hiring on Greenhouse, Ashby, SmartRecruiters, Teamtailor, Personio, Lever and Recruitee — without listing them yourself. Needs at least one filter below (job title, country, location or department). Every company is checked live at run time. Costs $0.05 per 1,000 companies checked plus $1.50 per 1,000 matching jobs. Needs at least 1 GB of run memory (the default).",
            "default": false
          },
          "directoryAts": {
            "title": "Directory: job platforms",
            "type": "array",
            "description": "Search only companies on these platforms. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "ashby",
                "smartrecruiters",
                "teamtailor",
                "personio",
                "lever",
                "recruitee"
              ],
              "enumTitles": [
                "Greenhouse",
                "Ashby",
                "SmartRecruiters",
                "Teamtailor",
                "Personio",
                "Lever",
                "Recruitee"
              ]
            }
          },
          "maxDirectoryCompanies": {
            "title": "Directory: max companies to scan",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Largest companies are scanned first. With a country filter, only companies that had jobs in those countries (or mostly unlabelled/remote locations) are scanned. Leave empty to scan all that match."
          },
          "descriptionFormat": {
            "title": "Job description format",
            "enum": [
              "text",
              "html",
              "none"
            ],
            "type": "string",
            "description": "Plain text is best for AI/LLM pipelines and spreadsheets. Choose 'none' for the fastest, smallest output.",
            "default": "text"
          },
          "changeDetection": {
            "title": "Change detection",
            "enum": [
              "off",
              "new",
              "new_and_removed"
            ],
            "type": "string",
            "description": "Return all jobs, only jobs that are new since your previous run, or new jobs plus jobs that disappeared. Jobs are charged only when returned, so monitoring runs with nothing new cost almost nothing (the run fee plus $0.05 per 1,000 companies checked).",
            "default": "off"
          },
          "stateKey": {
            "title": "Watchlist name",
            "pattern": "^[a-zA-Z0-9-]{0,60}$",
            "type": "string",
            "description": "Names the memory used by change detection. Runs with the same name compare against each other. Leave empty to derive it from the company list."
          },
          "titleKeywords": {
            "title": "Title must contain (any)",
            "type": "array",
            "description": "Keep jobs whose title contains at least one of these words or phrases (case-insensitive).",
            "items": {
              "type": "string"
            }
          },
          "excludeTitleKeywords": {
            "title": "Title must not contain",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words or phrases (case-insensitive).",
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location contains (any)",
            "type": "array",
            "description": "Keep jobs whose location text contains at least one of these (e.g. Berlin, London, Remote).",
            "items": {
              "type": "string"
            }
          },
          "countryCodes": {
            "title": "Country codes",
            "type": "array",
            "description": "Keep jobs in these countries (ISO 3166-1 alpha-2, e.g. DE, GB, US). Jobs whose ATS does not report a country are kept only if their location text matches the country name.",
            "items": {
              "type": "string"
            }
          },
          "workplaceTypes": {
            "title": "Workplace type",
            "type": "array",
            "description": "Keep only these workplace types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "departmentKeywords": {
            "title": "Department/team contains (any)",
            "type": "array",
            "description": "Keep jobs whose department or team contains one of these (e.g. Engineering, Sales).",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Keep jobs first published within this many days. Jobs without a publish date are kept."
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many matching jobs per company. 0 means no limit.",
            "default": 0
          },
          "redactContactDetails": {
            "title": "Redact emails and phone numbers in descriptions",
            "type": "boolean",
            "description": "Replaces email addresses and phone numbers found in job descriptions with [redacted]. Recruiter names and contact fields from the ATS are never included.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many companies to process in parallel. Default: 5 for your company list, 10 when searching the directory."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}