Career Site Jobs Scraper | Greenhouse, Lever, Workday | $0.9/1K avatar

Career Site Jobs Scraper | Greenhouse, Lever, Workday | $0.9/1K

Pricing

from $0.63 / 1,000 job scrapeds

Go to Apify Store
Career Site Jobs Scraper | Greenhouse, Lever, Workday | $0.9/1K

Career Site Jobs Scraper | Greenhouse, Lever, Workday | $0.9/1K

Jobs API for company career sites: Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Recruitee. Paste board URLs or names; get title, location, remote, salary, apply link, description. Filters plus only-new-jobs monitoring. $0.90 per 1,000 jobs.

Pricing

from $0.63 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Hriday Rungta

Hriday Rungta

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

The Career Site Jobs Scraper is a jobs API for company career sites. Give it the careers pages of the companies you care about, on Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters or Recruitee, and it returns every open job as one clean row: title, location, remote flag, department, employment type, posted date, salary when the company publishes it, apply link and the full description. The easiest way to try it: press Start with the prefilled boards (Discord on Greenhouse and Linear on Ashby) and you get 40 jobs in a few seconds.

The headline use case is monitoring: switch on Only new jobs and schedule the Actor, and every run returns only the jobs that were posted since the previous run. That turns any list of companies into a live feed of new openings for job alerts, sales signals, recruiting research or a job board.

  • Seven ATSs in one Actor: Greenhouse jobs, Lever jobs, Ashby jobs, Workday jobs, Workable, SmartRecruiters and Recruitee. One input list, one output format.
  • Auto-detects the ATS from any board URL, from a short form like greenhouse:stripe, from a bare company name (we try each ATS for you), or from the company's own careers page (we find the job board link on it).
  • One normalized row per job with the same fields for every ATS, so Greenhouse and Workday jobs land in the same spreadsheet columns.
  • Filters: job title contains, title excludes, location contains, remote only, posted within N days, department or team.
  • Only new jobs since the last run, kept in a key-value store on your own account.
  • Public endpoints only: the same JSON each company's careers page loads in your browser. No login, no API key, no cookies, no proxy needed.
  • Apify platform advantages: run it from the API, schedule it, connect it to Make, n8n, Zapier, Google Sheets or webhooks, monitor runs, and call it from AI agents through Apify's MCP server.

What data can you extract from career sites?

FieldWhat it is
companyCompany name (from the board; for Lever and Ashby boards it is derived from the board name, e.g. spotify -> Spotify)
atsgreenhouse, lever, ashby, workable, smartrecruiters, recruitee or workday
jobIdThe job's ID on that ATS (Workday: the requisition ID)
titleJob title
location, locations, countryMain location, every listed location, and the country when the board gives one
isRemote, workplaceTypeRemote flag, and Remote / Hybrid / On-site when known
department, teamDepartment and team as the company labels them
employmentTypeFull-time, Part-time, Contract, Internship, Temporary
postedAt, updatedAtWhen the job was published (and last updated, where the ATS says)
salaryMin, salaryMax, salaryCurrency, salaryPeriodStructured pay range when the company publishes one (Greenhouse pay transparency, Ashby compensation, Lever, SmartRecruiters, Recruitee)
salaryTextThe pay range as written, including ranges found in the description text (e.g. $87,069-$124,385)
jobUrl, applyUrlThe job page and the application link
descriptionText, descriptionHtmlFull job description as clean plain text and as the original HTML
isNewtrue on rows returned in "Only new jobs" mode
boardUrl, boardSlugThe board the job came from
status, input, errorok for a job; failed with the reason for a board that could not be read (free)

How to use the Career Site Jobs Scraper

  1. Open the Actor and paste your companies into Career boards or companies, one per line: board URLs such as https://boards.greenhouse.io/stripe, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/linear, https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, short forms such as lever:palantir, or plain names such as Hugging Face.
  2. Optionally add filters: title keywords (engineer, sales), locations (London, Remote), remote only, or posted within the last 7 days.
  3. For monitoring, switch on Only new jobs since the last run.
  4. Press Start. Jobs appear in the Jobs table as they are found.
  5. Download the results as CSV, Excel or JSON, or get them through the API.
  6. To monitor, create a Schedule (for example daily at 08:00) and connect a webhook, Google Sheets, Slack or email integration so new jobs reach you automatically.

Input

FieldTypeWhat it does
boardslistBoard URLs, ats:slug lines, company names or careers page URLs. Required
atsForNamesselectATS to use for bare company names. Default auto tries Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee
titleKeywordslistKeep jobs whose title contains any of these words
excludeTitleKeywordslistDrop jobs whose title contains any of these words
locationslistKeep jobs whose location or country contains any of these
remoteOnlybooleanRemote jobs only
postedWithinDaysintegerOnly jobs posted in the last N days (0 = any)
departmentslistKeep jobs whose department or team contains any of these
onlyNewJobsbooleanReturn only jobs not returned by a previous run
firstRunModeselectFirst monitoring run: return all current jobs, or just remember them (baseline)
stateStoreName, stateNamespacetextWhere the seen job IDs are kept, to run several independent monitors
includeDescriptionbooleanFull description as text and HTML (default on)
maxJobsPerBoardintegerCap per board (default 1000, 0 = no limit)
maxItemsintegerCap for the whole run (0 = no limit)

Input example (engineering jobs in New York or remote, posted in the last 30 days, from three companies on three different ATSs):

{
"boards": [
"greenhouse:datadog",
"https://jobs.lever.co/palantir",
"https://pfizer.wd1.myworkdayjobs.com/PfizerCareers"
],
"titleKeywords": ["engineer", "scientist"],
"locations": ["New York", "Remote"],
"postedWithinDays": 30,
"maxJobsPerBoard": 30
}

Output example

A real row from the prefilled run (descriptions shortened here):

{
"status": "ok",
"ats": "greenhouse",
"company": "Discord",
"boardSlug": "discord",
"boardUrl": "https://job-boards.greenhouse.io/discord",
"jobId": "8840756002",
"title": "Data Scientist - Client Platform",
"location": "San Francisco Bay Area",
"locations": ["San Francisco Bay Area", "San Francisco, California, United States"],
"country": null,
"isRemote": false,
"workplaceType": null,
"department": "Data Science & Engineering",
"team": null,
"employmentType": null,
"postedAt": "2026-09-24T21:26:49.000Z",
"updatedAt": "2026-10-21T00:14:41.000Z",
"salaryMin": 160000,
"salaryMax": 200000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salaryText": "$160,000-$200,000 USD",
"jobUrl": "https://job-boards.greenhouse.io/discord/jobs/8840756002",
"applyUrl": "https://job-boards.greenhouse.io/discord/jobs/8840756002",
"descriptionText": "Discord has a highly engaged community of millions of daily active users who use the platform for many different reasons, but there’s one thing that nearly ever ...",
"descriptionHtml": "<div class=\"content-intro\"><p>Discord has a highly engaged community of millions of daily active users who use the platf ...",
"isNew": null,
"scrapedAt": "2026-11-02T10:59:00.079Z"
}

Monitor new job postings with "Only new jobs"

Switch on onlyNewJobs and schedule the Actor. For every board it remembers the IDs of the jobs it already gave you, in a named key-value store on your Apify account (nobody else can read it). The next run returns only jobs that were not there before, each with isNew: true, and you pay only for those rows plus the small start fee.

  • First run: by default it returns all current jobs and remembers them. Choose Baseline only if you only want jobs posted from now on: the first run then just remembers today's openings and returns nothing.
  • Nothing is lost: a job is remembered only once it was delivered. If maxJobsPerBoard or maxItems cut a run short, the jobs you did not get are returned as new on the next run.
  • Closed jobs drop out of the memory automatically when a board no longer lists them.
  • Several monitors: use a different stateStoreName or stateNamespace per monitor (for example one for sales roles and one for engineering).

How much does it cost to scrape career sites?

Pay per result, no monthly fee. Prices per tier of your Apify plan:

EventFreeBronzeSilverGold, Platinum, Diamond
Job scraped (per job row)$0.0009$0.00081$0.00072$0.00063
Actor start (once per run)$0.001$0.001$0.001$0.001

That is $0.90 per 1,000 jobs on the Free tier and $0.63 per 1,000 on Gold. Boards that fail, jobs removed by your filters and already-seen jobs in monitoring mode are not charged.

Worked examples (Free tier):

  • All open jobs at 10 companies with about 1,500 jobs in total: 1,500 x $0.0009 + $0.001 = about $1.35.
  • Daily monitor of 50 companies with about 20 new jobs a day: 30 runs x $0.001 + 600 x $0.0009 = about $0.57 a month.
  • Remote engineering jobs posted this week at 100 companies, about 300 matches: about $0.27.

The Apify Free plan includes $5 of monthly credit, which covers about 5,500 job rows a month at no cost.

Integrations and scheduling

  • Apify Schedules: run daily or hourly; combined with Only new jobs each run delivers just the fresh postings.
  • Make, n8n, Zapier: use the Apify app to start a run and loop over the new jobs (post to Slack, add to a CRM, send an email digest).
  • Google Sheets: export the dataset to a sheet, or append new jobs on each scheduled run.
  • Webhooks: get a POST request when a run finishes and pull the dataset.
  • API: start runs and read results with the Apify API or the JavaScript and Python clients. The dataset is plain JSON, CSV or Excel.
  • MCP for AI agents: AI assistants such as Claude or ChatGPT can call the Actor through Apify's MCP server to answer "which companies on my list posted new data jobs this week?".

FAQ

Why not use the Greenhouse API, Lever API or Workday API directly?

You can, but each ATS has its own URL format, paging, field names and quirks: Greenhouse escapes its HTML and hides pay ranges behind a flag, Lever pages 100 at a time, SmartRecruiters and Workday need one extra request per job for the description, and Workday reports the total only on the first page. This Actor handles all of that and gives you one format for all seven, plus filters, monitoring, retries, scheduling and integrations.

Is there a single jobs API for every company?

Not an official one. Most tech companies, startups and many large employers publish their jobs through one of these seven ATSs, and each has a public job-board feed. This Actor reads those feeds for the companies you name, which makes it a practical job postings API for your own company list.

How do I find a company's job board?

Open the company's careers page and click any job. The link usually shows the ATS: boards.greenhouse.io/..., jobs.lever.co/..., jobs.ashbyhq.com/..., apply.workable.com/..., jobs.smartrecruiters.com/..., <company>.recruitee.com or <company>.wd5.myworkdayjobs.com/.... You can also paste the careers page URL itself or just the company name and let the Actor detect it.

Can it search jobs across all companies, like a job search engine?

No. It reads the boards you give it. If you need a list of companies first, try our Y Combinator Companies Scraper, or search jobs by keyword on LinkedIn with our LinkedIn Jobs Scraper.

What are good alternatives?

For a keyword search over a large pre-collected database of career-site jobs, fantastic-jobs Career Site Job Listing API is the best-known option. For a single ATS there are focused Actors such as the Greenhouse Job Scraper. This Actor is the choice when you have your own list of companies, want several ATSs in one format, and want only the new jobs on each run.

The Actor only reads job postings that companies publish openly for anyone to see, through the same public endpoints their careers pages use, with no login. Job ads are public business information, not personal data. You are responsible for how you use the data and for following each site's terms and the laws that apply to you.

Why did a board fail?

The status row tells you why. Common reasons: the board name is wrong or the company moved to another ATS, a SmartRecruiters company ID is case-sensitive (BoschGroup, not boschgroup), a Workday URL is missing the site part (/NVIDIAExternalCareerSite), or the careers page loads jobs from a site that is not one of the seven ATSs. Failed boards are free.

Why are some salary fields empty?

Many companies do not publish pay. Structured ranges come from the ATS when the company fills them in; salaryText also catches ranges written in the description. Workday and Workable do not have a structured salary field.

Limits

  • Seven ATSs only: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee and Workday. Custom careers sites, iCIMS, Taleo, SuccessFactors, BambooHR and others are not supported yet.
  • Workday needs the full board URL (tenant, wdN and site name); it cannot be guessed from a company name. Workday lists show relative dates ("Posted 3 Days Ago"); the exact date is read from the job page when descriptions are on. Very large Workday sites may stop listing after a few thousand jobs; use title keywords to narrow them.
  • SmartRecruiters and Workday need one request per job for the description, so they are slower than the others (about 10-15 jobs per second). Turn off includeDescription for a fast overview.
  • Company names for Lever and Ashby boards come from the board name (elevenlabs -> Elevenlabs), because those feeds do not include the company name.
  • A few companies keep a job in the Ashby feed while their hosted Ashby page is switched off, so the jobUrl can return 404 for those; the apply flow on the company's own site still works.
  • Data is as current as the board at run time; it does not include jobs that were already closed.