{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse, Lever, Workday & iCIMS Jobs Scraper — 24 ATS",
    "description": "Live jobs from any company across 24 ATS platforms — Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Personio, iCIMS, Taleo, Recruitee, Workable, BambooHR, Teamtailor and more — fetched at run time, not from a stale database. One unified schema, plus the hiring company's contact email.",
    "version": "0.0",
    "x-build-id": "XY4J0NckGbrMW04AP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~career-site-ats-jobs-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-career-site-ats-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/memo23~career-site-ats-jobs-api/runs": {
      "post": {
        "operationId": "runs-sync-memo23-career-site-ats-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/memo23~career-site-ats-jobs-api/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-career-site-ats-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": {
          "startUrls": {
            "title": "ATS board / job URLs",
            "type": "array",
            "description": "Any supported ATS board or job URL — Greenhouse (boards.greenhouse.io/{org}), Lever (jobs.lever.co/{org}), Ashby (jobs.ashbyhq.com/{org}), SmartRecruiters (careers.smartrecruiters.com/{Id}), Workday ({tenant}.wdN.myworkdayjobs.com/{Site}), Workable (apply.workable.com/{slug}), Recruitee ({slug}.recruitee.com), Breezy ({slug}.breezy.hr), Personio ({co}.jobs.personio.com), BambooHR ({co}.bamboohr.com), iCIMS (careers-{co}.icims.com), Oracle Cloud HCM ({pod}.fa.{dc}.oraclecloud.com/hcmUI/…/sites/CX_n), UKG Pro (recruiting.ultipro.com/{TENANT}/JobBoard/{id}), ADP Workforce Now (workforcenow.adp.com/…recruitment.html?cid={id}), Eightfold ({co}.eightfold.ai), Jobvite (jobs.jobvite.com/{co}), Teamtailor ({co}.teamtailor.com), Pinpoint ({co}.pinpointhq.com), Taleo ({tenant}.taleo.net/careersection/{n}/jobsearch.ftl), BrassRing (sjobs.brassring.com/…?partnerid={p}&siteid={s}), Comeet/Spark Hire (comeet.com/jobs/{co}/{uid}), plus career sites on company domains that are auto-detected when you paste their URL: SAP SuccessFactors (jobs.{company}.com), Phenom (careers.{company}.com), and iCIMS modern/Jibe sites. The ATS is detected from the URL host.",
            "items": {
              "type": "string"
            }
          },
          "organizations": {
            "title": "Companies (name or slug — ATS auto-detected)",
            "type": "array",
            "description": "Bare company names/slugs, e.g. [\"stripe\", \"notion\", \"ramp\"]. For each, the actor probes the supported ATSs and uses the one that hosts that company. (SmartRecruiters company IDs are case-sensitive — pass the exact ID or a careers URL.)",
            "items": {
              "type": "string"
            }
          },
          "greenhouseBoards": {
            "title": "Greenhouse board tokens",
            "type": "array",
            "description": "Greenhouse board tokens — the last part of boards.greenhouse.io/{token}. Example: [\"stripe\", \"databricks\"].",
            "items": {
              "type": "string"
            }
          },
          "leverCompanies": {
            "title": "Lever company slugs",
            "type": "array",
            "description": "Lever org slugs — the part after jobs.lever.co/. Example: [\"spotify\", \"voodoo\"].",
            "items": {
              "type": "string"
            }
          },
          "ashbyOrgs": {
            "title": "Ashby org slugs",
            "type": "array",
            "description": "Ashby org slugs — the part after jobs.ashbyhq.com/. Example: [\"ramp\", \"notion\"].",
            "items": {
              "type": "string"
            }
          },
          "smartrecruitersCompanies": {
            "title": "SmartRecruiters company IDs (case-sensitive)",
            "type": "array",
            "description": "SmartRecruiters company IDs, exactly as they appear after smartrecruiters.com/. CASE-SENSITIVE: \"BoschGroup\" works, \"boschgroup\" returns nothing. Example: [\"BoschGroup\", \"Visa\"].",
            "items": {
              "type": "string"
            }
          },
          "inputUrl": {
            "title": "Excel / CSV / Google Sheet URL (career links)",
            "type": "string",
            "description": "Optional. A public URL to an .xlsx, .csv, or Google Sheet whose cells hold ATS board URLs and/or company names. Every URL or slug found is scraped (ATS auto-detected). For Google Sheets, share as 'Anyone with the link'."
          },
          "enrichEmails": {
            "title": "Enrich with company contact email",
            "type": "boolean",
            "description": "When enabled, each company is enriched with a contact email by discovering its website (Clearbit) and harvesting contact details — adds `contactEmail`, `contactWebsite`, and a detailed `emailEnrichment` object to every row. Best-effort. Adds time/cost per company, so it's off by default.",
            "default": false
          },
          "qualifyByPayment": {
            "title": "💳 Qualify by payment (flag businesses that take money online)",
            "type": "boolean",
            "description": "Requires \"Enrich with company contact email\". Scans each company's website — reusing the pages already fetched for email discovery, so no extra requests or time — for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more). Adds takesPayments, paymentProcessors, stripeLiveKey and paymentConfidence, turning raw contacts into monetization-qualified leads.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum jobs PER COMPANY",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on job rows emitted for EACH company/URL you provide. 3 companies x 200 = up to 600 rows. To bound the whole run regardless of how many companies you pass, set 'Maximum jobs for the whole run' below — that one is the global cap.",
            "default": 5000
          },
          "maxItemsTotal": {
            "title": "Maximum jobs for the WHOLE RUN (global cap)",
            "minimum": 1,
            "type": "integer",
            "description": "Hard ceiling on job rows across the entire run, all companies combined — the safest way to control billing when you paste a long list of companies. Leave empty for no global cap (the per-company cap above still applies). Free-plan runs are capped at 100 rows regardless."
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "How many companies to process in parallel.",
            "default": 10
          },
          "titleKeyword": {
            "title": "Title contains",
            "type": "string",
            "description": "Keep only jobs whose title contains this text (case-insensitive), e.g. \"engineer\"."
          },
          "keywords": {
            "title": "Keywords (title + skills + description)",
            "type": "string",
            "description": "Keep only jobs matching these keywords across the title, detected skills AND the description. Space-separated terms are ALL required (AND), e.g. \"python kubernetes\" keeps jobs mentioning both — even when a skill appears only in the job body. Broader than \"Title contains\"."
          },
          "location": {
            "title": "Location contains",
            "type": "string",
            "description": "Keep only jobs whose location contains this text, e.g. \"remote\", \"London\", \"New York\"."
          },
          "department": {
            "title": "Department contains",
            "type": "string",
            "description": "Keep only jobs whose department contains this text, e.g. \"Engineering\"."
          },
          "employmentType": {
            "title": "Employment type contains",
            "type": "string",
            "description": "Keep only jobs whose employment type contains this text. Use a short stem that works across all ATSs, e.g. \"full\", \"part\", \"contract\", \"intern\"."
          },
          "language": {
            "title": "Language (ISO code, e.g. en)",
            "type": "string",
            "description": "Preferred posting language. Personio returns this language's descriptions (English by default); SmartRecruiters jobs are filtered to it. Other ATSs return whatever language the role was posted in."
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only jobs flagged remote.",
            "default": false
          },
          "postedAfter": {
            "title": "Posted on/after",
            "type": "string",
            "description": "Keep only jobs published on or after this date (YYYY-MM-DD). Ideal for scheduled monitoring runs that only want fresh roles."
          },
          "includeDescription": {
            "title": "Include full job description",
            "type": "boolean",
            "description": "Include `descriptionHtml` and `descriptionText` on each row. Turn off for leaner, cheaper rows when you only need title/location/links. (For 2-call ATSs — SmartRecruiters, BambooHR — turning this off also skips the per-job detail fetch, making big runs much faster.)",
            "default": true
          },
          "excludeBoilerplate": {
            "title": "Exclude boilerplate from the combined description",
            "type": "boolean",
            "description": "SmartRecruiters only. Drops the \"Company Description\" and \"Additional Information\" sections from the combined `descriptionHtml`/`descriptionText`, keeping just the role and its qualifications. All four sections are emitted as separate columns (`companyDescription`, `jobDescription`, `qualifications`, `additionalInformation`) either way.",
            "default": false
          },
          "includeQuestions": {
            "title": "Include application-form questions",
            "type": "boolean",
            "description": "Greenhouse only. Also fetches each job's application-form questions via one extra API call PER JOB — slower and far more requests, so it's off by default. Adds `questions` + `questionCount`.",
            "default": false
          },
          "translateToEnglish": {
            "title": "Translate job text to English (free)",
            "type": "boolean",
            "description": "Companies post in whatever language they hire in, and one board can mix several. Enable this to auto-translate non-English titles/descriptions to English — free, no API key needed. Originals are kept in `titleOriginal`/`descriptionTextOriginal`, plus `detectedLanguage` + `translated` flags. Only non-English rows are translated. Works best with 'Include full job description' ON.",
            "default": false
          },
          "includeRawJson": {
            "title": "Include raw ATS payload",
            "type": "boolean",
            "description": "Attach the original, unmodified ATS job object to each row under a `raw` field. Off by default to keep rows lean.",
            "default": false
          },
          "stateKey": {
            "title": "State name (turns change detection on)",
            "type": "string",
            "description": "Any name you choose, e.g. \"my-ats-watch\". Job state is stored under it in a named key-value store and reused by every run that passes the same name, keyed on each job's `globalId`. Each row then carries `changeStatus` (new / updated / unchanged) and `firstSeenAt`; run totals land in the RUN-SUMMARY record. Leave blank to disable. Note: a job counts as \"updated\" when its title, location, employment type, salary, dates or description text changed — so keep 'Include full job description' stable between runs, or the first run after a flip marks everything updated."
          },
          "onlyNewOrUpdated": {
            "title": "Emit only new + updated jobs",
            "type": "boolean",
            "description": "Requires a state name above. Drops `unchanged` jobs from the output entirely, so a daily monitoring run returns (and bills for) just the delta rather than the whole board. The unchanged jobs are still tracked in state — they simply aren't emitted. Note: 'new' means 'not yet seen under this state name', not 'newly posted'. Keep the per-company cap at or above the board size, otherwise each run skips the jobs it already knows and back-fills with deeper ones it has not reached yet, which report as new.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}