{
  "openapi": "3.0.1",
  "info": {
    "title": "Company Career Page Jobs Scraper",
    "description": "Give it company domains or careers URLs: it detects the ATS (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee, Personio) and returns every open job in one normalized schema with salary, remote flag and dates, plus an only-new-jobs mode for monitoring.",
    "version": "1.0",
    "x-build-id": "18z1ofsGhaGgmZBZS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/frank_conifer_af4~company-careers-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-frank_conifer_af4-company-careers-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/frank_conifer_af4~company-careers-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-frank_conifer_af4-company-careers-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/frank_conifer_af4~company-careers-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-frank_conifer_af4-company-careers-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": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Companies (domains, careers pages or ATS board URLs)",
            "minItems": 1,
            "maxItems": 10000,
            "type": "array",
            "description": "One company per line. Accepts a company domain (linear.app), a careers page URL (https://acme.com/careers) or a direct ATS board URL: boards.greenhouse.io/x, job-boards.greenhouse.io/x, jobs.lever.co/x, jobs.ashbyhq.com/x, x.wd5.myworkdayjobs.com/Site, jobs.smartrecruiters.com/X, apply.workable.com/x, x.recruitee.com, x.jobs.personio.de. Direct ATS URLs are fastest. For domains the Actor guesses the board (Greenhouse, Lever, Ashby) with a sanity check, then scans the homepage and careers pages for ATS links.",
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Upper limit of job rows per company after filters. This caps your cost: each job row is one charged event. On Workday and SmartRecruiters it also limits how many result pages are requested.",
            "default": 200
          },
          "titleKeywords": {
            "title": "Job title contains (any)",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these words or phrases (case-insensitive), for example engineer, sales, product manager. Leave empty for all jobs. Filtered-out jobs are not charged.",
            "items": {
              "type": "string"
            }
          },
          "excludeTitleKeywords": {
            "title": "Job title must not contain",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words (case-insensitive), for example intern, senior, director.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Location contains (any)",
            "type": "array",
            "description": "Keep only jobs where at least one location contains one of these texts (case-insensitive substring), for example Berlin, United Kingdom, CA, Remote. The value remote also matches jobs flagged as remote.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs marked remote by the ATS (or with Remote in the location). Hybrid jobs are excluded.",
            "default": false
          },
          "departments": {
            "title": "Department or team contains (any)",
            "type": "array",
            "description": "Keep only jobs whose department or team contains one of these texts, for example Engineering, Sales. Not available for Workday boards, whose public API has no department field.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep only jobs first published in the last N days. Jobs without a publish date are dropped when this is set. Leave empty for all dates."
          },
          "includeDescription": {
            "title": "Include job description (plain text)",
            "type": "boolean",
            "description": "Adds descriptionText to every job. Free on most ATSs. On Workday and SmartRecruiters it needs one extra request per job, so turning it off makes those boards much faster. Salary parsing from pay-transparency text also needs the description on those two ATSs.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Also include description HTML",
            "type": "boolean",
            "description": "Adds descriptionHtml (the original formatted description) next to the plain text. Makes the dataset larger.",
            "default": false
          },
          "onlyNewJobs": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "Monitoring mode. Job IDs per company are stored in the named key-value store below. Each run outputs (and charges) only jobs that were not seen before, and the SUMMARY record reports new and removed jobs per company. The first run outputs every job as the baseline. Schedule the Actor daily or weekly with the same store name.",
            "default": false
          },
          "snapshotStoreName": {
            "title": "Snapshot store name",
            "type": "string",
            "description": "Named key-value store that keeps the job IDs between runs (only used with Only new jobs). Use a different name per watchlist or schedule to keep separate baselines. Lowercase letters, digits and hyphens.",
            "default": "company-careers-jobs-snapshots"
          },
          "webhookUrl": {
            "title": "Webhook URL for new jobs",
            "type": "string",
            "description": "Optional. After the run, a JSON summary of the jobs found per company (new jobs in monitoring mode) is POSTed here, only when there is at least one job. The payload has a Slack-compatible text field, so a Slack incoming webhook URL works directly. Not charged."
          },
          "maxConcurrency": {
            "title": "Companies processed in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many companies are handled at the same time. Requests to any single host are always limited to about 2 per second, so very high values mostly help with long lists of different companies.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. ATS APIs work without a proxy. A proxy can help when scanning company websites that block data-center traffic. Leave empty to use direct requests."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}