Careers Page Jobs Scraper: Greenhouse, Lever, Workday & Ashby avatar

Careers Page Jobs Scraper: Greenhouse, Lever, Workday & Ashby

Pricing

from $2.00 / 1,000 job results

Go to Apify Store
Careers Page Jobs Scraper: Greenhouse, Lever, Workday & Ashby

Careers Page Jobs Scraper: Greenhouse, Lever, Workday & Ashby

Scrape every open job from any company careers page on Greenhouse, Lever, Ashby, Workday, SmartRecruiters or Workable. Paste URLs or names, ATS auto-detected. Full descriptions, salary, and a new/closed jobs feed for hiring signals. Live data, no login, $2 per 1,000 jobs.

Pricing

from $2.00 / 1,000 job results

Rating

0.0

(0)

Developer

Clean Row Data

Clean Row Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Careers Page Jobs Scraper: Greenhouse, Lever, Workday, Ashby, SmartRecruiters & Workable jobs API

Scrape every open job from any company's careers page, with full descriptions and salary, in one clean schema. Paste careers URLs, ATS board links or just company names; the Actor auto-detects the applicant tracking system (ATS) and reads the company's official public job feed live: Greenhouse, Lever, Ashby, Workday, SmartRecruiters and Workable. Schedule it with Changes only and you get just the new and closed jobs since the last run, a ready-made hiring-signal feed for recruiting and sales.

  • ✅ 6 ATS platforms in one Actor: no need to run a separate Greenhouse scraper, Lever scraper and Workday scraper
  • ✅ ATS auto-detection from any careers URL, ats:token, or a plain company name
  • ✅ Full job descriptions (plain text and HTML), department, team, locations, remote flag, employment type, posted date, apply URL
  • ✅ Salary: structured pay ranges (Lever, Ashby) plus pay-transparency ranges extracted from descriptions (Workday, Greenhouse, SmartRecruiters...)
  • ✅ New / closed jobs feed: status = new / active / closed, plus first_seen, last_seen and closed_at
  • ✅ Workday done right: gets past Workday's 2,000-result cap and fills department from Workday's Job Category
  • ✅ Live data: every run reads the boards at that moment. Official public job-board feeds, no login, no proxies, no browser
  • ✅ $2 per 1,000 jobs + $0.002 per company checked

Quick start (first run in seconds)

  1. Click Start. The prefilled input checks Airbnb (Greenhouse), Spotify (Lever) and Linear (Ashby) and returns up to 25 jobs per company (about 75 rows, usually in under 10 seconds, about $0.16).
  2. Replace the companies with your own: careers URLs (https://boards.greenhouse.io/stripe), Workday URLs (https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite) or names (notion).
  3. Set Max jobs per company to 0 for every job, add keyword/location filters, and export to CSV, Excel, JSON or Google Sheets, or use the API.

Use cases and ready-to-paste inputs

1. Sales teams: hiring signals on your target accounts

"Company X just opened 12 data-engineering roles" is a buying signal. Track your account list and get only the new roles every day.

{
"companies": ["https://boards.greenhouse.io/stripe", "https://jobs.ashbyhq.com/ramp", "notion"],
"keywords": ["data", "security", "revenue operations"],
"changesOnly": true,
"feedKey": "my-target-accounts"
}

2. Recruiting and staffing agencies: watch client and target companies

Get alerted the moment target accounts open roles that fit your candidates, with the full description to match on skills.

{
"companies": ["https://jobs.lever.co/spotify", "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"],
"keywords": ["engineer"],
"locations": ["United States", "Remote"],
"postedSince": "7 days"
}

3. Job boards and aggregators: a niche board that stays fresh

Daily changes-only run over your company list: insert new rows, delete closed rows.

{
"companies": ["https://jobs.ashbyhq.com/linear", "https://apply.workable.com/huggingface", "https://jobs.smartrecruiters.com/ServiceNow"],
"remoteOnly": true,
"changesOnly": true
}

4. Labor-market, HR and compensation research

Department mix, location mix, remote share and published salary ranges across a set of employers.

{
"companies": ["airbnb", "https://jobs.lever.co/palantir", "https://boards.greenhouse.io/figma"],
"includeDescriptionHtml": false,
"trackState": false
}

5. AI agents and RAG

Clean, consistent JSON with plain-text descriptions, ready for LLMs. Works through the Apify MCP server.

Sample output

Real rows from October 2026 runs (descriptions omitted here; every row also has description_text and description_html). Download the full example dataset from the prefilled input (76 jobs from Airbnb, Spotify and Linear): CSV · JSON · Excel.

CompanyATSTitleDepartmentLocationRemoteSalaryPosted
AirbnbGreenhouseSenior Partnership ManagerPartnershipsUnited Statesyes$157,000—$185,000 USD2026-10-16
AirbnbGreenhouseStaff Data Engineer, Tech FoundationsEngineering & TechnologySan Francisco, CAyes2026-10-16
SpotifyLeverSenior Machine Learning Engineer, PersonalizationEngineeringNew York, NYyes184,049–262,928 USD, plus equity2026-10-14
LinearAshbySenior / Staff Security EngineerProductNorth Americayes2026-10-15
NvidiaWorkdaySales Operations AnalystSalesUS, CA, Santa Clarano92,000 USD - 143,750 USD2026-10-16
StripeGreenhouseSolutions Engineer, AI Build Team1650 AI GTM Strategy & SolutionsUS-SF, US-NYC, US-Remoteyes2026-10-16

Each row as JSON

{
"company": "Airbnb",
"ats": "greenhouse",
"board_token": "airbnb",
"job_id": "8282351",
"requisition_id": "ONE",
"title": "Senior Partnership Manager",
"department": "Partnerships",
"team": null,
"location": "United States",
"locations": ["United States"],
"country": null,
"remote": true,
"workplace_type": "remote",
"employment_type": "FULL_TIME",
"employment_type_raw": null,
"posted_at": "2026-10-16T19:59:45Z",
"updated_at": "2026-10-16T19:59:45Z",
"apply_url": "https://careers.airbnb.com/positions/8282351?gh_jid=8282351",
"job_url": "https://careers.airbnb.com/positions/8282351?gh_jid=8282351",
"salary_min": 157000,
"salary_max": 185000,
"salary_currency": "USD",
"salary_period": "YEAR",
"salary_text": "$157,000—$185,000 USD",
"salary_source": "description",
"description_text": "Airbnb was born in 2007 when two hosts welcomed three guests ...",
"description_html": "<div class=\"content-intro\"><p>Airbnb was born in 2007 ...",
"status": "new",
"first_seen": "2026-10-17T04:00:33Z",
"last_seen": "2026-10-17T04:00:33Z",
"closed_at": null,
"input": "https://boards.greenhouse.io/airbnb",
"scraped_at": "2026-10-17T04:00:33Z"
}

Every row has the same columns whatever the source system, so you can export to CSV, Excel, JSON or Google Sheets, or pull it through the API. The dataset has three ready-made views: Overview, Changes (new / closed) and Salary. Each run also writes a RUN_SUMMARY record. It lists, per company, the detected ATS, how many jobs are on the board, the emitted/new/closed counts and any error.

Notes on fields:

  • employment_type is normalized to FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, TEMPORARY or OTHER. The original value is kept in employment_type_raw.
  • salary_source is ats when the system provides structured pay. It's description when the range was extracted from a pay-transparency statement in the job text.
  • All dates are ISO 8601 in UTC.

Supported systems and what to paste

SystemExample inputHow it's fetched
Greenhousehttps://boards.greenhouse.io/stripe, https://job-boards.greenhouse.io/figma, greenhouse:airbnbOfficial Job Board API (boards-api.greenhouse.io)
Leverhttps://jobs.lever.co/spotify, jobs.eu.lever.co/..., lever:palantirOfficial Postings API (api.lever.co/v0/postings)
Ashbyhttps://jobs.ashbyhq.com/ramp, ashby:notionOfficial public Job Posting API (with compensation)
Workdayhttps://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSitePublic careers-site JSON (the same feed the careers page uses)
SmartRecruitershttps://jobs.smartrecruiters.com/ServiceNow, smartrecruiters:BoschGroupOfficial public Posting API
Workablehttps://apply.workable.com/huggingface, workable:skroutzPublic jobs widget API

You can also paste:

  • a plain company name or slug such as stripe. We probe Greenhouse, Lever, Ashby, Workable and SmartRecruiters and pick the board with jobs.
  • a company's own careers page such as https://www.example.com/careers. We look for an embedded or linked ATS board.
  • a display name such as Acme Corp | https://jobs.lever.co/acme, to set the company column.

Workday always needs the full myworkdayjobs.com URL, because tenant and site names can't be guessed.

Filters are optional and combine with AND. Each list matches any of its values, case-insensitive and on whole words, so intern doesn't match internal.

  • keywords / excludeKeywords match the job title. Turn on keywordsInDescription to also search descriptions.
  • locations match any of the job's locations or its country. Remote also matches jobs flagged remote.
  • departments match the department or team. For Workday this is the Job Category.
  • postedSince takes a date (2026-10-01) or a relative period (24 hours, 7 days, 2 weeks).

Changes-only mode (daily new/closed feed)

Turn on Changes only and schedule the Actor (for example daily). Each run emits:

  • status: "new" for jobs that weren't on the board at the previous run of this feed
  • status: "closed" for jobs that disappeared since the previous run, with closed_at set

Jobs that are still open aren't emitted again, so you don't pay for them.

History is stored per company as a small record in a named key-value store in your Apify account (default careers-jobs-feed-state). Use a different State store name or Feed key for each independent feed, for example one per client or per filter set.

How state behaves:

  • First run: the first run for a company emits all current jobs as new. Turn off firstRunEmitsAll to record a silent baseline instead.
  • Failed fetches: if a company can't be fetched in a run, its state isn't touched, so nothing is falsely reported as closed.
  • Filters: only jobs that match your filters are tracked. If you change the filters, previously excluded jobs are re-evaluated.
  • Full mode: without Changes only, every run returns all matching jobs, still with status, first_seen and last_seen. Turn off Track state for one-off exports.

How it compares

Careers Page Jobs Scraper (this Actor)Fresh Jobs API (our jobs index)LinkedIn / Indeed job scrapersSingle-ATS scrapers
Best forCompanies you already knowDiscovering jobs across 17,000+ companies by title/locationJob-board searchOne ATS only
SourceEmployer's own ATS, read liveEmployer's own ATS, index refreshed hourly (Workday daily)Job board listings, repostsOne ATS
ATS platforms6, auto-detected9n/a1
Full descriptions✅❌ not yet✅usually ✅
Salary✅ structured + extracted from text✅ when structuredvariesvaries
New / closed jobs✅ per-company diff✅ time windows + closed in last 7 dayspartialrarely
Login / proxiesnonenoneoftennone
Price$2 / 1,000 jobs + $0.002 per company$2.50 / 1,000 jobsvariesvaries

Don't know which companies to watch yet? Search by title and location across 1.17M jobs with the Fresh Jobs API, then track the companies you find here.

Pricing (pay per event)

EventPrice
Job row in the dataset (new, active or closed)$0.002 (= $2 per 1,000 jobs)
Company checked (per company per run; boards with more than 1,000 open jobs count once per 1,000 jobs on the board)$0.002
Actor start (Apify's standard start event)$0.00005

Examples:

  • First run with the prefilled input: 3 companies × 25 jobs = 75 jobs, which costs $0.15 + $0.006 = about $0.16.
  • One-off export: 50 companies × 200 jobs = 10,000 jobs, which costs $20.00 + $0.10 = $20.10.
  • Daily changes-only feed: 200 companies with about 150 new/closed jobs a day, which costs $0.40 + $0.30 = about $0.70 a day.

You never pay for jobs filtered out by your filters. Set Max jobs per run or the run's maximum cost to stay within budget. The Actor stops cleanly when the limit is reached.

Tips for fast, cheap runs

  • Use Changes only for scheduled feeds.
  • For big Workday and SmartRecruiters employers, descriptions need one request per job. Turn off Include job descriptions if you only need titles, locations and links. Changes-only mode already fetches descriptions just for new jobs.
  • Use the Max jobs per company and Posted since filters for quick samples.

FAQ

Is this legal? Do you scrape behind logins? No logins, no captcha or block bypassing, no proxies. The Actor only reads the public job-board feeds that companies publish so their jobs can be found and syndicated. Most of these are official, documented APIs: Greenhouse Job Board API, Lever Postings API, Ashby Job Posting API and SmartRecruiters Posting API. Workday and Workable data comes from the same public JSON their careers pages load. We don't collect recruiter names or contact details. See Responsible use below.

How fresh is the data? Live: every run reads the boards at that moment.

Is it a LinkedIn jobs alternative? For the companies you track, yes: companies publish on their own ATS first, the data is cleaner (no reposts or promoted listings) and the apply link goes straight to the employer. It won't find jobs that exist only on LinkedIn.

How do I find the right careers URL? Open any job on the company's careers site: the address usually contains greenhouse.io, lever.co, ashbyhq.com, myworkdayjobs.com, smartrecruiters.com or workable.com. Paste that link. Or just paste the company name and let the Actor probe.

Why did a company return "not found"? The board token or URL doesn't exist on that system, or the company moved to another ATS. Paste the URL of a job on their careers site. RUN_SUMMARY shows what was detected for each input.

One company failed. Did the run fail? No. Each company is isolated. A bad URL, a typo or a site outage never stops the run: the company is retried with exponential backoff and, if it still fails, it's reported in the Run summary (the RUN_SUMMARY record, linked from the run's Output tab) with status = not_found or error and a readable error message, while the others continue.

  • error (timeouts, HTTP 5xx, Workday maintenance windows): not charged, history untouched, just run it again later.
  • not_found (the board doesn't exist, or the URL isn't a supported careers page): counts as one company checked event, because the lookup was done.

Workday says 2,000 jobs. Do I get them all? Yes, in nearly all cases. Workday's search stops at 2,000 results, so the Actor automatically splits the search by Workday's own facets (job category, location and so on) and de-duplicates. In the rare case a board still can't be fully listed, a warning is logged and closed-job detection is paused for that board, so you get no false "closed" rows.

Can I get jobs from companies on other systems (iCIMS, Taleo, SuccessFactors, Teamtailor, Recruitee, Personio...)? Not in this Actor yet. Recruitee, Personio and Rippling jobs are searchable in the Fresh Jobs API. Tell us in the Issues tab which systems you need.

Can I use it from code, Make, Zapier, n8n, Clay or an AI agent? Yes. Use the Apify API, any Apify integration or the Apify MCP server. Input and output are fully described by schemas.

Limits

  • Supported systems: Greenhouse, Lever, Ashby, Workday, SmartRecruiters and Workable. Other systems (iCIMS, Taleo, SuccessFactors, Teamtailor, Recruitee, Personio...) return not_found.
  • Workday needs the full *.myworkdayjobs.com careers URL. Workday sites have weekly maintenance windows (often on weekends); during one, the company is reported as error (not charged) and its history is kept.
  • Speed: Greenhouse, Lever, Ashby and Workable return all jobs in one or a few requests (seconds per company). Workday and SmartRecruiters need one extra request per job for the description, so a 2,500-job Workday board takes about 5-12 minutes with descriptions (Workday rate-limits busy tenants and the Actor slows down to match), or 1-2 minutes with Include job descriptions turned off. Example: 24 companies / 11,400 jobs including four big Workday employers took 13 minutes and about $0.08 of platform usage at 512 MB. Keep the default run timeout (1 hour) or higher for big lists; if the timeout gets close, the Actor stops cleanly and saves its state.
  • SmartRecruiters answers an unknown company id with an empty list, so a misspelled id shows as ok with 0 jobs and a note in the run summary.
  • Plain company names are matched by probing the slug on Greenhouse, Lever, Ashby, Workable and SmartRecruiters. Short or generic names can hit a different company's board, so use the careers URL when it matters.
  • Workday posted_at is approximate in list data ("Posted 3 Days Ago") and replaced by the exact start date when the description is fetched. Workday doesn't expose structured salary; it's taken from the description text when present.
  • Salary extraction from text is conservative: if there's no clear range with a currency, salary fields stay empty.
  • Data is what the employer publishes on its job board at run time; nothing is inferred or enriched from other sources.

Responsible use

This Actor is meant for job discovery, labor-market research and hiring-signal use cases, using job postings that companies publish publicly to attract applicants.

  • Respect each employer's and each platform's terms. Don't use the data to spam applicants or recruiters, or to misrepresent jobs.
  • If you republish jobs, link back to the original apply_url and remove closed jobs promptly. The closed status makes that easy.
  • The Actor is deliberately gentle. It sends at most 4 parallel requests per host (5 per Workday tenant), automatically lowers that limit for a site that answers HTTP 429, backs off on 5xx and honors Retry-After. Keep schedules reasonable: daily is plenty for most feeds.
  • No personal data is collected: the output has no recruiter or hiring-manager names, emails or phone numbers.

Support

Found a board that doesn't work, or need another ATS? Open an issue on the Actor's Issues tab with the careers URL. We usually respond within 24 hours.

Built by CleanRow Data (Trade Boss Pro LLC).