Career Site Jobs Scraper - Greenhouse, Lever, Workday & 6 more
Pricing
$2.00 / 1,000 jobs
Career Site Jobs Scraper - Greenhouse, Lever, Workday & 6 more
Scrape jobs from career pages on Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Teamtailor, Recruitee and Personio. One schema: salary, remote, department.
Pricing
$2.00 / 1,000 jobs
Rating
0.0
(0)
Developer
Andres Garcia-Baquero Leon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Career Site Jobs Scraper — Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Teamtailor, Recruitee & Personio
Extract open job postings from company career pages hosted on Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Teamtailor, Recruitee and Personio (9 ATS) in one run, with one normalized schema. Get title, locations, remote/hybrid/onsite, employment type, department, publish date, salary ranges and the plain-text description when available. Export CSV, JSON or Excel, or consume the dataset API. Limits, source errors and field availability can reduce coverage.
No login, no proxies, no browser. Sources include documented job-board APIs, public feeds and Workday's undocumented career-site endpoint. Technical accessibility is not permission to republish or resell listings; check source and employer terms for your intended use.
What you can do with it
- Job aggregators & job boards — feed listings from hundreds of companies into your site.
- Recruiters & sourcers — watch target companies and catch new roles the day they are posted (
postedWithinDays). - Sales prospecting — hiring is a buying signal: find companies hiring for "data engineer", "SDR" or "security".
- Salary & labour-market research — salary ranges are returned as numbers (min, max, currency, interval) whenever the company publishes them.
- Competitive intelligence — track how competitors' teams and locations grow.
Input
Add companies in any of these formats (mix freely):
| Format | Example |
|---|---|
| Board URL | https://boards.greenhouse.io/airbnb, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/ramp |
| Workday career site URL | https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite |
platform:slug | greenhouse:airbnb, lever:spotify, ashby:ramp |
| SmartRecruiters | https://jobs.smartrecruiters.com/BoschGroup or smartrecruiters:BoschGroup |
| Recruitee | https://bunq.recruitee.com or recruitee:bunq |
| Personio | https://1komma5grad.jobs.personio.de or personio:1komma5grad |
| Workable | https://apply.workable.com/huggingface or workable:huggingface |
| Teamtailor | https://career.teamtailor.com or teamtailor:career (custom domains: teamtailor:jobs.example.com) |
| Bare slug (auto-detected) | airbnb — tried on Greenhouse, Lever, Ashby, Recruitee, Personio and Workable |
Optional filters: titleKeywords, locations (use remote to include remote roles), departments, remoteOnly, postedWithinDays, maxJobsPerCompany, maxResults, includeDescription.
{"companies": ["greenhouse:airbnb", "jobs.lever.co/spotify", "ramp","https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],"titleKeywords": ["engineer"],"postedWithinDays": 30,"maxResults": 500}
Finding the slug: open the company's "Careers" page and click a job. The URL shows the platform and slug — e.g. job-boards.greenhouse.io/airbnb/jobs/123 → greenhouse:airbnb. For Workday, copy the URL up to the site name (…myworkdayjobs.com/<SiteName>).
Output
One row per job, same fields for every platform:
{"platform": "ashby","companySlug": "ramp","boardId": "ashby:ramp","jobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245","title": "Security Engineer, Cloud","url": "https://jobs.ashbyhq.com/ramp/34413f8d-…","applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-…/application","locations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],"workplaceType": "hybrid","employmentType": "full_time","department": "Engineering","team": "Backend","postedAt": "2026-04-07T17:12:35.753000Z","salary": { "min": 211400, "max": 290600, "currency": "USD", "interval": "year","text": "$211.4K - $290.6K" },"description": "Ramp is…","scrapedAt": "2026-10-08T10:58:00Z"}
Normalized values: workplaceType ∈ remote | hybrid | onsite | null; employmentType ∈ full_time | part_time | contract | temporary | internship | null; dates are ISO 8601 UTC.
Fields the company does not publish are null — they are never guessed. Field coverage depends on the platform and the company:
| Field | Greenhouse | Lever | Ashby | Workday | SmartRecruiters | Workable | Teamtailor | Recruitee | Personio |
|---|---|---|---|---|---|---|---|---|---|
| Title, URL, locations, posted date | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Description | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | when published in feed |
| Department | ✅ | ✅ | ✅ | — | ✅ (function) | ✅ | ✅ | when set | ✅ |
| Workplace type (remote/hybrid) | when set | ✅ | ✅ | when in location | ✅ | remote flag | ✅ | ✅ | when in office list |
| Employment type | — | ✅ | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ |
| Salary range | when published | when published | when published | — | — | — | — | when published | — |
A run summary is saved to the key-value store record OUTPUT: per company, the detected platform, jobs found, jobs delivered and any error (e.g. board not found (404)). An upstream source error is isolated to its company so other companies can proceed. Invalid input and billing errors may stop the run.
Source response integrity
For Greenhouse and Ashby, a successful HTTP response must contain an explicit jobs array. jobs: [] is a valid empty board; a missing array, JSON null, wrong container, missing usable ID/title or a field structure that the normalizer cannot parse is a source error, not proof of zero vacancies. The fetched board is normalized before its rows are billed: if validation fails, no jobs from that board are delivered. This conservative policy may withhold valid jobs alongside a malformed record. Already delivered jobs from other boards remain available.
Read per-company OUTPUT.error and top-level OUTPUT.status before interpreting results. Mixed success is partial; if every board fails and no jobs are delivered, the run fails. A malformed response during bare-slug autodetection does not silently advance to another platform; HTTP 404 can still advance. Empty boards can legitimately stop autodetection. Use an explicit platform/URL to disambiguate a company slug. Ashby postings with isListed: false are excluded, and unknown listing-flag types are rejected. HTTP 429/5xx, invalid JSON and transport errors retain their existing retries; a structurally unexpected JSON body is reported without extra shape retries. These new shape checks do not certify every field or the other seven ATS adapters.
Identity, duplicates and limits
Every result includes boardId, the resolved board namespace. Use (boardId, jobId) as its stable key. Within a run, an auto-detected slug and an explicit URL for the same board do not deliver or charge the same job twice. Different ATS platforms and different Workday sites remain separate namespaces; migration copies across ATS platforms are not merged. Teamtailor custom-domain aliases are not automatically resolved to the vendor domain.
OUTPUT.duplicatesExcluded (also per company) counts duplicate candidate rows excluded before billing. Only the successfully charged prefix enters the delivered-ID set; jobs excluded by maxJobsPerCompany remain eligible through a later alias. maxResults and the charge budget apply to the whole run. Board fetching and delivery are sequential, so there is no concurrent identity reservation within a run. Deduplication is not persistent across runs: a scheduled run may deliver and charge a listing again. This is a current-listings extractor, not a new-jobs-only monitor.
With omitted input {}, the Actor uses Airbnb on Greenhouse, Spotify on Lever and Ramp on Ashby. Explicit invalid targets never switch to demo data. An empty companies array is rejected; valid boards with no matching jobs may legitimately produce zero rows. If all boards fail, the run fails with per-board errors in OUTPUT.
Pricing
$2 per 1,000 jobs (pay per result). You pay only for jobs written to the dataset — filtered-out jobs are free. Set Maximum cost per run in the run options to cap spend; the Actor stops cleanly when the cap is reached.
FAQ
Which companies are supported? Any company whose career site runs on Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Teamtailor, Recruitee or Personio — US tech, large enterprises (Workday, SmartRecruiters) and European SMEs and scale-ups (Workable, Teamtailor, Recruitee, Personio).
What permissions do I need? Public access does not establish commercial reuse rights. Each ATS and each employer has its own terms. Greenhouse and Ashby document their public job APIs for an organization's own career pages; that documentation is not a third-party resale license. Their customer agreements have customer/service-use restrictions, and we have not established how those agreements apply to this public-API use or obtained a blanket redistribution permission. Workday's site terms restrict automated extraction and commercial reuse, with the scope for employer career sites unresolved in our review. SmartRecruiters' API robots.txt disallows generic bots; the Actor does not claim robots-compatible access for all sources. Check and obtain any necessary permissions for your use case, especially republishing listings. No agreements or permissions are accepted on your behalf.
Why did a company return 0 jobs? Either the slug is wrong (see OUTPUT → board not found), the company has no open roles, or your filters excluded everything.
Workday and SmartRecruiters are slower — they need one request per job for the full description. Use maxJobsPerCompany or filters to keep runs short.
Found a bug or need another ATS (BambooHR, JazzHR, Breezy…)? Open an issue on the Actor page.
Will aliases be billed twice? Not for the same resolved (boardId, jobId) within one run. Separate runs are billed separately, and unknown custom-domain aliases or cross-ATS copies may remain distinct.
How do I export or automate? Open the run dataset and export CSV, JSON or Excel; use its API URL with n8n, Make, Zapier or your own pipeline. Use boardId plus jobId for downstream upserts, and read OUTPUT before treating a partial run as complete.