{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Job Listings API Scraper — 1,639 Boards, 6 Platforms",
    "description": "Query 1,639 verified job boards — 60,983 live roles across Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee and Workable. Filter by seniority, employment type, workplace, country, salary floor, plus keyword and company excludes. Schedule it and pay only for jobs you have not seen before.",
    "version": "1.0",
    "x-build-id": "JOIcwyb4z4ALUgal2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/deadwood_data_solutions~greenhouse-lever-ashby-workable-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-deadwood_data_solutions-greenhouse-lever-ashby-workable-jobs-api",
        "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/deadwood_data_solutions~greenhouse-lever-ashby-workable-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-deadwood_data_solutions-greenhouse-lever-ashby-workable-jobs-api",
        "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/deadwood_data_solutions~greenhouse-lever-ashby-workable-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-deadwood_data_solutions-greenhouse-lever-ashby-workable-jobs-api",
        "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": {
          "presetLists": {
            "title": "Company bundles - no company list needed",
            "type": "array",
            "description": "Curated, verified company bundles. Pick one and run: every slug was checked against the live board on 2026-08-24, so you do not have to research any yourself. Combine with your own entries below if you want both.",
            "items": {
              "type": "string",
              "enum": [
                "top-tech",
                "ai-ml",
                "devtools",
                "yc-backed",
                "fintech",
                "remote-first"
              ],
              "enumTitles": [
                "Top tech (83 companies)",
                "AI & machine learning (75 companies)",
                "Developer tools (65 companies)",
                "YC-backed (62 companies)",
                "Fintech (56 companies)",
                "Remote-first (54 companies)"
              ]
            }
          },
          "searchIndex": {
            "title": "Search every board we know - no company list at all",
            "type": "boolean",
            "description": "Ignore company lists entirely and query our index of 1,639 verified boards (60,983 open roles at last check, 2026-08-24). Combine with the title, location and remote filters below to pull, say, every remote senior backend role posted this week. Boards are fetched most-active first, up to \"Maximum boards to search\".",
            "default": false
          },
          "maxBoards": {
            "title": "Maximum boards to search",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Only used when the index search above is on. Each board is one request, so a higher number means a longer run. 200 covers the most active boards in the index."
          },
          "sources": {
            "title": "Sources (ats:company)",
            "type": "array",
            "description": "Each entry is \"<ats>:<company>\". Supported ats: greenhouse, lever, ashby, smartrecruiters, recruitee, workable. The company is the slug from that ATS's careers URL. Example: greenhouse:stripe, lever:ro, ashby:Ramp, smartrecruiters:Visa, recruitee:effectory, workable:walter-careers.",
            "items": {
              "type": "string"
            }
          },
          "maxPerCompany": {
            "title": "Maximum jobs per company",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many jobs from each board, so one large employer cannot fill the whole result. Recommended with bundles. Leave empty for no per-company cap."
          },
          "titleIncludes": {
            "title": "Title keywords (any match)",
            "type": "array",
            "description": "Keep only jobs whose title contains one of these (case-insensitive). Leave empty for all titles. E.g. engineer, product, sales.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Title keywords to exclude (any match drops the job)",
            "type": "array",
            "description": "Drop jobs whose title contains any of these (case-insensitive). Applied after the include list, so an exclude always wins. E.g. intern, manager, staffing.",
            "items": {
              "type": "string"
            }
          },
          "locationIncludes": {
            "title": "Location keywords (any match)",
            "type": "array",
            "description": "Keep only jobs whose location contains one of these (case-insensitive). Leave empty for all locations. E.g. new york, london, remote.",
            "items": {
              "type": "string"
            }
          },
          "locationExcludes": {
            "title": "Location keywords to exclude (any match drops the job)",
            "type": "array",
            "description": "Drop jobs whose location contains any of these (case-insensitive). Useful to strip regions you cannot hire in. E.g. india, brazil, on-site.",
            "items": {
              "type": "string"
            }
          },
          "companyExcludes": {
            "title": "Companies to exclude",
            "type": "array",
            "description": "Drop every posting from these company slugs (case-insensitive, matched against the ATS slug). Use it to mute a noisy employer or a staffing agency inside a bundle or the index.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote roles only",
            "type": "boolean",
            "description": "Keep only jobs flagged remote (or whose location mentions remote).",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep only postings published in the last N days. 7 gives you this week's roles. Postings on boards that publish no date are left out, because they cannot be shown to be recent. Leave empty for no date limit."
          },
          "seniorityLevels": {
            "title": "Seniority levels",
            "type": "array",
            "description": "Keep only jobs whose derived seniorityLevel is one of these. A title that states no level (\"Engineer II\") is null and is dropped when this filter is set. Leave empty for all levels.",
            "items": {
              "type": "string",
              "enum": [
                "EXECUTIVE",
                "VP",
                "DIRECTOR",
                "PRINCIPAL",
                "STAFF",
                "MANAGER",
                "SENIOR",
                "JUNIOR",
                "INTERN"
              ],
              "enumTitles": [
                "Executive (C-level)",
                "VP",
                "Director / Head of",
                "Principal / Distinguished",
                "Staff",
                "Manager",
                "Senior / Lead",
                "Junior / Associate / New grad",
                "Intern"
              ]
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Keep only jobs whose derived employmentTypeNormalized is one of these. Read from each ATS's own label where it publishes one, from the title where it does not. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "FULL_TIME",
                "PART_TIME",
                "CONTRACT",
                "INTERN",
                "APPRENTICESHIP",
                "VOLUNTEER"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract / temp / freelance",
                "Intern",
                "Apprenticeship",
                "Volunteer"
              ]
            }
          },
          "workplaceTypes": {
            "title": "Workplace types",
            "type": "array",
            "description": "Keep only jobs whose workplaceType matches. Only Lever, Ashby and Workable publish this field; postings from the other three ATS platforms have no value and are dropped when this filter is set. Use \"Remote roles only\" above for a filter that works across all six.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "hasSalary": {
            "title": "Only jobs with pay data",
            "type": "boolean",
            "description": "Keep only postings where a salary figure was found — structured on Ashby and Recruitee, parsed from the posting body elsewhere. Requires \"Read pay into the salary fields\" to stay on.",
            "default": false
          },
          "salaryFloor": {
            "title": "Minimum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only postings whose salaryMax (or salaryMin when there is no max) is at least this figure. Compared in the currency the posting publishes, with no FX conversion, and postings with no pay data are dropped. Leave empty for no floor."
          },
          "countryCodes": {
            "title": "Country codes",
            "type": "array",
            "description": "Keep only jobs whose derived countryCodeDerived is one of these two-letter codes (case-insensitive). E.g. US, GB, DE. Postings whose country could not be derived are dropped when this filter is set.",
            "items": {
              "type": "string"
            }
          },
          "aiSeniorityLevels": {
            "title": "Seniority levels (inferred)",
            "type": "array",
            "description": "Keep only jobs whose aiSeniorityLevel is one of these. Always populated: taken from the posting where it states a level, inferred from the title otherwise (\"Engineer II\" reads as mid-level), and defaulted to MID when the title carries no signal at all. Pair with a confidence floor to exclude the defaults.",
            "items": {
              "type": "string",
              "enum": [
                "EXECUTIVE",
                "VP",
                "DIRECTOR",
                "PRINCIPAL",
                "STAFF",
                "MANAGER",
                "SENIOR",
                "MID",
                "JUNIOR",
                "INTERN"
              ],
              "enumTitles": [
                "Executive (C-level)",
                "VP",
                "Director / Head of",
                "Principal / Distinguished",
                "Staff",
                "Manager",
                "Senior / Lead",
                "Mid-level",
                "Junior / Associate / New grad",
                "Intern"
              ]
            }
          },
          "aiEmploymentTypes": {
            "title": "Employment types (inferred)",
            "type": "array",
            "description": "Keep only jobs whose aiEmploymentType is one of these. Always populated, defaulting to FULL_TIME where the posting and title both say nothing. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "FULL_TIME",
                "PART_TIME",
                "CONTRACT",
                "INTERN",
                "APPRENTICESHIP",
                "VOLUNTEER"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract / temp / freelance",
                "Intern",
                "Apprenticeship",
                "Volunteer"
              ]
            }
          },
          "aiWorkArrangements": {
            "title": "Work arrangements (inferred)",
            "type": "array",
            "description": "Keep only jobs whose aiWorkArrangement matches. Unlike the workplace filter above this works across all six ATS platforms, because it falls back to the location text and the remote flag before defaulting to ON-SITE.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "aiConfidenceMin": {
            "title": "Minimum inference confidence",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Drop postings whose inference is weaker than this, on a 0-100 scale. Applies to the columns you filtered on above — set a seniority filter and it scores aiSeniorityConfidence, not the employment type you never asked about — or to all three when you set none. Useful values: 100 keeps only what the posting stated itself, 90 adds language-model title matches, 85 and 70 add strong then ordinary title rules, 30 keeps everything including defaults. Leave empty for no floor."
          },
          "maxItems": {
            "title": "Maximum records to return",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many normalized records have been pushed. Leave blank for no limit."
          },
          "onlyNewSinceLastRun": {
            "title": "Only return jobs not seen in a previous run",
            "type": "boolean",
            "description": "Recommended for scheduled runs. Uses persisted state to skip postings already returned earlier, so a recurring schedule only charges for genuinely new jobs.",
            "default": true
          },
          "includeSalary": {
            "title": "Read pay into the salary fields",
            "type": "boolean",
            "description": "Fill salaryMin / salaryMax / salaryCurrency / salaryInterval from whichever pay data each source ATS publishes — structured for Ashby and Recruitee, parsed from the posting body elsewhere. No extra requests.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}