{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse, Lever and Ashby Jobs Scraper",
    "version": "0.1",
    "x-build-id": "7GQfnf2usoeWMHu5m"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/bravona~ats-jobs-greenhouse-lever-ashby/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-bravona-ats-jobs-greenhouse-lever-ashby",
        "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/bravona~ats-jobs-greenhouse-lever-ashby/runs": {
      "post": {
        "operationId": "runs-sync-bravona-ats-jobs-greenhouse-lever-ashby",
        "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/bravona~ats-jobs-greenhouse-lever-ashby/run-sync": {
      "post": {
        "operationId": "run-sync-bravona-ats-jobs-greenhouse-lever-ashby",
        "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",
            "minItems": 1,
            "maxItems": 500,
            "type": "array",
            "description": "Required. 1 to 500 company board names (slugs) or careers URLs on Greenhouse, Lever or Ashby, e.g. \"airbnb\" or https://jobs.lever.co/spotify. Accepted URLs: boards.greenhouse.io/X, job-boards.greenhouse.io/X, jobs.lever.co/X, jobs.eu.lever.co/X, jobs.ashbyhq.com/X. Duplicates are removed. Each new or open job saved is billed; see Pricing.",
            "items": {
              "type": "string"
            }
          },
          "ats": {
            "title": "ATS",
            "enum": [
              "auto",
              "greenhouse",
              "lever",
              "ashby"
            ],
            "type": "string",
            "description": "Optional, default auto. auto: a careers URL decides the ATS; for a bare slug the Actor checks Greenhouse, Lever (US, then EU) and Ashby, uses the board with the most jobs, and caches the result for later runs. Pick one ATS to skip detection for every bare slug (URLs still win).",
            "default": "auto"
          },
          "titleKeywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Optional. Keep a job if its title contains any of these words (not case-sensitive), e.g. \"data engineer\". Leave empty to keep all. Filtered-out jobs are not output or charged.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Optional. Keep a job if its location (or one of its other listed locations) contains any of these entries, not case-sensitive, e.g. \"New York\". \"Remote\" also matches jobs flagged remote. Leave empty for all.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Only keep remote jobs (isRemote = true). Default off. Combined with the other filters using AND.",
            "default": false
          },
          "includeDescription": {
            "title": "Job description",
            "enum": [
              "text",
              "html",
              "none"
            ],
            "type": "string",
            "description": "Include the description as plain text (descriptionText), HTML (descriptionHtml), or not at all. Default text. Email addresses are removed.",
            "default": "text"
          },
          "onlyNewSinceLastRun": {
            "title": "Only new since last run",
            "type": "boolean",
            "description": "Every record always has a status (new, open or closed). Turn this on to output only new and closed records (closed records are free). Use with a schedule to be charged only for new jobs. Default off. On the first run under a state key every job is new.",
            "default": false
          },
          "maxJobs": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum records to output in total, all companies and statuses. Default 10,000, from 1 to 100,000. Caps cost. Companies after the cap is reached are skipped and keep their state.",
            "default": 10000
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum records to output for each company, all statuses. No limit by default (1 to 100,000). Caps cost. Jobs cut off are not marked as seen, so they come back as new on a later run."
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Optional. Name of the change-tracking state. Default: derived from the sorted company list (jobs-<hash>), so a different company list starts fresh. Set your own (letters, digits, - _ . ; up to 100 characters) to keep state when you edit the list, or to give two tasks separate state. State lives in the named key-value store bravona-ats-jobs-state under <stateKey>--<company>."
          },
          "resetState": {
            "title": "Reset state before the run",
            "type": "boolean",
            "description": "Optional, default false. When true, deletes the stored state for this state key first, so every current job comes back as new and nothing is reported closed.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}