Company Jobs Scraper (Greenhouse, Lever, Ashby & more)
Pricing
$1.50 / 1,000 results
Company Jobs Scraper (Greenhouse, Lever, Ashby & more)
All open jobs from company career boards across six applicant-tracking systems in one normalized schema. Paste careers URLs or just company slugs; the Actor finds the board.
Pricing
$1.50 / 1,000 results
Rating
0.0
(0)
Developer
Roei Amos
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Type a company name and get all its open jobs. One run covers Greenhouse, Lever (US and EU), Ashby, Workable, SmartRecruiters and Recruitee, and every job comes back in one clean schema. You don't need to know which hiring system a company uses: a bare name such as ramp is detected automatically. It costs $1.50 per 1,000 jobs.
What you can use it for
- Hiring-signal lead lists. Find companies hiring SDRs, data engineers or their first marketer, and pitch them while the budget is open.
- Job boards and job alerts. Feed a niche board (remote, AI, climate, your country) straight from company career pages, with no aggregator lag.
- Competitor and market intel. Track how many roles competitors open by department, location and seniority, week over week.
- Job seekers and recruiters. Monitor a target list of companies and get only new roles with Posted within (days).
- AI agents. Call it as a tool through Apify MCP to answer questions like "Is Stripe hiring backend engineers in Dublin?".
How it works
Paste careers-page URLs or just company slugs. The Actor reads each company's official public job board API, the same one their own careers site uses, and returns every open role: title, department, team, location, remote flag, employment type, salary (when published), posting date and links. You can filter by title keywords, location, remote and posting age. Turn on Include description for full plain-text job descriptions.
Because the data comes from official board APIs, runs are fast, cheap and stable. There's no browser, no login and no blocking.
Input
| Field | Type | Description | Default |
|---|---|---|---|
companies (required) | array | One per line: a careers board URL (boards.greenhouse.io/airbnb, jobs.lever.co/spotify, jobs.ashbyhq.com/ramp, apply.workable.com/huggingface, jobs.smartrecruiters.com/BoschGroup, bunq.recruitee.com), a pinned slug like lever:spotify, or a bare slug like ramp to auto-detect the system. | |
keywords | array | Keep jobs whose title contains any of these (case-insensitive). | |
locations | array | Keep jobs whose location or country contains any of these, e.g. London, Remote, US. | |
remoteOnly | boolean | Keep only jobs the board marks as remote. | false |
postedWithinDays | integer | Keep jobs posted in the last N days. Empty means any time. | |
includeDescription | boolean | Add the full job description as plain text (makes items much larger). | false |
maxResults | integer | Stop after this many jobs. 0 means no limit. You are charged per job. | 1000 |
Output
Each result is one dataset item:
| Field | Type | Description |
|---|---|---|
id | string | Stable id: ats:company:jobId |
title | string | Job title |
company | string | Board slug |
companyName | string, null | Company display name when the board provides it |
ats | string | greenhouse, lever, ashby, workable, smartrecruiters or recruitee |
department | string, null | Department |
team | string, null | Team |
location | string, null | Location text (multiple joined by |) |
country | string, null | Country or country code |
remote | boolean, null | Remote flag from the board |
workplaceType | string, null | remote, hybrid or on-site when provided |
employmentType | string, null | Full-time, contract, etc. |
salary | string, null | Salary range when published |
url | string | Job page |
applyUrl | string, null | Application page |
postedAt | string, null | Published (ISO 8601) |
updatedAt | string, null | Last updated (ISO 8601) |
description | string, null | Plain-text description (when enabled) |
Example item
{"id": "greenhouse:airbnb:8184174","title": "Account Manager","company": "airbnb","companyName": "Airbnb","ats": "greenhouse","department": "Business Development","team": null,"location": "London, United Kingdom","country": null,"remote": false,"workplaceType": null,"employmentType": null,"salary": null,"url": "https://careers.airbnb.com/positions/8184174?gh_jid=8184174","applyUrl": "https://careers.airbnb.com/positions/8184174?gh_jid=8184174","postedAt": "2026-09-09T08:35:19.000Z","updatedAt": "2026-09-30T00:00:54.000Z"}
Example input
{"companies": ["https://boards.greenhouse.io/airbnb","https://jobs.lever.co/spotify","https://jobs.ashbyhq.com/ramp","https://apply.workable.com/huggingface","https://bunq.recruitee.com","https://jobs.smartrecruiters.com/BoschGroup"],"maxResults": 600}
Pricing
Pay per result: $1.50 per 1,000 results. You are charged once per item in the dataset (event result), plus Apify's small per-run start fee. Platform compute is included.
Set Max results or a maximum run cost to cap spend; the Actor stops cleanly when either is reached.
FAQ
Which companies are supported?
Any company whose career site runs on Greenhouse, Lever (US or EU), Ashby, Workable, SmartRecruiters or Recruitee. That covers a large share of tech and startup hiring. If you only know the company name, enter its slug (e.g. ramp) and the Actor checks all six systems.
How do I find a company's slug?
Open its careers page and look at the job links: boards.greenhouse.io/airbnb → airbnb, jobs.lever.co/spotify → spotify. You can paste the full URL instead.
How fresh is the data?
Live: every run reads the company's job board at that moment. Schedule it daily and filter by Posted within (days) to get only new roles.
Why did a company return nothing?
Either it uses a different hiring system, or the slug is wrong. The run log lists inputs with no job board found; if no input matches at all, the run fails with a clear message so you are not charged for an empty result.
Reliability
Runs that return no data, mostly incomplete items, or mostly failed requests are marked FAILED with a reason instead of succeeding with an empty dataset. Each run stores a RUN_SUMMARY record in its key-value store.