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

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

Pricing

from $1.80 / 1,000 job founds

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

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

Open jobs from company career sites on Greenhouse, Lever, Ashby, Workday and 4 more ATS, in one schema. Monitor new jobs; optional AI fields. Pay per job.

Pricing

from $1.80 / 1,000 job founds

Rating

0.0

(0)

Developer

kelvin lab

kelvin lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Categories

Share

Get every open job of the companies you choose, live from their own career sites: Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee and Personio, in one clean schema whatever the system. Give job board links, company websites or board names. Run it once for an export, or on a schedule as a monitor that returns only new jobs and tells you which ones closed. Optional AI fields (skills, job function, seniority, visa sponsorship, remote regions, salary from the text and a short summary) come from Claude. Public APIs only: no browser, no login, no residential proxy. You pay per job.

What you can use it for

  • Job boards and aggregators: fill a niche board from hundreds of companies and keep it fresh; closed jobs come as free rows so you can delist them.
  • Sales signals: watch your target accounts and get "Acme opened 3 sales roles in Germany" in Slack, with input and companyDomain on every row to join back to your CRM.
  • Recruiters and agencies: new roles at the companies you follow, filtered by title, location, workplace type or department.
  • Labour-market research: salaries with their source (board, description text or AI), seniority, skills and countries across companies.
  • AI agents: every field is described for agents that call the Actor through MCP.

Input

Only companies is required.

FieldDescription
companiesOne company per line. Best is its job board link, e.g. https://boards.greenhouse.io/stripe, https://jobs.lever.co/palantir, https://jobs.ashbyhq.com/ramp, https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, https://careers.smartrecruiters.com/BoschGroup, https://apply.workable.com/huggingface, https://bunq.recruitee.com, https://ottonova.jobs.personio.de. Also accepted: greenhouse:stripe; a company website such as stripe.com (its careers page must link to one of these boards); or a bare board name such as stripe, tried on Greenhouse, Lever, Ashby, Workable, Recruitee and Personio. Up to 500 per run.
titleKeywords, excludeTitleKeywordsKeep or drop jobs by words in the title (whole words, any case).
locationsCity, US state, country name or two-letter code.
workplaceTypesremote, hybrid, onsite.
employmentTypesfull_time, part_time, contract, temporary, internship.
departmentsText in the department or team, e.g. Engineering.
postedWithinDaysOnly jobs posted in the last N days.
onlyWithSalaryOnly jobs with a salary from the board or the description text.
descriptionFormattext (default), html (cleaned), both or none (fastest).
maxJobsPerCompanyDefault 1,000, newest first.
maxItemsCharged jobs in the whole run (default 1,000, up to 50,000).
onlyNewJobsMonitor mode: only jobs not delivered before under monitorName, plus free closed rows.
monitorNameSeparate watchlists keep separate histories (default default).
skipExistingOnFirstRunMonitor mode: the first run saves today's jobs without returning or charging them, so you get alerts on new roles only.
reportClosedJobsMonitor mode: free rows for delivered jobs that closed (default on).
alertWebhookUrlMonitor mode: one message per run with new or closed jobs. Slack and Discord webhooks get readable text, other https URLs (Make, Zapier, n8n) get JSON. Stored as a secret.
aiEnrichmentAdds the AI fields to each delivered job, charged as its own event.
maxConcurrency, requestTimeoutSecs, proxyConfigurationAdvanced. No proxy is needed; residential proxy is not supported.

Example: a daily monitor of three companies' engineering jobs in Europe, with a Slack alert.

{
"companies": ["https://jobs.ashbyhq.com/ramp", "stripe.com", "https://apply.workable.com/huggingface"],
"titleKeywords": ["engineer", "developer"],
"locations": ["Germany", "France", "Netherlands", "Remote"],
"onlyNewJobs": true,
"monitorName": "eu-engineering",
"skipExistingOnFirstRun": true,
"alertWebhookUrl": "https://hooks.slack.com/services/…"
}

Output

One row per job. A Greenhouse job (description shortened):

{
"rowType": "job",
"jobKey": "greenhouse:stripe:7012345",
"input": "stripe.com",
"ats": "greenhouse",
"boardToken": "stripe",
"boardUrl": "https://boards.greenhouse.io/stripe",
"jobId": "7012345",
"requisitionId": null,
"company": "Stripe",
"companyDomain": "stripe.com",
"title": "Backend Engineer, Payments",
"url": "https://stripe.com/jobs/search?gh_jid=7012345",
"applyUrl": "https://stripe.com/jobs/search?gh_jid=7012345",
"department": "Payments Engineering",
"team": null,
"location": "San Francisco, CA",
"allLocations": ["San Francisco, CA"],
"city": "San Francisco",
"region": "California",
"countryCode": "US",
"workplaceType": null,
"employmentType": null,
"seniority": null,
"postedAt": "2026-10-20T14:03:11.000Z",
"updatedAt": "2026-10-22T09:00:00.000Z",
"language": "en",
"descriptionText": "Who we are\n\nAbout Stripe…",
"descriptionHtml": null,
"salaryMin": 180000,
"salaryMax": 250000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salaryText": "$180,000 - $250,000",
"salarySource": "description",
"changeType": null,
"firstSeenAt": null,
"billable": true,
"aiEnriched": false,
"error": null,
"scrapedAt": "2026-10-24T01:00:07.000Z",
"aiSeniority": null,
"aiExperienceYearsMin": null,
"aiSkills": null,
"aiJobFunction": null,
"aiVisaSponsorship": null,
"aiRemoteRegions": null,
"aiSummary": null,
"aiError": null
}
  • jobKey is the same for the same job in every run: use it to deduplicate and to join runs.
  • salarySource says where the numbers come from: ats (the board's own fields), description (a pay range in the text, as US pay-transparency laws require) or ai.
  • Unknown values are null, never guesses: a Workday "Posted 30+ Days Ago" is not turned into a date, and workplaceType: null means not stated, not on-site.
  • In monitor mode changeType is new or closed, and firstSeenAt is when the monitor first delivered the job.
  • With aiEnrichment, the ai* fields are filled by Claude Haiku 5.5 from the title, locations and description. They are estimates; aiError says why a job could not be enriched (then it is not charged for AI).
  • A company that cannot be read gets one free row with rowType: "error" and the reason.
  • Views: Jobs, AI and Errors. The run's key-value store has a SUMMARY record with per-company counts (open, matched, new, closed jobs), jobs left out by each filter and AI usage.

Pricing

Pay per event:

EventFree planStarterScaleBusiness
Job found (rows with billable: true)$0.003$0.003$0.0024$0.0018
Job enriched with AI (rows with aiEnriched: true, only when aiEnrichment is on)$0.003$0.003$0.0024$0.0018
Actor start (Apify's standard start fee)$0.00005$0.00005$0.00005$0.00005

For example, 500 jobs from 10 companies cost $1.50 on the Free plan, or $3.00 with AI fields. A monitor run that finds nothing new costs only the start fee.

Free: jobs left out by your filters, closed-job rows, error rows, the first-run baseline of a monitor, and AI enrichment that failed. Set a maximum cost per run in the run options; the Actor stops cleanly when it is reached, and a job whose AI charge no longer fits is saved without the AI fields.

Limits

  • Only public job boards of these 8 systems. Other systems (iCIMS, SuccessFactors, Taleo, BambooHR, Teamtailor…) are not read yet; a company website that only links one of them gets an error row.
  • A bare name can match a different company with the same board name on a small ATS; check company and boardUrl, or give the board link.
  • Lever and Ashby publish no company name, so company is null there (use input or companyDomain).
  • Workday has a weekly maintenance window (often Friday night to Saturday, US time) during which its boards answer with a maintenance page; the Actor then returns an error row for that company. Run again later.
  • Some Personio boards publish no description in their feed; descriptionText is then null and AI enrichment is skipped for those jobs.
  • With maxJobsPerCompany below a board's size, closed jobs are not reported for that company.