Greenhouse, Lever, Ashby & Workday Jobs Scraper – 10 ATS avatar

Greenhouse, Lever, Ashby & Workday Jobs Scraper – 10 ATS

Pricing

from $1.20 / 1,000 job listings

Go to Apify Store
Greenhouse, Lever, Ashby & Workday Jobs Scraper – 10 ATS

Greenhouse, Lever, Ashby & Workday Jobs Scraper – 10 ATS

Career site & ATS jobs scraper: Greenhouse, Lever, Ashby, Workday, Teamtailor, SmartRecruiters, Recruitee, Personio, Breezy & Workable. Input: company names or career-site URLs. Output: jobs with salary, location, remote flag. $1.75/1k.

Pricing

from $1.20 / 1,000 job listings

Rating

0.0

(0)

Developer

Glidepath

Glidepath

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

11 days ago

Last modified

Share

Career site & ATS jobs scraper: Greenhouse jobs, Lever jobs, Ashby and Workday in one. Get every open job from a company's career site in one clean format, whichever applicant tracking system (ATS) it uses. Give it company names, career-page URLs or provider:slug pairs; get back title, department, location, remote/hybrid flag, employment type, salary (when published), dates, apply link and the full description.

It reads the official public job-board feeds that these ATS vendors publish for career sites (no login, no cookies, no browser), so runs are fast, cheap and stable.

Supported ATSExample input
Greenhousegreenhouse:figma or https://boards.greenhouse.io/figma
Lever (US & EU)lever:palantir, https://jobs.lever.co/palantir, lever-eu:acme
Ashbyashby:ramp or https://jobs.ashbyhq.com/ramp
SmartRecruiterssmartrecruiters:Equinox or https://careers.smartrecruiters.com/Equinox
Recruiteerecruitee:bunq or https://bunq.recruitee.com
Personiopersonio:acme or https://acme.jobs.personio.de
Breezy HRbreezy:acme or https://acme.breezy.hr
Workableworkable:huggingface or https://apply.workable.com/huggingface
Workdayhttps://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite or workday:nvidia.wd5/NVIDIAExternalCareerSite
Teamtailorteamtailor:career or https://career.teamtailor.com

Workday and Teamtailor career sites have no public job API. The Actor reads them the way search engines do: the sitemap the site lists in its robots.txt, then each job page's structured data (schema.org JobPosting, the data published for Google for Jobs). Every page is checked against robots.txt, and Workday's internal endpoints are never used. Jobs come from the sitemap, which some Workday sites cap (e.g. at 100 jobs), and each job is one page request, so these boards are slower than the API-based ones.

Don't know which ATS a company uses? Just enter the company website (stripe.com) or name (Figma) — the Actor looks for the job board on the site and tries each supported ATS.

Who uses it

  • Recruiters and sourcing teams — watch target companies and get new openings every morning.
  • Job boards and aggregators — feed niche boards (remote, climate, AI, Web3, local) straight from employers' ATS.
  • Sales and market intelligence — hiring is a buying signal: track which companies hire for which teams and where.
  • Researchers and analysts — salary transparency, remote-work share, hiring trends by department or country.
  • AI agents — a single, predictable tool for "what jobs does company X have open right now?".

How to use it

  1. Add companies to Companies or job-board URLs (one per line), or point Company list file at a CSV, Excel file or Google Sheet with up to 5,000 companies.
  2. Optionally add filters: title keywords, locations, remote only, posted within N days, seniority, department, minimum salary, visa sponsorship.
  3. Run it and download the jobs as JSON, CSV or Excel — or call it via API, schedule it, or connect it to Make, Zapier, n8n, Google Sheets or your AI agent (Apify MCP).

Monitoring tip: turn on Only jobs that are new since the last run and schedule the Actor daily. The first run returns all current jobs; every later run returns only new postings, so you pay only for what's new.

Company lists from a file or Google Sheet

Have hundreds or thousands of target companies? Put them in a spreadsheet, one per row, and paste its link into Company list file (companiesFileUrl): a public CSV/TSV/TXT URL, an .xlsx file, a Google Sheet or a Google Drive file shared as "Anyone with the link can view". Each row can be a company name, a website, a career-page URL or provider:slug. The Actor uses the column you name in companiesFileColumn (header name like Website, or a letter like B); otherwise the first column called company, name, website, domain, url, job board or similar; otherwise the first column. File order is kept in INPUT_STATUS, duplicates are dropped, and up to 5,000 companies (5 MB) fit in one run.

{
"companies": [],
"companiesFileUrl": "https://docs.google.com/spreadsheets/d/<your-sheet-id>/edit",
"companiesFileColumn": "Website",
"onlyNewSinceLastRun": true
}

Seniority, salary and visa filters

Every job gets a few extra fields, read from what the employer published:

  • seniority: Intern, Entry-level, Senior, Manager or Executive, from words in the title ("Senior", "Staff", "Head of", "Werkstudent", …); null when the title has no level word.
  • salary from the description when the ATS has no salary field (salarySource: "description"; otherwise "ats"). Only a currency amount next to a pay word ("salary", "base pay", "Gehalt", …) or a currency range counts, so funding rounds and stipends are not read as pay. salaryMinAnnual / salaryMaxAnnual scale it to a year (hour ×2080, day ×260, week ×52, month ×12), in the job's own currency.
  • visaSponsorship: true or false when the description says so ("visa sponsorship is available", "we are unable to sponsor"), null when it isn't mentioned.

Filter on them with seniority, departments (department or team contains a term), minAnnualSalary (optionally salaryCurrency) and visaSponsorshipOnly. Locations match local and English names and ASCII spellings: Munich also finds München and Muenchen, Vienna finds Wien, Germany finds Deutschland.

{
"companies": ["greenhouse:figma", "ashby:ramp"],
"seniority": ["Senior", "Manager"],
"minAnnualSalary": 100000,
"salaryCurrency": "USD",
"locations": ["New York", "Remote"]
}

These are simple rules, not a model: titles with no level word, or descriptions that state pay or sponsorship in unusual words, give null. For deeper tagging (skills, remote scope, relocation) run the results through our Job Postings AI Tagger.

Track new, updated and closed jobs

Turn on Track changes (trackChanges) and every later run returns only what changed on the boards you watch: changeType is new, updated (title, location, team, salary or work type changed) or closed (the job is gone from the board), with firstSeenAt and a stable globalId (provider:board:jobId). Schedule it daily and send the changes to Slack, e-mail, Google Sheets or a webhook. The first run returns every current job as new; changes cut off by your limits are reported again next run.

Input example

{
"companies": ["greenhouse:figma", "https://jobs.lever.co/palantir", "ramp.com"],
"keywords": ["engineer", "developer"],
"excludeKeywords": ["intern"],
"locations": ["New York", "Remote"],
"postedWithinDays": 30,
"onlyNewSinceLastRun": false,
"includeDescription": true
}

Output example

{
"provider": "ashby",
"company": "ramp",
"companyName": null,
"jobId": "4859cd5e-f2a9-44d7-81f7-8bfc0e62369f",
"title": "Mobile Engineer, iOS",
"department": "Engineering",
"team": "Software Engineering - Industry",
"employmentType": "Full-time",
"workplaceType": "hybrid",
"isRemote": true,
"location": "New York, NY (HQ)",
"locations": ["New York, NY (HQ)", "Remote (Canada)", "San Francisco, CA", "Remote (US)"],
"city": "New York City",
"region": "NY",
"country": "USA",
"countryCode": null,
"postedAt": "2025-07-31T21:50:51Z",
"updatedAt": null,
"url": "https://jobs.ashbyhq.com/ramp/4859cd5e-f2a9-44d7-81f7-8bfc0e62369f",
"applyUrl": "https://jobs.ashbyhq.com/ramp/4859cd5e-f2a9-44d7-81f7-8bfc0e62369f/application",
"salary": {"min": 189000, "max": 330000, "currency": "USD", "period": "year", "text": "$189K - $330K"},
"salarySource": "ats",
"salaryMinAnnual": 189000,
"salaryMaxAnnual": 330000,
"seniority": null,
"visaSponsorship": null,
"descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams…",
"descriptionHtml": null,
"language": null,
"scrapedAt": "2026-09-25T09:30:53Z"
}
FieldDescription
provider, companyATS and the company's board id there
companyNameCompany name when the board publishes it
jobIdStable job id at the ATS (use it to de-duplicate)
title, department, teamAs published by the employer
employmentTypeNormalised: Full-time, Part-time, Contract, Internship, …
workplaceType, isRemoteremote / hybrid / onsite and a remote flag, when the employer states it
location, locations, city, region, country, countryCodeLocation details as available per ATS
postedAt, updatedAtISO 8601 UTC
url, applyUrlPublic job page and application link
salarymin, max, currency, period, text when the employer publishes pay
salarySourceats (structured field) or description (stated in the text)
salaryMinAnnual, salaryMaxAnnualSalary scaled to a year, same currency
seniorityIntern, Entry-level, Senior, Manager, Executive (from the title) or null
visaSponsorshiptrue / false when the description says so, else null
descriptionText, descriptionHtmlFull description (plain text by default; HTML on request)

Every run also stores INPUT_STATUS in its key-value store: one line per company, in your input order, with the ATS we detected (also unsupported ones such as iCIMS, Taleo or BambooHR, by name), whether we support it, jobs on the board, jobs matching your filters, jobs returned, and the reason when nothing came back. The full per-company SUMMARY is there too.

Use it with

  • Schedules: save your input as a Task and run it hourly, daily or weekly.
  • Integrations: Slack, e-mail, Google Sheets and Google Drive, webhooks, Make, Zapier and n8n (the Integrations tab of the Actor or Task).
  • API and code: the Apify API, the JavaScript and Python clients, or CSV/JSON/Excel downloads.
  • AI agents: the Apify MCP server exposes this Actor as a tool; the input is plain text and short lists.

Pricing

Pay per result: $1.75 per 1,000 job listings on the Apify Free plan; on paid plans $1.75 (Starter), $1.50 (Scale) and $1.20 (Business and higher) (the price for your plan is shown on the Pricing tab). The examples below use the Free-plan price. There is no charge for companies that have no open jobs or that couldn't be found, and duplicates of the same board are never charged twice.

  • Watch 50 companies daily with "only new" on: typically a few hundred new jobs a month → well under $1/month.
  • Full export of 200 companies × ~150 jobs = 30,000 jobs → about $52.50.

Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.

Limits and notes

  • Only jobs the employer publishes on a supported public job board are returned. Companies on other systems (e.g. iCIMS, Taleo, BambooHR, Jobvite) are named in INPUT_STATUS as detected but not supported yet. Company names are matched with legal suffixes removed ("Acme, Inc." → acme).
  • Detection by company name picks the first supported ATS with a matching board name; for exact results use a career-page URL or provider:slug.
  • Breezy HR descriptions are read from each public job page; everything else comes from the ATS feed in one request per company (SmartRecruiters: one extra request per job when descriptions are on).
  • Descriptions are cleaned to plain text. E-mail addresses and phone numbers inside descriptions are removed by default.
  • Workable occasionally rate-limits requests; the Actor waits and retries from the same connection. If the limit persists, that company is reported with status RATE_LIMITED in INPUT_STATUS and is not charged (never retried through other IPs). After a rate limit the Actor also slows down for that site (one request at a time), so just run it again later.

FAQ

Is it legal to scrape job listings? This Actor only reads job postings that employers publish on purpose through their ATS vendors' public job-board feeds, which exist so that the jobs can be shown on career sites and job boards. It doesn't log in, doesn't bypass any protection and doesn't collect personal data (recruiter names, e-mails and phone numbers are not extracted and are removed from descriptions). You are responsible for how you use the data; if you republish listings, respect the employer's terms and link back to the original job page.

Can I get only new jobs? Yes — enable Only jobs that are new since the last run. The Actor remembers job ids in a key-value store in your own account (name configurable, so you can keep several watchlists).

Why is a company "not found"? It uses a different ATS or a custom careers site. Try its career-page URL; if the page links to a supported job board, the Actor finds it.

Can I use it from an AI agent? Yes, via the Apify MCP server or API. Pass companies as a list (or companiesFileUrl for a long list); results are the dataset items above.

Support

Open an issue on the Actor's Issues tab with the input you used and the run link — we reply within a few days.

Made by Glidepath. See the changelog for updates.