{
  "openapi": "3.0.1",
  "info": {
    "title": "Career Site ATS Jobs API — Greenhouse, Lever, Workday, 116 ATS",
    "description": "Live jobs from any company across 116 ATS platforms — Greenhouse, Lever, Ashby, Workday, iCIMS, Taleo, SuccessFactors, Dayforce, Paycom & more — fetched from the company's own ATS at run time, not a stale database. Incremental mode bills only new and changed roles. Emails optional.",
    "version": "0.0",
    "x-build-id": "f48PzQaCzahKSc65n"
  },
  "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}), Darwinbox ({tenant}.darwinbox.in or .darwinbox.com), PeopleStrong ({tenant}.peoplestrong.com), RippleHire ({tenant}.ripplehire.com/candidate/?token=…), Keka ({tenant}.keka.com/careers), MokaHR (hire-r1 or app.mokahr.com/social-recruitment/{org}/{siteId}), Cegid Talentsoft ({tenant}.talent-soft.com), Zwayam (paste the careers URL), Gupy ({tenant}.gupy.io), Employment Hero (jobs.employmenthero.com/organisations/{slug}), SenseHQ ({tenant}.sensehq.com/careers), Adverto and Ceipal (paste the careers URL), plus career sites on company domains that are auto-detected when you paste their URL: SAP SuccessFactors (jobs.{company}.com), Phenom (careers.{company}.com), Teamtailor on a company's own domain, 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. The default of 5000 sits above almost every real board, so nothing is truncated unless you lower it — set it to 200 and three companies yield at most 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}