{
  "openapi": "3.0.1",
  "info": {
    "title": "Job Search API - Greenhouse, Lever, Ashby & Workday Jobs Index",
    "description": "Search 1.4M+ live jobs from 54,000+ company career boards (Greenhouse, Lever, Ashby, Workday, Workable, Personio and 10 more ATSs) in one query, refreshed daily. Posted vs first-seen dates, reposts, duplicates, hiring companies. $1.50/1,000 jobs.",
    "version": "0.1",
    "x-build-id": "9uHqtD40UIolUOJtY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tidytools~ats-job-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tidytools-ats-job-search",
        "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/tidytools~ats-job-search/runs": {
      "post": {
        "operationId": "runs-sync-tidytools-ats-job-search",
        "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/tidytools~ats-job-search/run-sync": {
      "post": {
        "operationId": "run-sync-tidytools-ats-job-search",
        "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": {
          "output": {
            "title": "Output",
            "enum": [
              "jobs",
              "companies"
            ],
            "type": "string",
            "description": "Jobs: one row per matching job. Hiring companies: the same filters, one row per company that is hiring for them (deduplicated by company website), with its website, matching job count, sample titles and locations; optionally with public contacts.",
            "default": "jobs"
          },
          "keywords": {
            "title": "Job title keywords",
            "type": "array",
            "description": "Jobs whose title contains ANY of these phrases (all words of one phrase, in order). A trailing * matches word starts: \"engineer*\" finds Engineer and Engineering. Leave empty for all jobs.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Exclude title keywords",
            "type": "array",
            "description": "Skip jobs whose title contains any of these phrases, e.g. \"senior\", \"intern\".",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Only jobs from companies whose name contains any of these phrases, e.g. \"Stripe\", \"Datadog\".",
            "items": {
              "type": "string"
            }
          },
          "companyDomains": {
            "title": "Company websites",
            "type": "array",
            "description": "Only jobs from companies with these website domains, e.g. \"stripe.com\". Uses our company website mapping (see README).",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Only jobs whose location text contains any of these phrases: a city, state or country as written by the company (\"Berlin\", \"New York\", \"United Kingdom\", \"Remote\").",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries (ISO codes)",
            "type": "array",
            "description": "Only jobs in these countries, as two-letter ISO codes (US, GB, DE). The country is read from the location text, so jobs with unclear locations are left out by this filter; use Locations for a looser match.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Only jobs marked remote by the ATS or with \"Remote\" in their location.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only jobs posted in the last N days (by the date the ATS gives; Workday dates are day-precise). Jobs without a posting date are left out when this is set."
          },
          "newWithinDays": {
            "title": "New in the index within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Only jobs our daily crawl first saw in the last N days. Good for alerts: run daily with 1."
          },
          "ats": {
            "title": "Job boards (ATS)",
            "type": "array",
            "description": "Only jobs from these applicant tracking systems. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "greenhouse",
                "lever",
                "ashby",
                "workday",
                "workable",
                "recruitee",
                "personio",
                "breezy",
                "teamtailor",
                "bamboohr",
                "pinpoint",
                "jazzhr",
                "homerun",
                "rippling",
                "gem",
                "freshteam"
              ],
              "enumTitles": [
                "Greenhouse",
                "Lever",
                "Ashby",
                "Workday",
                "Workable",
                "Recruitee",
                "Personio",
                "Breezy HR",
                "Teamtailor",
                "BambooHR",
                "Pinpoint",
                "JazzHR",
                "Homerun",
                "Rippling",
                "Gem",
                "Freshteam"
              ]
            }
          },
          "employmentTypes": {
            "title": "Employment types",
            "type": "array",
            "description": "Only jobs of these types. Many boards do not state a type: those jobs are left out when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "internship",
                "apprenticeship",
                "freelance",
                "volunteer"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Apprenticeship",
                "Freelance",
                "Volunteer"
              ]
            }
          },
          "seniority": {
            "title": "Experience level (any of)",
            "type": "array",
            "description": "Keep jobs at these experience levels. The level (output field seniority) comes from an internship or apprenticeship employment type, else from words in the job title (Senior, Jr., Intern, Engineering Manager, Staff Engineer, VP, Engineer II...). A title without such words (\"Software Engineer\", \"Product Manager\") has no level and is dropped unless you tick the next option. Empty = all levels. Dropped jobs are not charged.",
            "items": {
              "type": "string",
              "enum": [
                "internship",
                "entry",
                "mid",
                "senior",
                "lead",
                "executive"
              ],
              "enumTitles": [
                "Internship / working student / apprenticeship",
                "Entry level / junior / graduate",
                "Mid level",
                "Senior",
                "Lead / manager / staff / principal",
                "Executive (director, head of, VP, C-level)"
              ]
            }
          },
          "includeUnknownSeniority": {
            "title": "Also keep jobs without a known experience level",
            "type": "boolean",
            "description": "With an experience level selected: also keep jobs whose level could not be derived (seniority null). Many titles name no level, so this keeps more jobs that may still fit.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep jobs whose stated salary reaches this amount (in the currency and period below), e.g. 100000 per year. Only jobs that state a salary are compared (the ATS's pay fields, or a range written in the description); see \"Keep jobs that state no salary\" for the others. Empty or 0 = no salary filter. Dropped jobs are not charged."
          },
          "minSalaryCurrency": {
            "title": "Minimum salary currency",
            "type": "string",
            "description": "Three-letter currency code of the minimum salary, e.g. USD, EUR, GBP, CAD, INR. Salaries in other currencies are converted with built-in approximate exchange rates (see below).",
            "default": "USD"
          },
          "minSalaryPeriod": {
            "title": "Minimum salary period",
            "enum": [
              "year",
              "month",
              "week",
              "day",
              "hour"
            ],
            "type": "string",
            "description": "The period of the minimum salary. Salaries given for another period are compared as yearly amounts: hour x 2080, day x 260, week x 52, month x 12.",
            "default": "year"
          },
          "salaryMatch": {
            "title": "Salary must",
            "enum": [
              "overlap",
              "guaranteed"
            ],
            "type": "string",
            "description": "Values: overlap = the top of the job's salary range reaches your minimum (a 90,000-120,000 job passes a 100,000 minimum); guaranteed = the bottom of the range does (that job fails).",
            "default": "overlap"
          },
          "convertSalaryCurrency": {
            "title": "Compare salaries in other currencies (approximate rates)",
            "type": "boolean",
            "description": "On: a salary in another currency is converted with fixed approximate exchange rates (about 45 currencies, rounded rates of autumn 2026; can be some percent off) before comparing. The job's own salary fields are never converted. Off: only jobs in the minimum salary's currency are compared; others count as without a salary.",
            "default": true
          },
          "keepJobsWithoutSalary": {
            "title": "Keep jobs that state no salary",
            "type": "boolean",
            "description": "With a minimum salary: keep jobs whose salary is not stated (or has no period, or cannot be compared) instead of dropping them. Most job boards publish salaries only where the law requires it (US states, EU pay transparency), so dropping them removes most jobs.",
            "default": true
          },
          "includeRemoved": {
            "title": "Include removed jobs",
            "type": "boolean",
            "description": "Also return jobs that were taken down (removedAt is set). Useful for hiring-trend research.",
            "default": false
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "posted",
              "firstSeen"
            ],
            "type": "string",
            "description": "Order of the results.",
            "default": "posted"
          },
          "skipDuplicates": {
            "title": "Skip duplicate postings",
            "type": "boolean",
            "description": "On by default: leaves out extra copies of the same opening posted under another URL (same ATS requisition, same text, or the same job on two boards of one company). Several openings with the same title in one city are kept.",
            "default": true
          },
          "repostsOnly": {
            "title": "Reposted jobs only",
            "type": "boolean",
            "description": "Only jobs we saw reposted: a new URL for a job that was taken down, a job that came back, or a posting date that was moved forward.",
            "default": false
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many jobs (or companies with the Hiring companies output). You pay per result returned.",
            "default": 100
          },
          "minJobsPerCompany": {
            "title": "Hiring companies: min matching jobs",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Only companies with at least this many matching jobs.",
            "default": 1
          },
          "companySort": {
            "title": "Hiring companies: sort",
            "enum": [
              "jobs",
              "newest"
            ],
            "type": "string",
            "description": "Order of the company rows.",
            "default": "jobs"
          },
          "onlyWithWebsite": {
            "title": "Hiring companies: only with a known website",
            "type": "boolean",
            "description": "Skip companies whose website we could not map.",
            "default": false
          },
          "enrichCompanies": {
            "title": "Hiring companies: add contacts",
            "enum": [
              "none",
              "contacts",
              "company"
            ],
            "type": "string",
            "description": "Reads each company website once with our Website Contact Extractor (emails, phones, social profiles, contact form) or Company Website Enrichment (description, industry, contacts, tech stack). That Actor runs in your account and charges its own price per website.",
            "default": "none"
          },
          "enrichMaxPagesPerSite": {
            "title": "Hiring companies: pages per website",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Pages read per company website when adding contacts.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}