{
  "openapi": "3.0.1",
  "info": {
    "title": "Multi-ATS Jobs Feed + Change Alerts",
    "description": "Job postings from the official public job-board APIs of Greenhouse, Lever, Ashby, SmartRecruiters, Workable and Recruitee in one normalized schema. Scheduled runs return only new, updated and removed jobs.",
    "version": "0.1",
    "x-build-id": "NbefSI6iTyUoWVBYA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tallowlanelabs~multi-ats-jobs-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tallowlanelabs-multi-ats-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/tallowlanelabs~multi-ats-jobs-feed/runs": {
      "post": {
        "operationId": "runs-sync-tallowlanelabs-multi-ats-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/tallowlanelabs~multi-ats-jobs-feed/run-sync": {
      "post": {
        "operationId": "run-sync-tallowlanelabs-multi-ats-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",
        "required": [
          "boards"
        ],
        "properties": {
          "boards": {
            "title": "Company job boards",
            "type": "array",
            "description": "One entry per company. Accepts a job-board URL (boards.greenhouse.io/stripe, jobs.lever.co/palantir, jobs.ashbyhq.com/ramp, jobs.smartrecruiters.com/Ubisoft2, apply.workable.com/huggingface, bunq.recruitee.com), an \"ats:slug\" pair (greenhouse:stripe, lever:palantir, lever:eu:company, ashby:ramp, smartrecruiters:Ubisoft2, workable:huggingface, recruitee:bunq), a company careers-page URL (the Actor looks for an embedded ATS), or a bare slug (the Actor probes each ATS).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mode": {
            "title": "Output mode",
            "enum": [
              "changes",
              "snapshot"
            ],
            "type": "string",
            "description": "\"changes\" (default) returns only jobs that are new, updated or removed since the last run for each board; the first run for a board returns the full baseline. \"snapshot\" returns every current job on every run (each record still says whether it is new, updated or unchanged).",
            "default": "changes"
          },
          "changeTypes": {
            "title": "Change types to report",
            "type": "array",
            "description": "Which changes to output in \"changes\" mode.",
            "items": {
              "type": "string",
              "enum": [
                "new",
                "updated",
                "removed"
              ],
              "enumTitles": [
                "New jobs",
                "Updated jobs",
                "Removed (closed) jobs"
              ]
            },
            "default": [
              "new",
              "updated",
              "removed"
            ]
          },
          "emitBaseline": {
            "title": "Output the full board on the first run",
            "type": "boolean",
            "description": "In \"changes\" mode, the first run for a board has nothing to compare against. If on, all current jobs are output (charged as job items) with changeType \"baseline\". If off, the first run only stores the baseline silently (nothing output, nothing charged) and alerts start on the next run.",
            "default": true
          },
          "keywords": {
            "title": "Title keywords (any)",
            "type": "array",
            "description": "Only output jobs whose title contains at least one of these (case-insensitive). Leave empty for all.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude title keywords",
            "type": "array",
            "description": "Skip jobs whose title contains any of these.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations (any)",
            "type": "array",
            "description": "Only output jobs whose location, city, region or country contains one of these strings, e.g. \"New York\", \"Germany\", \"remote\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Departments / teams (any)",
            "type": "array",
            "description": "Only output jobs whose department or team contains one of these strings, e.g. \"Engineering\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "workplaceTypes": {
            "title": "Workplace types",
            "type": "array",
            "description": "Only output these workplace types. Empty = all. \"unknown\" covers postings that do not say.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite",
                "unknown"
              ]
            },
            "default": []
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Only output jobs first published within this many days (where the ATS gives a date)."
          },
          "maxJobsPerBoard": {
            "title": "Max jobs output per board",
            "minimum": 1,
            "type": "integer",
            "description": "Cap the number of records output per board per run (after filters). Change detection still sees the whole board."
          },
          "includeDescriptions": {
            "title": "Include job descriptions",
            "type": "boolean",
            "description": "Include the full description. Turning this off makes runs faster and smaller. For SmartRecruiters, descriptions need one extra request per output posting.",
            "default": true
          },
          "descriptionFormats": {
            "title": "Description formats",
            "type": "array",
            "description": "Formats to include when descriptions are on.",
            "items": {
              "type": "string",
              "enum": [
                "text",
                "markdown",
                "html"
              ]
            },
            "default": [
              "text",
              "markdown"
            ]
          },
          "redactContactInfo": {
            "title": "Mask emails and phone numbers in descriptions",
            "type": "boolean",
            "description": "Some employers put a recruiter email or phone in the public job text. Turn on to replace them with [email removed] / [phone removed].",
            "default": false
          },
          "includeUnlisted": {
            "title": "Include unlisted Ashby postings",
            "type": "boolean",
            "description": "Ashby marks some postings isListed=false (meant to be reachable only by direct link). They are skipped by default.",
            "default": false
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store that keeps each board's last-seen jobs between runs. Use a different name (or a key prefix) to run independent monitors.",
            "default": "multi-ats-jobs-feed-state"
          },
          "stateKeyPrefix": {
            "title": "State key prefix",
            "type": "string",
            "description": "Optional prefix so several saved tasks can monitor the same board independently.",
            "default": ""
          },
          "resetState": {
            "title": "Reset state (start a new baseline)",
            "type": "boolean",
            "description": "Ignore stored state for the boards in this run and treat it as a first run.",
            "default": false
          },
          "detectFromCareerPages": {
            "title": "Detect ATS from careers-page URLs",
            "type": "boolean",
            "description": "For URLs that are not an ATS domain, load the page once and look for an embedded Greenhouse/Lever/Ashby/SmartRecruiters/Workable/Recruitee board.",
            "default": true
          },
          "probeBareSlugs": {
            "title": "Probe bare slugs on every ATS",
            "type": "boolean",
            "description": "For entries like \"stripe\" with no ATS, try each ATS API until one answers (up to 6 requests).",
            "default": true
          },
          "boardConcurrency": {
            "title": "Boards in parallel",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "How many boards to process at once. Per-ATS rate limits still apply. Memory depends on the jobs on these boards: 512 MB (default) fits up to 7,500 live jobs across the boards processed at once (no single board over 5,000); use 1024 MB above that, or set this to 1 for very large boards.",
            "default": 3
          },
          "maxConcurrency": {
            "title": "Max parallel HTTP requests",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Global cap on in-flight requests across all ATS APIs.",
            "default": 4
          },
          "removalSafetyMinJobs": {
            "title": "Removal safety threshold",
            "minimum": 1,
            "type": "integer",
            "description": "If a board that had at least this many jobs suddenly returns zero, removals are not reported that run (it is usually an API hiccup).",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}