{
  "openapi": "3.0.1",
  "info": {
    "title": "AI/ML Jobs Feed + Careers Page Scrape",
    "description": "Get every open job from any company's careers board in one clean, unified format. Paste company names or careers-page URLs; the Actor detects the ATS (Greenhouse, Lever, Ashby, Workable, Recruitee, SmartRecruiters) and returns titles, locations, remote flag, salary, dates and full descriptions.",
    "version": "1.0",
    "x-build-id": "T1R9dGYIDyfPs2UPQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/hardened_metapod~ats-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-hardened_metapod-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/hardened_metapod~ats-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-hardened_metapod-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/hardened_metapod~ats-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-hardened_metapod-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "generic",
              "aiMlDaily"
            ],
            "type": "string",
            "description": "\"AI/ML daily new jobs\" keeps only AI/ML roles (title taxonomy), drops staffing agencies and junk rows, merges reposts and multi-location duplicates, adds seniority/remote/annual-salary fields and, by default, returns only jobs not returned by earlier runs. Schedule it daily for a clean feed.",
            "default": "generic"
          },
          "companies": {
            "title": "Companies (slugs or careers URLs)",
            "type": "array",
            "description": "One per line. Accepts a board slug (\"stripe\"), an explicit ATS prefix (\"lever:spotify\", \"ashby:ramp\"), an ATS board URL (https://boards.greenhouse.io/airbnb, https://jobs.ashbyhq.com/ramp) or a company's own careers page (https://www.example.com/careers) – the Actor detects the embedded ATS. In \"AI/ML daily new jobs\" mode you can leave this empty to use the built-in list of 30 AI/ML employers.",
            "items": {
              "type": "string"
            }
          },
          "ats": {
            "title": "ATS for plain slugs",
            "enum": [
              "auto",
              "greenhouse",
              "lever",
              "ashby",
              "workable",
              "recruitee",
              "smartrecruiters"
            ],
            "type": "string",
            "description": "Which ATS to try for plain slugs. \"auto\" probes all supported ATSs in order and uses the first board that has jobs.",
            "default": "auto"
          },
          "includeDescription": {
            "title": "Include job descriptions",
            "type": "boolean",
            "description": "Adds descriptionText (clean plain text) and descriptionHtml. For SmartRecruiters this needs one extra request per job.",
            "default": true
          },
          "titleKeywords": {
            "title": "Title must contain (any)",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these words (case-insensitive). Filtering happens before charging – you only pay for matching jobs.",
            "items": {
              "type": "string"
            }
          },
          "excludeTitleKeywords": {
            "title": "Title must NOT contain",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words (e.g. \"intern\", \"senior\").",
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location contains (any)",
            "type": "array",
            "description": "Keep only jobs whose location/country contains one of these (e.g. \"London\", \"US\", \"Remote\").",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs flagged remote by the ATS or with 'remote' in the location.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within last N days",
            "minimum": 0,
            "type": "integer",
            "description": "0 = no date filter. Jobs without a posting date are kept.",
            "default": 0
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 0,
            "type": "integer",
            "description": "0 = unlimited.",
            "default": 0
          },
          "maxJobs": {
            "title": "Max jobs total",
            "minimum": 0,
            "type": "integer",
            "description": "0 = unlimited. The run also stops automatically when your 'Max cost per run' is reached.",
            "default": 0
          },
          "roleKeywords": {
            "title": "AI/ML title keywords (override)",
            "type": "array",
            "description": "AI/ML mode only. Leave empty to use the built-in taxonomy (machine learning, ML engineer, research scientist, LLM, inference, computer vision, NLP, data scientist, AI engineer…). If set, these keywords replace it. Short acronyms (ML, AI, NLP) match whole words only.",
            "items": {
              "type": "string"
            }
          },
          "excludeRoleKeywords": {
            "title": "Exclude titles containing",
            "type": "array",
            "description": "AI/ML mode only. Leave empty for the default list of non-technical roles (recruiter, sales, account executive, marketing, legal…). Provide your own list to replace it.",
            "items": {
              "type": "string"
            }
          },
          "onlyNewSinceLastRun": {
            "title": "Only jobs new since last run",
            "type": "boolean",
            "description": "AI/ML mode only. Remembers returned jobs (by normalized title + company + location) in the key-value store \"ats-jobs-state\" and skips them next time. Memory lasts 120 days.",
            "default": true
          },
          "stateKey": {
            "title": "State name",
            "type": "string",
            "description": "AI/ML mode only. Use a different name to keep separate 'seen' lists for different schedules or company lists.",
            "default": "ai-ml-daily"
          },
          "postedAfter": {
            "title": "Posted after (date)",
            "type": "string",
            "description": "AI/ML mode only. Skip jobs posted before this date (YYYY-MM-DD). Jobs without a posting date are kept."
          },
          "maxAgeDays": {
            "title": "Treat as expired after N days",
            "minimum": 0,
            "type": "integer",
            "description": "AI/ML mode only. Postings older than this are dropped as stale. 0 = off.",
            "default": 60
          },
          "mergeLocations": {
            "title": "Merge multi-location duplicates",
            "type": "boolean",
            "description": "AI/ML mode only. One row per role per company; extra locations are merged into allLocations.",
            "default": true
          },
          "excludeAgencies": {
            "title": "Exclude staffing / recruiting agencies",
            "type": "boolean",
            "description": "AI/ML mode only. Drops postings from known staffing agencies or whose company name/description reads like an agency ('our client', 'staffing firm', C2C…).",
            "default": true
          },
          "extraAgencyNames": {
            "title": "Extra agency names to exclude",
            "type": "array",
            "description": "AI/ML mode only. Added to the built-in agency list.",
            "items": {
              "type": "string"
            }
          },
          "concurrency": {
            "title": "Companies in parallel",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many companies to fetch at once.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}