Career Page Jobs Scraper: Greenhouse, Lever, Ashby, Workable
Pricing
from $2.00 / 1,000 jobs
Career Page Jobs Scraper: Greenhouse, Lever, Ashby, Workable
ATS jobs API for company career pages. Give company names or domains, get every open job from Greenhouse, Lever, Ashby, Workable, Recruitee and SmartRecruiters in one format, with salary ranges and full descriptions. Filter by title, location, remote and date.
Pricing
from $2.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Ogochukwu Ozor
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Security
Limited permissionsShare
An ATS jobs API for company career pages. Get every open job from the companies you name, in one clean format, straight from their official job boards.
Type a company name, website or job board link. The scraper works out which hiring system (ATS) the company uses, reads its public job board and returns every listing with title, location, remote/hybrid, department, employment type, posting date, apply link, salary where published and the full description.
- 6 hiring systems: Greenhouse, Lever, Ashby, Workable, Recruitee, SmartRecruiters
- No ATS detective work: give "Stripe", "stripe.com" or a board URL; it finds the board
- One schema for all: the same fields whatever system the company uses
- Salary ranges: from Ashby, Lever and Recruitee listings, Greenhouse pay-transparency ranges, and ranges written in descriptions
- Fresh: read live from the company's board on every run, nothing cached
- Official endpoints only: each system's public job board API, the same one that powers the company's careers page. No logins, no proxies.
Supported hiring systems (ATS)
| ATS | Example board URL you can paste | Salary data |
|---|---|---|
| Greenhouse | https://job-boards.greenhouse.io/airbnb or boards.greenhouse.io/airbnb | Pay-transparency ranges (mostly US jobs) |
| Lever | https://jobs.lever.co/palantir (EU boards too) | Salary range when the company sets one |
| Ashby | https://jobs.ashbyhq.com/openai | Compensation ranges, often with equity |
| Workable | https://apply.workable.com/huggingface/ | Ranges written in the description |
| Recruitee | https://bunq.recruitee.com | Salary field when published |
| SmartRecruiters | https://jobs.smartrecruiters.com/BoschGroup | Ranges written in the description |
Or just type the company name or website and let the scraper find the board.
Who it's for
- Job seekers and job boards: track openings at target companies, build niche job boards and job alerts
- Sales and lead generation: use hiring signals (who is hiring, for which teams, where) to find companies that need your product
- Recruiters and talent teams: watch competitors' open roles and new team build-outs
- Investors and analysts: follow headcount growth, new offices and salary ranges across a portfolio
- AI agents and automations: structured job postings data from named companies, ready for LLMs
How to use it
- Click Try for free.
- Add companies, one per line:
Stripe,notion.so,https://jobs.lever.co/palantir. - Optionally filter by title, location, department, remote or posting date.
- Click Start. Results come back as a table you can export to JSON, CSV, Excel or HTML.
A board URL is the most reliable input. A plain name works when the company's board uses its name (most do). If a name isn't found, the run summary tells you, and pasting the careers page URL usually fixes it.
Input
| Field | Default | What it does |
|---|---|---|
| Companies | — | Names, websites or job board URLs |
| Job title contains | all | Keep titles containing any of these words |
| Job title does not contain | — | Drop titles containing any of these, e.g. intern |
| Location contains | all | e.g. London, Germany, Remote |
| Department or team contains | all | e.g. Engineering, Sales |
| Remote jobs only | off | Only jobs marked remote |
| Posted within the last N days | any | e.g. 7 for last week's jobs |
| Include job descriptions | on | Full description as plain text |
| Fetch Greenhouse pay ranges | on | One extra quick request per Greenhouse job |
| Maximum jobs per company | no limit | Newest first |
| Maximum jobs in total | 1000 | You pay per job saved |
Output example
{"company": "Airbnb","ats": "greenhouse","boardSlug": "airbnb","jobId": "7712345","title": "Senior Software Engineer, Payments","department": "Engineering","location": "United States","remote": true,"workplaceType": "Remote","employmentType": null,"postedAt": "2026-11-03T10:12:00-04:00","url": "https://careers.airbnb.com/positions/7712345?gh_jid=7712345","applyUrl": "https://careers.airbnb.com/positions/7712345?gh_jid=7712345","salaryMin": 212000,"salaryMax": 265000,"salaryCurrency": "USD","salaryPeriod": "year","salaryText": "Pay Range: 212,000-265,000 USD","salarySource": "job board","descriptionText": "Airbnb was born in 2007 when ...","input": "Airbnb","scrapedAt": "2026-11-06T09:00:00+00:00"}
Values are standardised across systems: workplaceType is Remote, Hybrid or On-site; employmentType is Full-time, Part-time, Contract, Internship or Temporary; salaryPeriod is hour, day, week, month or year. Fields a company doesn't publish are null.
A SUMMARY record in the run's key-value store lists, for each input, the job board found, how it was found and how many jobs are open, plus any other boards that matched the same name.
Pricing
$2 per 1,000 jobs saved. A 50-company run with 2,000 jobs costs about $4. Filters are applied before saving, so you only pay for the jobs you keep. You can cap the maximum charge per run.
Use it from code
curl -X POST "https://api.apify.com/v2/acts/nikaido_thc~company-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companies": ["Stripe", "OpenAI"], "titleKeywords": ["engineer"], "postedWithinDays": 7}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("nikaido_thc/company-jobs-scraper").call(run_input={"companies": ["Stripe", "OpenAI"], "remoteOnly": True})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["company"], job["title"], job["location"], job["salaryText"])
Schedule it daily with Apify Schedules and send new jobs to Google Sheets, Slack, a webhook, Make, Zapier or n8n through Integrations. AI agents can call it through the Apify MCP server.
FAQ
How is this different from LinkedIn or Indeed job scrapers? Jobs come straight from the company's own careers page, so they are the original postings with the direct apply link, appear there first, and include the full description and published salary. No job board duplicates or reposted agency ads.
Which companies are supported? Any company whose careers page runs on Greenhouse, Lever, Ashby, Workable, Recruitee or SmartRecruiters. That includes a large share of tech companies and startups. Workday, iCIMS, Taleo and in-house career sites are not supported yet.
Why wasn't my company found? Its board may use a different name from the company (e.g. "acme-corp"), or it uses a system not listed above. Paste the careers page or job board URL instead.
Why is salary missing for some jobs? Only some companies publish pay. US jobs on Greenhouse often have pay-transparency ranges; many European jobs don't publish salary at all.
Is this allowed? The scraper only reads the public job board endpoints that each hiring system provides so companies can show their jobs on their own careers sites. It collects job listings only, no applicant or candidate data.
Feedback
Want another hiring system or field? Open an issue on the Issues tab.