Career Site Job Scraper: Workday, Greenhouse, Lever & more avatar

Career Site Job Scraper: Workday, Greenhouse, Lever & more

Pricing

from $2.00 / 1,000 jobs

Go to Apify Store
Career Site Job Scraper: Workday, Greenhouse, Lever & more

Career Site Job Scraper: Workday, Greenhouse, Lever & more

Collect job postings from company career sites on 19 applicant tracking systems: Workday, Greenhouse, Lever, Ashby, SmartRecruiters, Teamtailor, Workable, Personio, BambooHR and more, plus the Nordic Jobylon, Varbi, ReachMee and EasyCruit. Clean normalized data, salaries, new-job monitoring.

Pricing

from $2.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Victor Berg

Victor Berg

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

6 days ago

Last modified

Share

Career Site Job Scraper: Greenhouse, Lever, Ashby & more

Every open job from company career sites, as clean data, for $2 per 1,000 jobs. Paste a job-board link or simply a company's careers page. The Actor reads the jobs from the company's applicant tracking system (ATS) and returns one normalized record per job: title, company, department, location with ISO country, remote / hybrid / on-site, employment type, seniority, dates, salary where published, and the full description.

19 ATS: Workday, Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Workable, Personio, BambooHR, Breezy HR, Pinpoint, Rippling, JazzHR, Gem, and the Nordic Teamtailor, EasyCruit, Jobylon, Varbi and ReachMee.

Built for

  • Recruiters and sourcers who watch a list of companies and want only the new openings each morning.
  • Job boards and aggregators that fill a niche board (remote, data, Nordic tech, academia) straight from the source.
  • Lead generation and sales teams looking for hiring signals, such as who is hiring data engineers in Oslo this month.
  • Labour-market analysts and researchers comparing hiring by role, seniority, location, salary and remote policy in one schema.
  • AI agents that need live job data: the Actor works as a tool through the Apify MCP server.

Why this Actor

  • No board URL needed. Paste a company's careers page or website; the Actor finds the job board behind it.
  • One schema for 19 ATS, so jobs from Workday and Teamtailor land in the same columns.
  • Pay only for matching jobs. Title, location, remote, date and per-company filters run before anything is saved or charged.
  • Monitoring built in. Schedule it and get only jobs you have not received before.
  • Fast and polite. Plain HTTP against public job-board endpoints: no browser, no proxies, no login. Retries with backoff, at most 3 parallel requests per host, and one failing company never fails the run.
  • Privacy by default. No recruiter or contact fields in the output, and e-mail addresses and phone numbers inside descriptions are removed.

Supported applicant tracking systems

ATSPaste a URL likeNotes
Greenhousehttps://boards.greenhouse.io/figma, https://job-boards.eu.greenhouse.io/jetbrainsSalary ranges (pay transparency). US and EU boards.
Leverhttps://jobs.lever.co/spotify, https://jobs.eu.lever.co/leverSalary ranges. The EU instance is detected automatically.
Ashbyhttps://jobs.ashbyhq.com/linearCompensation ranges and summary.
Workdayhttps://adobe.wd5.myworkdayjobs.com/external_experiencedThe largest enterprise ATS. Newest jobs first. One extra request per job.
SmartRecruitershttps://careers.smartrecruiters.com/BoschGroupCompany IDs are case-sensitive. One extra request per job for the description.
Recruiteehttps://acme.recruitee.comSalary ranges.
Workablehttps://apply.workable.com/acme
Personiohttps://acme.jobs.personio.de (or .com)
BambooHRhttps://acme.bamboohr.com/careersOne extra request per job.
Breezy HRhttps://acme.breezy.hr
Pinpointhttps://acme.pinpointhq.comOne extra request per job for the posting date.
Ripplinghttps://ats.rippling.com/acme/jobsOne extra request per job.
JazzHRhttps://acme.applytojob.com/applyOne extra request per job.
Gemhttps://jobs.gem.com/acme
Teamtailorhttps://acme.teamtailor.com or the company's own career domainWidely used across the Nordics.
EasyCruit (Visma)https://acme.easycruit.comCommon in Norway. One extra request per job for the description.
Jobylonhttps://emp.jobylon.com/companies/3142-lkab, any Jobylon job link, or the company's careers pageSweden, Finland, the Netherlands. One extra request per job for the date and full ad.
Varbihttps://kth.varbi.comSwedish universities, agencies and municipalities. One extra request per job for the place and formatted ad.
ReachMeeThe company's careers page, or https://web103.reachmee.com/ext/I011/853/main?site=6&validator=...Swedish universities and government agencies. No posting date is published. One extra request per job.

You can also paste a company website or careers page (e.g. https://linear.app/careers). The Actor loads that page and, if needed, the careers link on it (at most 2 page loads) and finds the embedded job board.

Use cases

  • Daily new-job alerts for a target list. Monitor 50 companies, run every morning, and push only new jobs to Slack, e-mail, Google Sheets or a webhook.
  • A niche job board. Remote AI and ML roles at AI companies, or PhD and postdoc positions at Swedish universities, refreshed from the employers' own boards.
  • Hiring signals for B2B sales. Which companies in Oslo posted data or AI roles in the last 30 days, with department and seniority to qualify the lead.
  • Salary benchmarking. US product and engineering roles with the pay ranges that companies publish under pay-transparency laws.
  • Labour-market research. Hiring volume by role, seniority, country and remote policy across hundreds of employers, in one consistent schema.
  • Public-sector and academic jobs in the Nordics. Varbi, ReachMee and Jobylon cover many Swedish agencies, municipalities and universities that general job portals miss.

How to use

  1. Add job-board URLs or careers pages to Job board or careers page URLs, and/or pick the ATS and type the board name under Companies by ATS and board name.
  2. Optionally set filters (title keywords, locations, remote only, posted within N days, max jobs per company). You only pay for jobs that match.
  3. Click Start. Download the results as JSON, CSV, Excel or HTML, or use the API and integrations.

Input examples

Job boards and careers pages, filtered to data and engineering roles in Scandinavia:

{
"startUrls": [
{ "url": "https://boards.greenhouse.io/figma" },
{ "url": "https://jobs.lever.co/spotify" },
{ "url": "https://linear.app/careers" },
{ "url": "https://tibber.com" }
],
"titleKeywords": ["engineer", "data"],
"excludeTitleKeywords": ["intern"],
"locations": ["Norway", "Sweden", "Remote"],
"postedWithinDays": 30
}

Nordic public sector by ATS and board name (Varbi subdomain, ReachMee site id, Jobylon company number):

{
"companies": [
{ "ats": "varbi", "slug": "migrationsverket" },
{ "ats": "varbi", "slug": "kth" },
{ "ats": "reachmee", "slug": "I011-853-6", "name": "Linköpings universitet" },
{ "ats": "jobylon", "slug": "3142", "name": "LKAB" }
],
"titleKeywords": ["IT", "utvecklare", "developer", "data"]
}

Daily monitoring of remote AI roles (save as a task and add a schedule):

{
"companies": [
{ "ats": "ashby", "slug": "cohere" },
{ "ats": "ashby", "slug": "elevenlabs" },
{ "ats": "ashby", "slug": "langchain" }
],
"titleKeywords": ["AI", "ML", "machine learning", "LLM"],
"remoteOnly": true,
"onlyNewJobs": true,
"monitoringId": "remote-ai-daily"
}

Input fields

FieldDescription
startUrlsJob-board URLs, careers pages or company websites (one company per line).
companies[{"ats": "greenhouse", "slug": "figma", "name": "Figma"}]: ATS + board name; name is optional. Varbi uses the subdomain (kth), Jobylon the company number (3142), ReachMee installation-customer-site (I011-853-6), Workday tenant.wdN/site.
descriptionFormattext (default, readable plain text), html (sanitized), both, or none (fastest).
titleKeywords / excludeTitleKeywordsKeep / drop jobs whose title contains any of the words (case- and accent-insensitive; terms up to 3 characters such as AI or QA match whole words).
locationsKeep jobs whose location matches any term: city, region or country, in English or the local language (Oslo, Norway, Norge, NO, Remote).
remoteOnlyOnly fully remote jobs.
postedWithinDaysOnly jobs posted in the last N days (falls back to the last-updated date; jobs without any date are dropped).
maxJobsPerCompanyNewest N jobs per company after filters.
onlyNewJobs + monitoringIdOnly jobs not delivered in earlier runs of the same monitoring ID.
redactContactsRemove e-mail addresses and phone numbers from descriptions (default on).
maxConcurrencyParallel requests (default 5; never more than 3 per host).

Output

One dataset item per job. Example (description shortened):

{
"id": "lever:outreach:550bdb6a-59ce-4e8a-941b-17bcfc63b9a3",
"atsJobId": "550bdb6a-59ce-4e8a-941b-17bcfc63b9a3",
"ats": "lever",
"company": "Outreach",
"companySlug": "outreach",
"title": "Senior Product Marketing Manager, Platform",
"department": "Marketing",
"team": "Product Marketing",
"location": "United States",
"locations": ["United States"],
"country": "US",
"countries": ["US"],
"workplaceType": "remote",
"isRemote": true,
"employmentType": "full-time",
"seniority": "senior",
"postedAt": "2026-10-05T20:24:21Z",
"updatedAt": null,
"jobUrl": "https://jobs.lever.co/outreach/550bdb6a-59ce-4e8a-941b-17bcfc63b9a3",
"applyUrl": "https://jobs.lever.co/outreach/550bdb6a-59ce-4e8a-941b-17bcfc63b9a3/apply",
"salary": { "min": 135000, "max": 150000, "currency": "USD", "interval": "year", "text": null },
"description": "About Outreach\n\nOutreach, founded in 2014, is the only complete agentic AI platform for revenue teams. ...",
"sourceUrl": "https://jobs.lever.co/outreach",
"scrapedAt": "2026-10-11T07:58:10Z"
}
FieldDescription
idStable unique ID ats:companySlug:atsJobId. Use it to de-duplicate across runs.
atsJobId, ats, companySlugThe job's ID in the ATS, the ATS name and the board name.
companyCompany name as published by the ATS (falls back to the board name, or the name you gave in the input).
title, department, teamAs published. team is filled by Lever, Ashby and Teamtailor.
location, locationsPrimary location and all locations.
country, countriesISO 3166-1 alpha-2 codes, from the ATS or parsed from the location text when unambiguous.
workplaceType, isRemoteremote / hybrid / onsite (from the ATS, else "Remote"/"Hybrid" in the location or title), or null when unknown.
employmentTypefull-time, part-time, contract, temporary, internship, volunteer or null.
seniorityintern, junior, mid, senior, lead, manager, director, executive. A heuristic, see FAQ.
postedAt, updatedAtISO 8601 UTC, when the ATS provides them.
jobUrl, applyUrlPublic job page and application link.
salary{min, max, currency, interval, text} when the ATS publishes a range (Greenhouse, Lever, Ashby, Recruitee and others where present), else null.
descriptionPlain text (paragraphs, - bullets) or sanitized HTML; descriptionHtml is added with both.
sourceUrl, scrapedAtThe input URL the job came from (or the board URL), and the run time.

Two dataset views are included: Overview and Details & salary. A run summary is saved to the OUTPUT record of the run's key-value store: companies processed, jobs found / matched / saved per company, errors per company, inputs that could not be resolved and the number of redacted contacts.

Pricing

Pay per event: $2.00 per 1,000 jobs ($0.002 per job saved to the dataset).

  • You pay only for jobs that pass your filters, because filtering happens before saving.
  • With Only new jobs, jobs you already received are not saved again and not charged.
  • Set a maximum cost per run when starting the Actor: it stops cleanly at the limit, and with monitoring on, jobs that did not fit are delivered in the next run.
  • Apify adds its standard tiny Actor start event per run (by default $0.00005).

Examples: 100 companies with ~30 open jobs each ≈ 3,000 jobs ≈ $6. Monitoring 200 companies daily with ~50 new jobs a day ≈ $0.10 per day.

Monitoring new jobs (scheduled runs)

  1. Turn on Only new jobs since previous runs and give the configuration a Monitoring ID (e.g. nordic-data-jobs).
  2. Save the input as a Task and add a Schedule (e.g. every morning).
  3. Connect an integration (webhook, Slack, e-mail, Google Sheets, Zapier, Make) to receive each run's new jobs.

The first run returns all current jobs; later runs return only jobs that were not delivered before. Use a different monitoring ID for each saved configuration. The memory is kept in a named key-value store (career-site-jobs-monitoring) in your own Apify account.

Use it from an AI agent (MCP)

Connect Claude, ChatGPT, Cursor or any other MCP client to the hosted Apify MCP server and add this Actor as a tool:

https://mcp.apify.com?tools=vimplement/career-site-jobs

Sign in with OAuth when the client asks, or send your Apify API token as a bearer token. The Actor then shows up as the tool vimplement--career-site-jobs; the agent passes the same input as above and reads the jobs from the run's dataset. Ask for example: "List remote machine-learning roles at Cohere and ElevenLabs posted in the last week, with salary where published." Agents that use the server's default tools can also find the Actor through Store search without pinning it.

FAQ

How do I find a company's job-board URL? Open the company's careers page and click a job: the address usually shows the ATS (boards.greenhouse.io/..., jobs.lever.co/..., jobs.ashbyhq.com/..., emp.jobylon.com/..., <name>.varbi.com). Or paste the careers page itself and let the Actor find the board.

How do I add a ReachMee or Jobylon company? Paste the company's careers page: the Actor reads the embedded ReachMee job list or Jobylon widget from it. For Jobylon, any job link on emp.jobylon.com works too.

Which Nordic job boards are covered? Teamtailor, EasyCruit, Jobylon, Varbi and ReachMee, plus Personio, Recruitee, Workable and the EU instances of Greenhouse and Lever, which many Nordic companies use. Webcruiter is not supported: its robots.txt asks every crawler except Google's to stay away, and it has no documented public job feed.

My careers page was not detected. Some career pages load jobs with JavaScript from a source the page does not reveal, or use an ATS that is not supported yet. The run summary (OUTPUT) lists such inputs with the reason. Paste the job-board URL instead.

Why are some fields empty? The Actor never invents data. Greenhouse and Jobylon boards publish no employment type, ReachMee career sites publish no posting date, and salaries only appear when the company publishes a range.

Why are ReachMee jobs missing when I filter by date? ReachMee shows no posting date, and Posted within the last N days keeps only jobs with a known date. Leave that filter empty for ReachMee boards, or use Only new jobs to get just the new ones.

How is seniority determined? By rules on the job title (English plus Norwegian, Swedish, Danish and German terms such as Senior, Lead, Head of, Praktikant, Avdelingsleder), then the ATS's own experience level when the title has no marker; mid means no level was found. Individual-contributor titles such as Product Manager or Account Manager are not classed as people managers. Treat it as a strong hint, not a fact.

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

Can I scrape Workday, LinkedIn or Indeed? Workday career sites, yes: paste the career-site URL. LinkedIn and Indeed, no: this Actor covers public ATS job boards only.

Is it gentle with the websites? Yes: it reads the same public endpoints that power the companies' own career pages, with at most 3 parallel requests per host (2 for the full HTML job pages of Varbi, Jobylon and JazzHR), retries with exponential backoff on rate limits, and an identifying User-Agent.

Limits

  • Only the 19 ATS above. Not supported: iCIMS, Taleo, SuccessFactors, Webcruiter, and career pages that load jobs from a source they do not reveal.
  • Fields are only as complete as the ATS publishes them (see Why are some fields empty?).
  • ATS marked "one extra request per job" are slower on large boards. With descriptionFormat: none those requests are skipped unless a filter needs a detail.
  • A careers page is followed for at most 2 page loads. If a board blocks automated requests or is down, that company is reported as failed in the run summary and the rest of the run continues.
  • Contact redaction removes e-mail addresses and phone numbers; names written in the free text of an ad can remain.

This Actor reads publicly available job postings from the public job-board endpoints (JSON APIs, RSS and XML feeds, and the job lists that companies embed on their career pages) that the ATS vendors provide for displaying jobs. It does not log in, bypass access controls or use proxies. It does not output personal data fields such as recruiter or hiring-manager names, e-mails or phone numbers, and by default it removes e-mail addresses and phone numbers that appear inside job descriptions (names written in free text can remain). You are responsible for using the data in line with the source websites' terms and applicable laws such as the GDPR. This Actor is not affiliated with or endorsed by any of the ATS vendors; all trademarks belong to their owners.

Support

Found a board that does not work, or need another ATS? Open an issue on the Actor's Issues tab with the URL. Fixes and new ATS are prioritized from user requests.