{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Jobs API with Salary: Greenhouse, Lever, Ashby & more",
    "description": "Every open job from any company on Greenhouse, Lever, Ashby, Workable, Recruitee or Personio: salary as numbers, and what changed since your last run. $1.20 per 1,000 jobs. Fields: salaryMin, salaryMax, salaryCurrency, salaryInterval, salarySource, changeStatus (new, changed, closed).",
    "version": "1.0",
    "x-build-id": "hnWaAtHhmVAzNi4BC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/flipvo~ats-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-flipvo-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/flipvo~ats-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-flipvo-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/flipvo~ats-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-flipvo-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": {
          "boards": {
            "title": "Companies",
            "maxItems": 200,
            "type": "array",
            "description": "Companies to read: a name (`airbnb`), a careers or board URL (`https://jobs.lever.co/spotify`), or `vendor:token` with vendor greenhouse, lever, ashby, workable, recruitee or personio (`greenhouse:stripe`). A name or careers URL tries the vendors in that order and uses the first board with open jobs; SUMMARY says which. A bare name matches the exact board token, which may be another company: paste its board URL then. Max 200 with presets. Omit boards and presets only for a demo run.",
            "items": {
              "type": "string"
            }
          },
          "presets": {
            "title": "Presets",
            "type": "array",
            "description": "Ready-made board lists, added to boards. `ai-labs`: AI labs and AI-native companies. `devtools`: developer tools and infrastructure. Each list only holds boards checked live (reading time in the README).",
            "items": {
              "type": "string",
              "enum": [
                "ai-labs",
                "devtools"
              ],
              "enumTitles": [
                "AI labs and AI-native companies",
                "Developer tools and infrastructure"
              ]
            }
          },
          "keywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Keep a job when its title or department contains any of these words (case-insensitive). Leave empty to keep all jobs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep a job when its location contains any of these texts (for example `Remote`, `New York`, `Germany`). Leave empty to keep all locations.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs the employer marks or labels as remote.",
            "default": false
          },
          "onlyWithSalary": {
            "title": "Only jobs with a published salary",
            "type": "boolean",
            "description": "Keep only jobs with a salary range: the structured one the employer filled in or, failing that, a range such as $150,000 - $200,000 written in the job description. Rows say which in `salarySource`.",
            "default": false
          },
          "includeDescription": {
            "title": "Include description text",
            "type": "boolean",
            "description": "Add the plain-text job description to each row. Makes the Greenhouse response about ten times larger (Lever, Ashby, Workable, Recruitee and Personio already send the text). The department and the salary are filled either way.",
            "default": false
          },
          "onlyChanges": {
            "title": "Only new and changed jobs",
            "type": "boolean",
            "description": "Compare with the previous run of the same boards and deliver (and charge for) only jobs that are new or changed. Also adds a free row with `changeStatus: closed` for each job that has left the board since the previous run. The first run delivers everything. State is kept in the key-value store `ats-jobs-scraper-state` of your account.",
            "default": false
          },
          "maxJobsPerBoard": {
            "title": "Max jobs per board",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop delivering from a board after this many jobs that match your filters. With \"Only new and changed jobs\" on, the cap counts only new and changed jobs, so a change far down a large board is still delivered.",
            "default": 1000
          },
          "maxJobsTotal": {
            "title": "Max jobs in total",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop the run after this many delivered jobs. Use it as a budget cap.",
            "default": 1000
          },
          "requestDelayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 200,
            "maximum": 10000,
            "type": "integer",
            "description": "Minimum wait between two requests to the same host. A longer Crawl-delay in the host's robots.txt always wins (Lever asks for 1 second).",
            "default": 500
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 6,
            "type": "integer",
            "description": "Retries with exponential backoff for rate-limit (429), server (5xx) and network errors. Retry-After headers are honored.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}