Career Site Jobs Scraper - Greenhouse, Lever, Ashby, Workday avatar

Career Site Jobs Scraper - Greenhouse, Lever, Ashby, Workday

Pricing

from $2.21 / 1,000 jobs

Go to Apify Store
Career Site Jobs Scraper - Greenhouse, Lever, Ashby, Workday

Career Site Jobs Scraper - Greenhouse, Lever, Ashby, Workday

Scrape job postings straight from company career sites on Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Workable and Personio. One clean format with salaries, locations, remote flag and full descriptions. Monitor new jobs on a schedule.

Pricing

from $2.21 / 1,000 jobs

Rating

0.0

(0)

Developer

Artificially

Artificially

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Career Site Jobs Scraper – Greenhouse, Lever, Ashby, Workday & more

Scrape job postings straight from company career sites – the same public job-board feeds that power "Careers" pages – and get one clean, normalized dataset across eight applicant tracking systems (ATS). Paste career-page URLs, pick your filters, and get titles, locations, remote flags, salaries, dates, apply links and full descriptions in seconds.

Built by Artificially | Follow us on X @artificially_io

Use with AI agents (MCP)

This actor works as a tool for Claude, ChatGPT, Cursor and other AI agents through Apify's MCP server. Ask something like "list open engineering jobs at Stripe and Ramp" and the agent calls it for you. Set compactOutput: true and a small maxJobsPerCompany or maxResults (e.g. 10) so results fit easily in the agent's context.

Quick setup (sign in with your Apify account when asked):

  • Claude (claude.ai or Claude Desktop): Settings → Connectors → Add custom connector, and paste https://mcp.apify.com?tools=artificially/career-site-jobs-scraper
  • Claude Code or Cursor via the Apify CLI (latest version, apify upgrade): apify mcp install claude-code --tools artificially/career-site-jobs-scraper (use cursor instead of claude-code for Cursor)
  • Any MCP client (Cursor, VS Code, Windsurf):
{
"mcpServers": {
"apify": { "url": "https://mcp.apify.com?tools=artificially/career-site-jobs-scraper" }
}
}

Try asking:

  • "Get all open engineering jobs at Airbnb, Stripe and Notion from their career sites, with salaries."
  • "Monitor these 10 company career pages and tell me which remote jobs were posted this week."

Why this actor

  • Straight from the source – jobs come from the company's own ATS, not from a job board that re-posts them late or loses them. Every job has a direct apply link.
  • One schema for 8 ATS platforms – Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Workable and Personio all come out in the same shape.
  • Salary data where it exists – structured pay ranges from the ATS (Ashby, Lever, Recruitee), plus pay ranges pulled out of the description text (US pay-transparency ranges like $150,000 - $210,000/yr or 148,000 USD - 235,750 USD) with salary.source telling you which.
  • Real filters – keywords, exclude keywords, locations, remote only, departments, employment types, posted within N days, limits per company and in total.
  • Monitoring mode – turn on onlyNewSinceLastRun, schedule the actor, and each run returns only the jobs you have not seen yet.
  • Paste anything – job-board URLs, platform:slug shorthand, a company's own careers page (the embedded ATS is detected automatically), or just a slug.
  • Fast and cheap to run – public JSON feeds, no browser, no proxy needed. Hundreds of jobs per minute.
  • You only pay for results – only valid jobs (with ID, title and URL) are saved and charged. Companies that fail are listed for free in FAILED_COMPANIES.

Supported ATS platforms

PlatformExample inputShorthandSalaryNotes
Greenhousehttps://job-boards.greenhouse.io/stripe or https://boards.greenhouse.io/airbnbgreenhouse:stripeFrom descriptionDepartments, workplace type from board metadata
Leverhttps://jobs.lever.co/palantirlever:palantirATS range + descriptionTeam, department, commitment, workplace type (EU boards supported)
Ashbyhttps://jobs.ashbyhq.com/rampashby:rampStructured compensationBest salary coverage, structured addresses, remote flag
Workdayhttps://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSiteworkday:nvidia.wd5/NVIDIAExternalCareerSiteFrom descriptionFull pagination; keywords use Workday's own search
SmartRecruitershttps://careers.smartrecruiters.com/ServiceNowsmartrecruiters:ServiceNowFrom descriptionDepartment, function, remote/hybrid flags
Recruiteehttps://bunq.recruitee.comrecruitee:bunqStructured (when published)Multiple locations, remote/hybrid/on-site
Workablehttps://apply.workable.com/huggingfaceworkable:huggingface–Remote flag, employment type
Personiohttps://1komma5grad.jobs.personio.depersonio:1komma5grad–Offices, department, schedule

Also accepted: a company's careers page such as https://www.notion.com/careers (the actor finds the embedded Greenhouse/Lever/Ashby/… board), or a bare slug such as stripe (probed on Greenhouse, Lever, Ashby, SmartRecruiters, Workable and Recruitee).

Use cases

  • Job aggregators and job boards – fill your board with fresh, first-party postings from hundreds of companies, deduplicated and normalized.
  • Recruiters and talent teams – track openings at target companies, see which teams are hiring, and spot roles before they hit LinkedIn.
  • Sales "hiring signal" leads – a company hiring 5 data engineers or its first RevOps manager is a buying signal. Feed new postings into your CRM daily.
  • Market and salary research – compare pay ranges, remote policies and hiring velocity across companies, departments and countries.
  • Job seekers and communities – build alerts for "remote + engineer + posted in the last 3 days" across your dream companies.

Input

FieldTypeDescriptionDefault
companiesarrayCareer-site URLs, platform:slug, careers pages or slugsRequired
keywordsarrayKeep jobs matching ANY keyword (title, and description if enabled)–
keywordsInDescriptionbooleanAlso match keywords in the descriptiontrue
excludeKeywordsarrayDrop jobs whose title contains ANY of these–
locationsarrayKeep jobs whose location contains ANY of these (city, region, country, "remote")–
remoteOnlybooleanOnly remote jobsfalse
departmentsarrayKeep jobs whose department/team contains ANY of these–
employmentTypesarrayfull-time, part-time, contract, temporary, internship, other–
postedWithinDaysintegerOnly jobs published in the last N days–
maxJobsPerCompanyintegerCap per company–
maxResultsintegerCap for the whole run–
includeDescriptionbooleanReturn descriptionHtml and descriptionTexttrue
onlyNewSinceLastRunbooleanReturn only jobs not returned by earlier runs with the same inputfalse
compactOutputbooleanSlim items with only the key fields (ID, platform, company, title, department, location, remote, workplace, type, salary, date, URL). Best for AI agentsfalse
maxConcurrencyintegerCompanies fetched in parallel (1–10)5
proxyConfigurationobjectOptional proxy; not needed for public ATS feedsnone

Example input

{
"companies": [
"https://job-boards.greenhouse.io/stripe",
"lever:palantir",
"https://jobs.ashbyhq.com/ramp",
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
"https://www.notion.com/careers"
],
"keywords": ["engineer", "developer"],
"keywordsInDescription": false,
"remoteOnly": true,
"postedWithinDays": 14,
"maxJobsPerCompany": 100
}

Output

Every job has the same structure, whatever ATS it came from:

{
"jobId": "ashby:notion:1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"platform": "ashby",
"company": {
"name": "Notion",
"slug": "notion",
"careersUrl": "https://jobs.ashbyhq.com/notion"
},
"title": "Software Engineer, Developer Platform",
"department": "Engineering",
"team": "Engineering",
"location": "San Francisco, California; New York, New York",
"locations": [
{ "city": "San Francisco", "region": "California", "country": "United States" },
{ "city": "New York", "region": "New York", "country": "United States" }
],
"isRemote": true,
"workplaceType": "hybrid",
"employmentType": "full-time",
"employmentTypeRaw": "FullTime",
"salary": {
"min": 213000,
"max": 320000,
"currency": "USD",
"interval": "year",
"raw": "$213,000 - $320,000 per year",
"source": "description"
},
"postedAt": "2026-08-24T14:44:49.699Z",
"updatedAt": null,
"applyUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a/application",
"jobUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"descriptionText": "WHO WE ARE\n\nNotion is the collaborative AI workspace where teams and agents think together...",
"descriptionHtml": "<p><strong>WHO WE ARE</strong></p>...",
"scrapedAt": "2026-09-23T09:06:07.386Z"
}
FieldDescription
jobIdStable unique ID platform:company:id – use it to deduplicate across runs
platformATS the job came from
companyname, slug and careersUrl
title, department, teamAs published by the company
locationRaw location text from the ATS
locationsParsed list of { city, region, country }
isRemotetrue if the ATS marks the job remote or the location says remote
workplaceTyperemote, hybrid, onsite or null when unknown
employmentTypeNormalized: full-time, part-time, contract, temporary, internship, other (employmentTypeRaw keeps the original)
salary{ min, max, currency, interval, raw, source } or null; source is ats (structured) or description (parsed from the text)
postedAt, updatedAtISO 8601 dates
applyUrl, jobUrlDirect links to the posting and the application form
descriptionText, descriptionHtmlFull description (when includeDescription is on)
scrapedAtWhen the job was collected

The key-value store also contains:

  • SUMMARY – per-company and per-platform counts, limits reached.
  • FAILED_COMPANIES – inputs that could not be resolved or fetched, with a reason (not_found, invalid_input, detection_failed, no_open_jobs, http_error). These are never charged.

Pricing

This actor uses pay-per-event pricing: a small fee per run plus a fee per job saved to the dataset. You only pay for results – invalid jobs are never saved, duplicates are removed, and failed companies cost nothing. Set a maximum cost per run in Apify Console and the actor stops cleanly when it is reached. See the Pricing tab for current prices.

FAQ

How do I monitor companies for new jobs? Turn on onlyNewSinceLastRun and create an Apify Schedule (for example every morning). The actor remembers every job ID it has returned for that exact input (same companies and filters) and the next runs return only new postings, so you pay only for jobs you have not seen. Connect the run to Slack, email, Google Sheets, Make, Zapier or a webhook to get alerts. Changing the companies or filters starts a fresh history.

How do I find the right URL for a company? Open the company's careers page and click any job. The address bar usually shows the ATS: job-boards.greenhouse.io/…, jobs.lever.co/…, jobs.ashbyhq.com/…, ….myworkdayjobs.com/…, and so on. You can also paste the careers page itself and let the actor detect it.

Why did a company fail? Check FAILED_COMPANIES. The most common reasons are a wrong slug (not_found), a board with no open roles (no_open_jobs), or a careers page that uses an ATS we do not support yet (detection_failed). Failed companies are not charged.

Why is salary missing for some jobs? Many companies do not publish pay. Where the ATS has structured pay (Ashby, Lever, Recruitee) you get it directly; otherwise we extract ranges from the description text. We never guess.

How does the employment type filter treat jobs without a type? Some ATS (for example Greenhouse) rarely publish an employment type. Titles like "Intern" or "Contractor" are recognized automatically; other jobs without a type are kept only when you select full-time.

Is this legal? The actor reads the public job-board feeds that companies publish so that their jobs can be embedded and shared. It does not log in, bypass protection, or collect personal data about candidates. You are responsible for using the data in line with applicable laws and the sites' terms.

Do I need a proxy? No. The feeds are public APIs. A proxy input is available if your network requires one.

Large Workday companies are slow – why? Workday lists jobs 20 at a time and needs one extra request per job for the description. Turn off includeDescription (and keyword matching in descriptions) to skip the detail requests, or use maxJobsPerCompany.

Support

Found a company that does not work, or want another ATS supported? Open an issue on the actor's Issues tab – we usually respond within a day.