Career Site Jobs Scraper: Greenhouse, Lever, Ashby, Workable
Pricing
from $1.20 / 1,000 job returneds
Career Site Jobs Scraper: Greenhouse, Lever, Ashby, Workable
Get normalized job postings straight from companies' own career sites on Greenhouse, Lever, Ashby and Workable. Auto-detects the ATS from any careers URL, filters by keyword, location and remote, and can return only jobs that are new since the last run.
Pricing
from $1.20 / 1,000 job returneds
Rating
0.0
(0)
Developer
Fatih S.
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Career Site Jobs Scraper: Greenhouse, Lever, Ashby & Workable
Get every open job straight from the source: the company's own applicant-tracking system (ATS). Paste career-page URLs, ATS board links or just company slugs, and get clean, normalized job postings in one dataset, whether the company runs Greenhouse, Lever, Ashby or Workable.
Built for scheduled monitoring: switch on Only new jobs and each run returns (and charges for) only postings that appeared since the last run.
What you get
- ✅ 4 ATS platforms, one schema: Greenhouse, Lever, Ashby and Workable all map to the same fields.
- 🔎 ATS auto-detection: paste
https://www.figma.com/careers/and the Actor finds the Greenhouse board behind it. Bare slugs likelinearare looked up on Greenhouse, Lever, Ashby and Workable. - 🆕 Only new jobs since last run: job IDs are remembered per company in a named key-value store. Perfect for daily alerts and job-board feeds.
- 💰 Salary when published: structured pay ranges from Ashby and Lever, plus pay-transparency ranges parsed from descriptions (min, max, currency, interval).
- 🧹 Filters: keywords (title, department or full text), exclude words, locations, remote/hybrid/on-site, departments, employment type, posted within N days.
- 📊 Hiring signals per company: a
SUMMARYrecord with job counts, new and removed jobs, top departments, remote share and salary share for each company. - 🛡️ Polite and reliable: official public job-board endpoints only, robots.txt checked per host, Crawl-delay honoured, automatic back-off on 429s, and per-company error isolation, so one bad URL never kills the run.
- ⚡ Fast and cheap: plain HTTP JSON with no browser and no proxy. In our final test, 3,062 jobs from 10 companies on Greenhouse, Lever, Ashby and Workable came back in about 11 seconds.
Input examples
Pull everything from a few companies
{"companies": ["https://job-boards.greenhouse.io/stripe","https://jobs.lever.co/palantir","https://jobs.ashbyhq.com/openai","https://apply.workable.com/huggingface/"]}
US or remote engineering roles posted in the last 7 days, text descriptions only
{"companies": ["greenhouse:anthropic", "ashby:notion", "linear", "https://www.figma.com/careers/"],"keywords": ["engineer", "ML"],"excludeKeywords": ["intern"],"locations": ["United States", "Remote"],"postedWithinDays": 7,"descriptionFormat": "text"}
Daily new-jobs monitor (schedule this task)
{"companies": ["greenhouse:stripe", "lever:spotify", "ashby:ramp", "workable:huggingface"],"onlyNew": true,"stateStoreName": "my-sales-hiring-monitor","skipOutputOnFirstRun": true,"keywords": ["account executive", "SDR", "BDR"],"keywordsIn": "title"}
Accepted company formats
| You paste | Detected as |
|---|---|
https://job-boards.greenhouse.io/stripe, https://boards.greenhouse.io/embed/job_board?for=stripe, greenhouse:stripe | Greenhouse stripe |
https://jobs.lever.co/palantir, https://jobs.eu.lever.co/acme, lever:palantir, lever-eu:acme | Lever (global or EU) |
https://jobs.ashbyhq.com/ramp, ashby:ramp | Ashby ramp |
https://apply.workable.com/huggingface/, workable:huggingface | Workable huggingface |
https://www.figma.com/careers/ (any careers page) | Scanned for ATS links and embeds |
linear (bare slug) | Probed on Greenhouse, Lever, Ashby and Workable; the board with most jobs wins |
Output
One dataset item per job:
{"id": "ashby:notion:1fc309c8-da20-4ff2-84c7-8b863ece2b0a","jobId": "1fc309c8-da20-4ff2-84c7-8b863ece2b0a","sourceAts": "ashby","companySlug": "notion","company": "Notion","title": "Software Engineer, Developer Platform","department": "Engineering","team": "Engineering","location": "San Francisco, California","locations": ["San Francisco, California","New York, New York"],"country": "United States","isRemote": false,"workplaceType": "hybrid","employmentType": "FULL_TIME","employmentTypeRaw": "FullTime","postedAt": "2026-08-24T14:44:49.699Z","updatedAt": null,"salary": {"min": 213000,"max": 320000,"currency": "USD","interval": "YEAR","text": "$213,000 - $320,000","source": "description"},"descriptionText": "Who We Are\n\nNotion is the collaborative AI workspace where teams and agents think together. We're building one place where your knowledge, projects, meetings, a…","descriptionHtml": "<h1>Who We Are</h1><p style=\"min-height:1.5em\">Notion is the collaborative AI wo…","jobUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a","applyUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a/application","requisitionId": null,"hiringEntity": null,"boardUrl": "https://jobs.ashbyhq.com/notion","scrapedAt": "2026-10-08T09:08:19.189Z"}
| Field | Notes |
|---|---|
id | Stable unique key ats:company:jobId; use it for de-duplication |
isRemote / workplaceType | isRemote = fully remote. workplaceType is remote, hybrid, onsite or null |
employmentType | FULL_TIME, PART_TIME, CONTRACT, INTERN, TEMPORARY, OTHER or null (raw value in employmentTypeRaw) |
postedAt / updatedAt | ISO 8601. Greenhouse = first published / last updated, Lever = created, Ashby = published, Workable = published |
salary | {min, max, currency, interval, text, source}; source is structured (from the ATS) or description (parsed pay range) |
country | From the ATS where available, otherwise inferred from the location text |
isNew, firstSeenAt | Only in Only new jobs mode |
The run's key-value store has a SUMMARY record listing each input with status (ok, not_found, robots_disallowed, unsupported_ats, ats_not_detected, error), job counts, new/removed jobs, top departments, remote share and salary share.
Field coverage (measured on 2,900+ live jobs from 9 companies, Oct 2026)
| ATS | Title, location, URLs, description | Department | Employment type | Posted date | Salary (where employer publishes it) |
|---|---|---|---|---|---|
| Greenhouse | 100% | 100% | rarely exposed | 100% | parsed from description (3–88% depending on employer) |
| Lever | 100% | 100% | 92–100% | 100% | 34–65% |
| Ashby | 100% | 100% | 100% | 100% | 66–81% |
| Workable | 100% | 100% | 100% | 100% | if published |
Pricing
Pay per event, no subscription:
| Event | Price |
|---|---|
| Job returned | $0.002 per job ($2 per 1,000 jobs). Lower on paid Apify plans: $0.0018 (Starter), $0.0015 (Scale), $0.0012 (Business) |
| Company board checked | $0.0003 per company board fetched successfully |
Boards that fail (not found, unsupported ATS, robots.txt) are not charged. In Only new jobs mode you pay only for new jobs plus the per-company check, so a daily monitor of 100 companies with a few dozen new postings costs roughly $0.10–0.15 per day. Set Max total charge on the run to cap spend; the Actor stops cleanly at the limit.
Example: pulling all ~725 open Stripe jobs costs about $1.45.
Good to know
- Careers pages rendered by JavaScript may hide their ATS link. If detection fails, paste the ATS board URL instead.
- Not supported yet: Workday. Workday career-site URLs are recognized and listed in the run
SUMMARYasunsupported_ats(no charge). Workday support is planned for a later version. - Not supported: SmartRecruiters, whose
api.smartrecruiters.com/robots.txtdisallows all crawlers except LinkedInBot, and sites like LinkedIn, Indeed and Glassdoor, whose terms prohibit scraping. - Recruiter and hiring-manager names are not collected. Output is company and job data only.
- Unlisted Ashby jobs (direct-link only) are skipped.
Is it legal?
The Actor reads job postings that employers publish for the public through their ATS's public job-board endpoints, the same data any visitor sees without logging in. It honours robots.txt and rate limits and collects no personal data. Job descriptions are the employers' content, so check that your use (e.g. republishing on a job board) is permitted. This is not legal advice.
FAQ
How do I find a company's ATS? Paste their careers page URL; the Actor detects it. Or open any job on their site and look at the URL (greenhouse.io, lever.co, ashbyhq.com, workable.com).
Can I use different filters for different companies? Run separate tasks, each with its own stateStoreName if you use Only new jobs.
How do I get alerts? Schedule a task with Only new jobs on, then add an integration (Slack, email, webhook, Zapier, Make) that fires when the run succeeds.