Company Jobs Scraper (Greenhouse, Lever, Ashby + more)
Pricing
from $1.00 / 1,000 results
Company Jobs Scraper (Greenhouse, Lever, Ashby + more)
Open jobs from company career boards on Greenhouse, Lever, Ashby, SmartRecruiters and Workable in one run, read through each vendor's public job-board API. Paste board URLs; the ATS is detected automatically. Salary where published, filters, bounded retries; failed companies are never charged.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
signal clear
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Company Jobs Scraper (Greenhouse, Lever, Ashby, SmartRecruiters, Workable)
Collect the open jobs of any company whose careers page runs on Greenhouse, Lever, Ashby, SmartRecruiters or Workable, in one run and one output format. Paste the companies' board URLs; the vendor is detected automatically.
The Actor reads each vendor's own public job-board API: the unauthenticated JSON endpoints the vendors publish so companies can show their openings on their own sites. No HTML scraping, no browser, no login, so runs are fast and cheap.
Why this one
- One input list across five ATS vendors. Mix Greenhouse, Lever, Ashby, SmartRecruiters and Workable boards in the same run and get one schema back.
- Documented public endpoints, not page scraping, so it does not break when a careers page is redesigned.
- Salary where the employer publishes it: Ashby compensation, Greenhouse pay ranges (optional), Lever and SmartRecruiters salary fields when present.
- Bounded runs. Every request has a timeout, every company a fixed attempt budget.
- Failed companies are never charged. A company's jobs are saved only after the whole
company succeeded. A company that fails is listed in the
FAILED_COMPANIESrecord and contributes nothing to the dataset.
Supported boards and URL shapes
| Vendor | Board URLs accepted | API used |
|---|---|---|
| Greenhouse | boards.greenhouse.io/<token>, job-boards.greenhouse.io/<token>, boards.greenhouse.io/embed/job_board?for=<token> | boards-api.greenhouse.io/v1/boards/<token>/jobs?content=true |
| Lever | jobs.lever.co/<company>, jobs.eu.lever.co/<company> | api.lever.co/v0/postings/<company> (EU: api.eu.lever.co) |
| Ashby | jobs.ashbyhq.com/<org> | api.ashbyhq.com/posting-api/job-board/<org>?includeCompensation=true |
| SmartRecruiters | careers.smartrecruiters.com/<company>, jobs.smartrecruiters.com/<company> | api.smartrecruiters.com/v1/companies/<company>/postings |
| Workable | apply.workable.com/<account>, <account>.workable.com | apply.workable.com/api/v3/accounts/<account>/jobs |
A link to a single job on any of these boards also works; the company part is used.
You can also write ats:slug (for example lever:spotify) or an object
{"ats": "greenhouse", "slug": "airbnb"}.
How to find the slug: open the company's careers page and click any job. If the job link goes to one of the hosts above, the first path segment after the host is the slug. Companies that embed the board in their own domain usually still link to the vendor's host on the job or apply page.
Input
{"companies": ["https://boards.greenhouse.io/airbnb","https://jobs.lever.co/spotify","https://jobs.ashbyhq.com/ramp","https://careers.smartrecruiters.com/BoschGroup",{ "ats": "workable", "slug": "huggingface" }],"keywords": ["engineer", "developer"],"location": "","remoteOnly": false,"department": "","postedSince": "30 days","maxJobsPerCompany": 200,"includeDescription": "text"}
| Field | Meaning |
|---|---|
companies | Board URLs, ats:slug strings or {ats, slug} objects. Required. |
keywords | Keep jobs whose title contains any of these (case-insensitive). |
location | Keep jobs where any location contains this text. |
remoteOnly | Keep remote jobs only (see "Remote" below). |
department | Keep jobs whose department or team contains this text. |
postedSince | A date (2026-10-01) or an age (7 days, 24 hours, 2 weeks). Jobs without a date are dropped when set. |
maxJobsPerCompany | Matching jobs to keep per company (default 200). |
maxItems | Stop the run after this many jobs in total. |
includeDescription | text (default), html, both or none. |
includeGreenhouseSalary | Fetch Greenhouse pay ranges (one extra request per Greenhouse job). |
maxConcurrency | Companies in parallel (default 5). |
maxAttempts | Attempts per company, 1 to 5 (default 3). |
requestTimeoutSecs | Per-request timeout (default 30). |
proxyConfiguration | Defaults to the Apify datacenter proxy. |
Output
One dataset item per job:
{"ats": "ashby","company": "example-co","companySlug": "example-co","jobId": "6c1c3192-2508-4805-9dbb-08a4f581b44d","title": "Sales Development Representative","departments": ["Sales"],"team": "SDR","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)", "San Francisco, CA", "Washington, D.C."],"remote": true,"workplaceType": "hybrid","employmentType": "Full-time","salary": { "min": 110000, "max": 130000, "currency": "USD", "period": "year" },"postedAt": "2026-10-27T20:09:06Z","updatedAt": null,"applyUrl": "https://jobs.ashbyhq.com/example-co/6c1c3192-2508-4805-9dbb-08a4f581b44d/application","jobUrl": "https://jobs.ashbyhq.com/example-co/6c1c3192-2508-4805-9dbb-08a4f581b44d","descriptionText": "ABOUT USWe are building the smart infrastructure for finance teams...","input": "https://jobs.ashbyhq.com/example-co","scrapedAt": "2026-10-28T17:38:27Z"}
descriptionHtml is added when includeDescription is html or both. All timestamps are
ISO 8601 in UTC. Fields a vendor does not publish are null:
| Field | Greenhouse | Lever | Ashby | SmartRecruiters | Workable |
|---|---|---|---|---|---|
company (display name) | yes | slug | slug | yes | yes |
departments / team | departments | both | both | department or function | department |
remote | from location text | workplace type | flag | flag | flag |
employmentType | no | commitment | yes | yes | yes |
salary | optional, pay ranges | when the employer sets it | yes | when present | no |
postedAt | first published | created | published | released | published |
updatedAt | yes | no | when present | no | no |
Remote: Greenhouse has no remote flag, so a Greenhouse job counts as remote when its location or an office name contains "remote". The other vendors' own flags are used.
Order: Greenhouse and Ashby jobs are returned newest first; the others in board order.
Run records
FAILED_COMPANIES(key-value store): one entry per company that failed, withcompany,ats,input,errorandattempts. These companies are not charged.- The run exits with an error only when every company failed. Otherwise it succeeds with a status like "N jobs from M companies saved, K companies failed (not charged)".
Limits and behaviour
- An unknown board (HTTP 404) fails at once, without retries.
- SmartRecruiters answers an unknown company id with an empty list, not a 404, so a
SmartRecruiters company with no postings is reported in
FAILED_COMPANIESas "wrong id or no open jobs" (and not charged). - Rate limits, timeouts and server errors are retried with backoff on a fresh proxy session,
up to
maxAttempts; progress is kept between attempts. None of the five APIs sent rate-limit headers during testing; aRetry-Afterheader is honoured if one appears. - SmartRecruiters and Workable need one extra request per job for the description. Set
includeDescriptiontononefor large boards when you only need titles and links. - At most 10,000 SmartRecruiters postings and 100 Workable result pages are scanned per company.
- Typical item size: about 7 to 17 KB with the plain-text description, about 0.7 KB with
includeDescription: none.
Pricing
Pay per result: you are charged only for jobs saved to the dataset. Companies that fail
are not charged, and the run stops at maxItems or at your maximum charge.
Legal
The Actor reads public job postings through the vendors' public job-board APIs, which the vendors provide so that job listings can be displayed and distributed. It does not log in or bypass any access control. Postings may contain the names of recruiters or hiring managers only where the employer chose to publish them; the Actor does not add or look up personal data. You are responsible for how you use the data, including any terms of the individual vendors and employers and the data protection law that applies to you.