{"name":"ats-jobs-scraper","id":"sfoln/ats-jobs-scraper","title":"ATS Jobs Scraper – Greenhouse, Lever, Ashby","description":"Scrape open jobs from company career sites on Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Personio, Teamtailor, Breezy, BambooHR, Workable and Workday: one row per job with salary, location, remote type and seniority. $1 per 1,000 jobs + $0.002 per board.","version":"0.1","status":"ready","family":{"id":"company-lead-intelligence","name":"Company & lead intelligence","description":"Company enrichment, contact discovery, tech-stack detection, hiring signals, job listings, public tenders, Shopify stores, marketplace listings, NPI provider records, e-mail and phone validation.","actors":13},"categories":["JOBS","LEAD_GENERATION","AUTOMATION"],"availability":"on_request","seoTitle":"ATS Jobs Scraper – Greenhouse, Lever, Ashby & Workday Jobs","seoDescription":"Scrape open jobs from Greenhouse, Lever, Ashby, SmartRecruiters, Workday and 6 more ATS job boards with salary, remote and seniority. From $1 per 1,000 jobs.","summary":"Scrape open jobs from company career sites in one normalized schema: give job board URLs, careers pages or <ats>:<token> entries and get one row per open job from Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Personio, Teamtailor, Breezy HR, BambooHR, Workable and Workday: title, department and team, locations, remote / hybrid / onsite, employment type, a seniority guess, the salary range normalized to min, max, currency and period, posting dates and apply links. Built for recruiters and staffing agencies, job boards and aggregators, sales teams tracking hiring, market researchers and AI agents. It reads the public job-board APIs these ATS publish for career sites, with no login.","pricing":{"model":"pay-per-event","currency":"USD","billedBy":"Apify","freePlanMaxItemsPerRun":10,"events":[{"name":"job","title":"Job posting","description":"One open job delivered as a normalized dataset row (title, department, locations, workplace type, employment type, seniority, salary, dates, URLs).","priceUsd":0.001},{"name":"job-board","title":"Job board","description":"One company job board that delivered at least one job in this run (board detection and reading).","priceUsd":0.002}]},"input":{"description":"Add companies as job board URLs, careers pages, websites or <ats>:<token>. Each company produces one dataset row per open job plus one summary record.","required":["companies"],"fields":[{"name":"companies","title":"Companies (job boards, careers pages or websites)","type":"array","required":true,"description":"One per line: a job board URL (https://boards.greenhouse.io/stripe, https://jobs.lever.co/palantir, https://jobs.ashbyhq.com/ramp, https://acme.recruitee.com, …), a careers page or company website (the job board is detected from its links and embeds), or <ats>:<token> such as greenhouse:stripe, lever:palantir, ashby:ramp, smartrecruiters:BoschGroup, recruitee:bunq, personio:acme, teamtailor:acme, breezy:acme, bamboohr:acme, workable:acme or workday:nvidia.wd5/NVIDIAExternalCareerSite. Duplicates are removed. Accounts on the Apify free plan can process up to 10 companies per run.","prefill":["https://boards.greenhouse.io/stripe","https://jobs.lever.co/palantir"],"editor":"stringList"},{"name":"maxJobsPerCompany","title":"Max jobs per company","type":"integer","required":false,"description":"Job rows per company (1–10,000), newest first where the board allows it. Each delivered job is one charged event.","default":1000,"prefill":5,"minimum":1,"maximum":10000},{"name":"keywords","title":"Keywords","type":"array","required":false,"description":"Keep only jobs whose title, department or team contains one of these words (whole words or word starts, so engineer also matches Engineering; keywords of up to 3 letters such as AI must be whole words). Filtered-out jobs are not charged.","editor":"stringList"},{"name":"locations","title":"Locations","type":"array","required":false,"description":"Keep only jobs with a location containing one of these (city, region or country name). A 2-letter code matches the job's country (US, DE) or a state or province code (CA, NY); remote matches remote jobs.","editor":"stringList"},{"name":"departments","title":"Departments","type":"array","required":false,"description":"Keep only jobs whose department or team contains one of these (e.g. Engineering, Sales).","editor":"stringList"},{"name":"remoteOnly","title":"Remote jobs only","type":"boolean","required":false,"description":"Keep only jobs whose workplace type is remote.","default":false},{"name":"postedSinceDays","title":"Posted within the last N days","type":"integer","required":false,"description":"Keep only jobs posted within this many days. Jobs without a posting date are left out when this filter is set.","minimum":1,"maximum":3650},{"name":"includeDescription","title":"Include job descriptions","type":"boolean","required":false,"description":"Add the plain-text job description to each row (up to 20,000 characters). On SmartRecruiters, BambooHR and Workday this needs one extra request per job, so runs are slower.","default":false},{"name":"onlyNew","title":"Only new jobs since my last run","type":"boolean","required":false,"description":"Deliver only jobs your earlier runs of this Actor did not deliver for the same board (job alerts on a schedule). The memory is kept in the key-value store ats-jobs-scraper-memory of your account for 30 days; delete it to start over.","default":false},{"name":"includeWorkday","title":"Read Workday career sites","type":"boolean","required":false,"description":"Workday sites (*.myworkdayjobs.com) are read through an undocumented endpoint, at most 200 jobs per site and 1 request per second. Off by default: Workday entries are skipped (not charged).","default":false},{"name":"guessBoards","title":"Guess the board from the domain","type":"boolean","required":false,"description":"When a careers page or website links to no supported job board, try the domain name as a board name on Greenhouse, Lever, Ashby, Recruitee, Personio, Teamtailor, Breezy, SmartRecruiters and BambooHR (summary records say detectedBy: slug_guess). Not tried for IP addresses or sites on hosting platforms (*.vercel.app, *.github.io, *.wordpress.com …).","default":true},{"name":"maxCompanies","title":"Max companies","type":"integer","required":false,"description":"Safety cap on the number of companies processed in this run.","default":1000,"minimum":1,"maximum":10000},{"name":"concurrency","title":"Concurrency","type":"integer","required":false,"description":"How many companies are processed in parallel (1–8). Requests to each ATS are rate-limited for the whole run.","default":3,"minimum":1,"maximum":8},{"name":"itemTimeoutSecs","title":"Time limit per company (seconds)","type":"integer","required":false,"description":"Paging for one company stops cleanly shortly before this limit (60–3600).","default":600,"minimum":60,"maximum":3600},{"name":"includeRaw","title":"Include raw upstream response","type":"boolean","required":false,"description":"Attach the unmodified job object of the ATS to each job row (larger output).","default":false}]},"exampleInput":{"companies":["https://boards.greenhouse.io/stripe","https://jobs.lever.co/palantir"],"maxJobsPerCompany":5},"outputFields":[{"name":"input","type":"string | object","title":"Input","description":"The company entry as given."},{"name":"recordType","type":"string","title":"Record type","description":"job (one per delivered job, charged job) | summary (one per company; charged job-board when at least one job was delivered)","example":"job"},{"name":"position","type":"integer","title":"Position","description":"Job rows: position of the job within its company (1-based)."},{"name":"ats","type":"string | null","title":"ATS","description":"greenhouse | lever | ashby | smartrecruiters | recruitee | personio | teamtailor | breezy | bamboohr | workable | workday"},{"name":"company","type":"string | null","title":"Company","description":"Company name from the board, else the board token."},{"name":"boardToken","type":"string | null","title":"Board token","description":"The board's name on the ATS (subdomain, token or company identifier)."},{"name":"jobId","type":"string","title":"Job ID","description":"The job's ID on the ATS."},{"name":"title","type":"string","title":"Job title"},{"name":"department","type":"string | null","title":"Department","description":"Top-level department (Greenhouse: the root of the department tree)."},{"name":"team","type":"string | null","title":"Team","description":"Team or sub-department when the board has one."},{"name":"locations","type":"array","title":"Locations"},{"name":"country","type":"string | null","title":"Country","description":"ISO 3166-1 alpha-2 code of the first location when the board gives or implies it."},{"name":"workplaceType","type":"string | null","title":"Workplace type","description":"remote | hybrid | onsite; null when the board does not say."},{"name":"employmentType","type":"string | null","title":"Employment type","description":"full_time | part_time | contract | temporary | internship | volunteer | other"},{"name":"seniority","type":"string | null","title":"Seniority (guess)","description":"intern | entry | mid | senior | lead | manager | director | vp | executive, guessed from the title (else the board's experience level)."},{"name":"salary","type":"object | null","title":"Salary","description":"{ min, max, currency (ISO 4217), period (year | month | week | day | hour), text } when the board publishes pay; else null."},{"name":"postedAt","type":"string | null","title":"Posted at","description":"ISO 8601 UTC (Workday: the day, from its relative date)."},{"name":"updatedAt","type":"string | null","title":"Updated at","description":"ISO 8601 UTC when the board reports it."},{"name":"url","type":"string | null","title":"Job URL"},{"name":"applyUrl","type":"string | null","title":"Apply URL"},{"name":"description","type":"string | null","title":"Description","description":"Plain text, up to 20,000 characters; only with includeDescription."},{"name":"boardUrl","type":"string | null","title":"Board URL","description":"Summary records only: the company's job board."},{"name":"detectedBy","type":"string | null","title":"Detected by","description":"Summary records only: input (board given) | careers_page (linked from the page) | slug_guess (domain name tried on the ATS APIs)."},{"name":"otherBoards","type":"array","title":"Other boards","description":"Summary records only: further boards the careers page linked to."},{"name":"jobsOnBoard","type":"integer | null","title":"Jobs on board","description":"Summary records only: open jobs on the board when the ATS reports a total."},{"name":"resultsDelivered","type":"integer","title":"Jobs delivered","description":"Summary records only."},{"name":"filteredOut","type":"integer","title":"Filtered out","description":"Summary records only: jobs dropped by your filters or by onlyNew (not charged)."},{"name":"duplicates","type":"integer","title":"Duplicates","description":"Summary records only: jobs already delivered for another entry of this run (not charged)."},{"name":"stopReason","type":"string","title":"Stop reason","description":"Summary records only: end | limit | free_plan | budget | deadline | aborted | max_pages | empty_pages | error"},{"name":"status","type":"string","title":"Status","description":"ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan | skipped_unmetered","example":"ok"},{"name":"charged","type":"boolean","title":"Charged","description":"Job rows: charged job. Summary records: charged job-board when at least one job was delivered."},{"name":"chargedEvent","type":"string","title":"Charged event","description":"Pay-per-event event charged for this record (present only when charged)."},{"name":"chargedCount","type":"integer","title":"Events charged","description":"Events actually charged when the charge came back short of the requested count (present only then; a warning explains it)."},{"name":"source","type":"string","title":"Source","description":"Upstream data source (ats)."},{"name":"fetchedAt","type":"string","title":"Fetched at","description":"ISO timestamp."},{"name":"error","type":"object","title":"Error","description":"{ code, message, provider?, status? } when status is not ok. Actor codes: invalid_input, board_not_found, workday_not_enabled. Upstream codes: not_found (unknown board), http_error (see status), timeout, network, dns_not_found, too_large, invalid_json, unexpected_type, invalid_response. Codes set by the runtime: budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed."},{"name":"warnings","type":"array","title":"Warnings","description":"Notes about this record, e.g. a free-plan cap, the budget, or a page that could not be read."}],"outputExample":{"input":"ashby:ramp","recordType":"job","position":1,"ats":"ashby","company":"ramp","boardToken":"ramp","jobId":"34413f8d-26bf-4bbc-8ade-eb309a0e2245","title":"Security Engineer, Cloud","department":"Engineering","team":"Backend","locations":["New York, NY (HQ)","Remote (Canada)","Remote (US)","Miami, FL"],"country":"US","workplaceType":"hybrid","employmentType":"full_time","seniority":null,"salary":{"min":211400,"max":290600,"currency":"USD","period":"year","text":"$211.4K - $290.6K"},"postedAt":"2026-04-07T17:12:35.753Z","updatedAt":null,"url":"https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245","applyUrl":"https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application","status":"ok","charged":true,"chargedEvent":"job","source":"ats","fetchedAt":"2026-10-14T12:00:00.000Z"},"faq":[{"question":"Which applicant tracking systems are supported?","answer":"Greenhouse, Lever (including EU boards), Ashby, SmartRecruiters, Recruitee, Personio, Teamtailor, Breezy HR, BambooHR, Workable (best effort: Workable throttles cloud IPs) and Workday (opt-in with includeWorkday). Give the board URL or `<ats>:<token>`; for a careers page or website the board is found from its links and embeds."},{"question":"How are salaries normalized?","answer":"Every board's pay format (Greenhouse pay ranges in cents, Lever salary ranges, Ashby compensation tiers, Recruitee salary objects, Breezy salary text) becomes salary { min, max, currency, period, text } with ISO currency codes and a period of year, month, week, day or hour. Jobs whose board publishes no pay have salary: null."},{"question":"How do I get only new jobs on a schedule?","answer":"Set onlyNew to true and schedule the Actor. Each run delivers (and charges) only jobs your earlier runs did not deliver for the same board; the memory lives in the key-value store ats-jobs-scraper-memory of your own account for 30 days."},{"question":"Why is a company marked not_found?","answer":"No supported job board was found: the careers page links to an ATS this Actor does not read, or the board name is wrong. Give the board URL or `<ats>:<token>` directly. Not-found and empty boards are never charged."}],"mcpExamplePrompt":"List the open engineering jobs at Stripe (greenhouse:stripe) and Ramp (ashby:ramp) with their salary ranges and locations, then summarize what each company is hiring for.","related":["hiring-signals","company-contacts-finder","company-enrichment","domain-intelligence"],"urls":{"site":"https://www.sfoln.com/actors/ats-jobs-scraper/","siteJson":"https://www.sfoln.com/actors/ats-jobs-scraper.json","siteMarkdown":"https://www.sfoln.com/actors/ats-jobs-scraper.md","runSync":"https://api.apify.com/v2/actors/sfoln~ats-jobs-scraper/run-sync-get-dataset-items","runAsync":"https://api.apify.com/v2/actors/sfoln~ats-jobs-scraper/runs","mcp":"https://mcp.apify.com?tools=sfoln/ats-jobs-scraper","requestAccess":"mailto:contact@sfoln.com?subject=Access%20request%3A%20ATS%20Jobs%20Scraper%20%E2%80%93%20Greenhouse%2C%20Lever%2C%20Ashby%20(sfoln%2Fats-jobs-scraper)&body=Please%20publish%20ats-jobs-scraper.%20What%20we%20plan%20to%20use%20it%20for%3A"},"publisher":{"name":"SFOLN LLC","apifyUsername":"sfoln","url":"https://www.sfoln.com","apifyProfile":"https://apify.com/sfoln","email":"contact@sfoln.com"},"generatedAt":"2026-10-22T04:28:58.477Z"}