ATS Jobs Scraper avatar

ATS Jobs Scraper

Pricing

Pay per usage

Go to Apify Store
ATS Jobs Scraper

ATS Jobs Scraper

Unified job board scraper for 6 major ATS platforms: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, and Recruitee. Extract open roles, structured salary ranges, remote status, locations, and hiring signals in a single unified schema without API keys.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

BigiByte

BigiByte

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

ATS Jobs Scraper: Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee

USA Automotive Leads Hub

Paste a careers URL, an ats:slug pair, or a bare company domain. This actor collects every open job from Greenhouse, Lever, Ashby, Workable, SmartRecruiters, and Recruitee, and saves them in one schema: title, location, remote, department, salary, posted date, and description.

Salary shows up when the company actually publishes it.

What it does

One career page scraper for six ATS platforms. You can mix boards in a single run. A Lever link, a Greenhouse slug, an Ashby org, a Workable account, a Recruitee subdomain, and a SmartRecruiters company id all land in the same dataset.

Failed boards do not stop the run. A missing or wrong slug becomes an error row (NOT_FOUND, or NO_JOBS_OR_WRONG_ID when SmartRecruiters returns zero jobs). Each company is also written to a COMPANIES summary as {ats, slug, jobCount, status}, which is the hiring-signal rollup.

Use cases

  • Job boards and aggregators that need public postings from several ATS platforms in one place.
  • Recruiter sourcing: filter by title, location, department, and a posted-after date, then export the shortlist.
  • B2B sales teams working from hiring signals. See which companies are opening roles, and in which teams, before you reach out.
  • Salary and market research, for the roles where a company lists pay.
  • Job alerts: schedule the actor and send new rows to Sheets, Slack, or a webhook.

Input

ParameterTypeDefaultDescription
startUrlsarrayAshby Ramp and Lever SpotifyCareers URLs, ats:slug pairs, or company domains. Required.
atsHintstringautoForce one ATS, or leave auto-detect on.
keywordsarrayemptyCase-insensitive match on the job title. Any keyword qualifies.
locationsarrayemptyCase-insensitive match against location text.
remoteOnlybooleanfalseKeep only jobs the ATS marks remote.
departmentsarrayemptyCase-insensitive match against the department.
postedAfterstringemptyKeep jobs posted on or after this date.
includeDescriptionbooleantrueInclude the full job description in each row.
descriptionFormatstringtexttext, markdown, or html.
maxItemsinteger500Total jobs saved this run. Hard cap 5,000.
maxJobsPerCompanyinteger1000Cap per company.
maxConcurrencyinteger5Companies processed at once. Hard cap 5.
timeoutSecsinteger300Run time limit. Jobs already saved are kept.
requestTimeoutSecsinteger30Time limit for each board. Raise it for very large boards.
proxyConfigurationobjectNo proxyOptional proxy settings. Off by default.

Example input

{
"startUrls": [
"https://jobs.ashbyhq.com/ramp",
"https://jobs.lever.co/spotify",
"greenhouse:airbnb",
"https://apply.workable.com/huggingface/",
"https://bunq.recruitee.com",
"https://careers.smartrecruiters.com/BoschGroup",
"stripe.com"
],
"keywords": ["engineer"],
"remoteOnly": false,
"includeDescription": true,
"descriptionFormat": "text",
"maxItems": 500,
"maxJobsPerCompany": 1000,
"maxConcurrency": 5,
"proxyConfiguration": { "useApifyProxy": false }
}

stripe.com is best effort. A direct greenhouse:stripe form is the most reliable when you already know the slug.

Output

Each job is one dataset row. The title is stored twice: title for the brief's field name, and itemTitle for the dataset view (Apify reserves the name title in the schema). Both values match.

{
"ats": "ashby",
"atsSlug": "ramp",
"jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"title": "Security Engineer, Cloud",
"itemTitle": "Security Engineer, Cloud",
"company": "ramp",
"location": "New York, NY (HQ)",
"locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],
"country": "USA",
"remote": true,
"workplaceType": "Hybrid",
"department": "Engineering",
"team": "Backend",
"employmentType": "FullTime",
"salaryMin": 211400,
"salaryMax": 290600,
"salaryCurrency": "USD",
"salaryInterval": "1 YEAR",
"salaryText": "$211.4K - $290.6K",
"salarySource": "structured",
"postedAt": "2026-04-07T17:12:35.753+00:00",
"url": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application"
}

A bad input looks like this and does not fail the run:

{"sourceInput": "https://jobs.lever.co/plaid", "ats": "lever", "error": "NOT_FOUND"}

Views: jobs (company, title, location, remote, department, salary, posted date, URL), salaries, and errors.

Dataset exports and Apify integrations cover Google Sheets, Airtable, Make, n8n, and webhooks. Point a webhook at the default dataset when a scheduled run should feed a job alert.

The COMPANIES summary holds one record per board: ats, slug, jobCount, and status (OK, EMPTY, FILTERED, NOT_FOUND, or NO_JOBS_OR_WRONG_ID).

Supported ATS

ATSWhat to pasteSlug
Greenhousehttps://job-boards.greenhouse.io/airbnb or https://boards.greenhouse.io/airbnbairbnb
Leverhttps://jobs.lever.co/spotifyspotify
Ashbyhttps://jobs.ashbyhq.com/rampramp
Workablehttps://apply.workable.com/huggingface/huggingface
SmartRecruitershttps://careers.smartrecruiters.com/BoschGroupBoschGroup (case-sensitive)
Recruiteehttps://bunq.recruitee.combunq

If you are looking for a greenhouse jobs scraper, a lever jobs scraper, an ashby jobs scraper, a workable jobs scraper, a smartrecruiters scraper, or a recruitee scraper, the slug is the first path segment or the subdomain on the careers host.

SmartRecruiters company ids are case-sensitive. A wrong id returns zero jobs and is recorded as NO_JOBS_OR_WRONG_ID. For SmartRecruiters, descriptions are optional and controlled by includeDescription.

Limits

Public postings only. No candidate data, and nothing private.

The free cap is 5,000 jobs per run (maxItems). maxJobsPerCompany defaults to 1,000, which matters on very large boards like Bosch Group on SmartRecruiters (thousands of postings).

Salary data is only as good as what the company published. Many boards leave it empty.

Concurrency stays at or below 5.

FAQ

How do I find a company's slug? Open the careers page and read the host. jobs.lever.co/spotify means Lever and spotify. jobs.ashbyhq.com/ramp means Ashby and ramp. If the company hides the ATS on its own domain, paste the domain anyway.

Why is salary empty? The company did not publish salary for that role. That is common.

How many jobs can one run save? 5,000 total, and by default 1,000 per company. Raise requestTimeoutSecs if a very large board is slow. timeoutSecs stops the run and keeps rows already saved.

Why is SmartRecruiters slower when descriptions are on? Including descriptions makes a SmartRecruiters run slower. Turn includeDescription off if you only need title, location, and date.

What happens if the slug is wrong? You get an error row, not a failed run. Empty boards (a Lever company that moved, a Workable account with zero jobs) are stored as EMPTY on the company summary and do not look like a crash.

If you plan to act on these rows, enriching the companies with contact and email data or a quick CSV cleanup are the usual next steps. BigiByte also builds scrapers for other job boards and company data when you need them as a separate job.

Need another data source, a scheduled job monitor, or a custom pipeline? BigiByte builds custom scrapers and APIs: https://bigibyte.com

Trademark Notice

Greenhouse, Lever, Ashby, Workable, SmartRecruiters, and Recruitee and related names, logos, and trademarks belong to their respective owners. Their use in this documentation is solely to identify the source of the data and does not imply affiliation, sponsorship, endorsement, or partnership.

Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, sponsored by, or otherwise officially associated with Greenhouse, Lever, Ashby, Workable, SmartRecruiters, and Recruitee.

Collecting information that is already public is generally legal. Scraping is not the same thing as hacking, and there is no single law that bans it. The limits are the usual ones: do not break into accounts, do not take private or confidential data, and be careful with personal data and copyrighted works. A site's terms can also restrict how you access it. Facts such as a public name, price, or rating are not the same thing as republishing someone's article or photo.

This actor collects information that is already publicly available. It does not access private or protected data.

This is not legal advice. For the longer explanation, see Apify's article Is web scraping legal?.