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

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

Pricing

$2.00 / 1,000 jobs

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

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

Jobs straight from company career sites: Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Personio, Teamtailor, Workable, BambooHR. Search 30,000 companies or fetch your own list. Normalized location, salary, remote, dates, apply link. $2 per 1,000 jobs.

Pricing

$2.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Prague Data Lab

Prague Data Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Jobs straight from company career sites (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Personio, Teamtailor, Workable, BambooHR), one normalized row per job: title, company, locations with country codes, remote/hybrid, employment type, salary, posting date, apply link and full description. Same data as career-site listing APIs, from $2 per 1,000 jobs.

{ "companies": ["airbnb", "spotify", "ramp", "BoschGroup", "bunq"], "maxItems": 100 }

Or search about 30,000 companies at once, without listing them:

{ "titleSearch": ["Data Engineer"], "locationSearch": ["Germany"], "timeRange": "7d", "limit": 200 }

One output row:

{
"jobId": "8184174",
"ats": "greenhouse",
"company": "Airbnb",
"companySlug": "airbnb",
"title": "Account Manager",
"department": "Business Development",
"team": null,
"employmentType": null,
"employmentTypeRaw": null,
"workplaceType": "HYBRID",
"locations": ["London, United Kingdom"],
"city": "London",
"region": "England",
"country": "GB",
"countries": ["GB"],
"salaryMin": 46000,
"salaryMax": 54000,
"salaryCurrency": "GBP",
"salaryPeriod": "YEAR",
"salaryText": null,
"postedAt": "2026-09-09T08:35:19.000Z",
"updatedAt": "2026-09-30T00:00:54.000Z",
"applyUrl": "https://careers.airbnb.com/positions/8184174?gh_jid=8184174",
"jobUrl": "https://careers.airbnb.com/positions/8184174?gh_jid=8184174",
"careerSiteUrl": "https://job-boards.greenhouse.io/airbnb",
"companyDomain": null,
"descriptionText": "Airbnb was born in 2007 when two hosts welcomed three guests to their San Francisco home, and has since grown to over 5 …",
"descriptionHtml": null,
"scrapedAt": "2026-10-19T13:42:18.874Z"
}

Compatible with the input of fantastic-jobs/career-site-job-listing-api

Switching takes one change: the Actor ID. This Actor accepts the same input fields with the same values: timeRange (1h, 24h, 7d, 6m), limit, titleSearch, titleExclusionSearch, locationSearch, locationExclusionSearch, descriptionSearch, descriptionExclusionSearch, organizationSearch, organizationExclusionSearch, domainFilter, domainExclusionFilter, descriptionType, ats, atsExclusionFilter, aiEmploymentTypeFilter, aiWorkArrangementFilter, hasSalary, aiHasSalary, datePostedAfter, hasNoLocation and remote only (legacy). Search terms work the same way: phrases on word boundaries, :* for a prefix (Soft:*), locations as City, Region, Country in English (London, England, United Kingdom, New York, New York, United States) or just a country or a city.

When the input uses those field names, the defaults are theirs too (limit 10, timeRange 7d) and each row also carries their output field names: id, date_posted, date_created, organization, organization_url, locations_alt, locations_derived, cities_derived, regions_derived, countries_derived, location_type, remote_derived, salary, employment_type, url, source (lever.co for Lever), source_type, source_domain, domain_derived, description_text, description_html, ai_salary_currency, ai_salary_min_value, ai_salary_max_value, ai_salary_unit_text, ai_employment_type, ai_work_arrangement. Set leaderFields to true or false to force them on or off.

Differences to know:

  • 10 ATS, not 58. ats values other than ours (for example icims, taleo) are accepted with a warning and match nothing.
  • AI and LinkedIn enrichment is not included. aiExperienceLevelFilter, aiVisaSponsorshipFilter, aiTaxonomiesFilter, aiLanguageFilter, li* filters, includeCompanyDetails, includeLinkedIn and removeAgency are accepted (the run does not fail) and ignored with a warning. ai_employment_type, ai_work_arrangement and ai_salary_* come from the career site's own fields, not from a language model.
  • timeRange counts from the posting date (6m = 183 days), not from the date a job entered a database.
  • locations is a list of strings as the career site writes them (["London, United Kingdom"]), not schema.org Place objects. The normalized form is in locations_derived.
  • id is a string ("greenhouse-8184174"), unique per ATS and job.

What you get

ATSCompanies in the built-in listTypical career site
Greenhouse5,553job-boards.greenhouse.io/<company>
BambooHR7,568<company>.bamboohr.com/careers
Workday5,420<tenant>.wd5.myworkdayjobs.com/<site>
Workable2,555apply.workable.com/<company>
Ashby2,167jobs.ashbyhq.com/<company>
Lever1,998jobs.lever.co/<company>
SmartRecruiters1,550careers.smartrecruiters.com/<company>
Personio1,125<company>.jobs.personio.de
Teamtailor1,094<company>.teamtailor.com
Recruitee924<company>.recruitee.com

Every company in the list was checked against the live ATS API and had at least one open job (October 2026): about 1.6 million open jobs in total. Any other company on these 10 ATS works too: give its name, its career-page URL or ats:slug.

All data comes from the public job-board APIs that the career sites themselves use. No login, no browser, no proxy. Recruiter names and contact details are never output.

Use cases

  • Job boards and aggregators: fill a niche board (by country, remote, function or industry) with fresh jobs that link straight to the employer's application page.
  • Sales and recruiting agencies: spot companies that are hiring for a role you serve (titleSearch: ["Account Executive"], locationSearch: ["France"]), with the job page as the reason to reach out.
  • Market and salary research: collect published salary ranges (US pay-transparency states, UK, EU) by title, city and company.
  • Job seekers and career coaches: watch your target companies every day and get only the new jobs (postedWithinDays: 1).
  • AI agents: one call returns structured, deduplicated jobs with descriptions, ready for matching or summarizing.

Two ways to use it

Your own companies (live)

{
"companies": ["Airbnb", "https://jobs.lever.co/spotify", "greenhouse:stripe", "workday:nvidia|wd5|NVIDIAExternalCareerSite"],
"keywords": ["engineer"],
"locations": ["Berlin", "Remote"],
"postedWithinDays": 30,
"maxItems": 500
}

Each value can be a company name, an ATS slug (ats:slug), an ATS URL, or the company's own careers page (the Actor finds the embedded Greenhouse, Lever, Ashby... board). Names are matched against the built-in list first, then probed on every ATS. The DETECTION record of the run's key-value store shows which board was found for each value. Jobs are read live from the career site at run time, and maxItems is shared fairly between companies.

Search everything (job index)

Leave companies empty. The Actor searches its job index of every company in the list, refreshed daily, with your filters: titleSearch, locationSearch, organizationSearch, domainFilter, ats, employmentTypes, workplaceTypes, postedWithinDays or timeRange, hasSalary. Results come newest first. Workday, SmartRecruiters and BambooHR jobs are completed with a live call to the career site before they are saved, so their descriptions are current. If the index is not reachable, the Actor searches the built-in list live instead, largest companies first, for up to 210 seconds (maxRunSeconds).

Input

FieldTypeDescription
companiesstring[]Company names, ats:slug, ATS URLs or career-page URLs. Empty = search the index.
keywordsstring[]Any of these words or phrases in the title or description (:* for a prefix).
locationsstring[]City, country or City, Region, Country, English or local names; Remote matches remote jobs.
remoteOnlybooleanRemote jobs only.
workplaceTypesstring[]ONSITE, HYBRID, REMOTE.
employmentTypesstring[]FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, TEMPORARY, OTHER.
postedWithinDaysintegerJobs posted in the last N days.
atsstring[]Only these ATS (greenhouse, lever or lever.co, ashby, smartrecruiters, workday, recruitee, personio, teamtailor, workable, bamboohr).
includeDescriptionbooleanPlain-text description (default true).
includeDescriptionHtmlbooleanHTML description (default false).
maxItemsintegerMaximum jobs (default 500; 10 for inputs written for the other API).
maxJobsPerCompanyintegerCap per career board.
modestringauto (default), companies, search; indexer is reserved for the Actor owner.
leaderFieldsbooleanForce the compatibility output fields on or off.
maxRunSecondsintegerStop fetching after this many seconds and keep what was found.
indexStoreIdstringUse another job index (key-value store ID).

Plus the compatibility fields listed above.

Output

FieldDescription
jobId, ats, companySlugJob ID in the ATS, the ATS, and the board ID (Workday: tenant|wdN|site). One row per ATS + board + job ID.
company, title, department, teamAs published by the career site.
employmentTypeFULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, TEMPORARY or OTHER (intern and working-student titles override a generic "Full-time"). employmentTypeRaw keeps the original label.
workplaceTypeONSITE, HYBRID, REMOTE, or null when the career site does not say.
locationsLocations as written by the career site.
city, region, country, countriesFirst location parsed, ISO-2 country codes of all locations.
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryTextPublished salary (HOUR, DAY, WEEK, MONTH, YEAR).
postedAt, updatedAtISO 8601 UTC (Workday: day precision).
applyUrl, jobUrl, careerSiteUrlApplication link, job page, company career site.
companyDomainCompany website domain, when the ATS publishes it.
descriptionText, descriptionHtmlFull description.
scrapedAtWhen the job was read (the index build time in search mode).

Compatibility fields (id, date_posted, organization, locations_derived, ...) are added as described above. The run's key-value store also holds SUMMARY (jobs per ATS and per company, failed boards, warnings).

Pricing

$0.002 per job ($2 per 1,000), charged only for jobs saved to the dataset, after deduplication. No platform usage on top. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.

FAQ

How fresh is the data? In companies mode the jobs are read live at run time. In search mode they come from an index refreshed every day; jobs posted after the last refresh appear the next day, so use companies mode when you need the last hour.

Why is a description search slower? descriptionSearch, descriptionExclusionSearch and keywords read the full text of every job that passes the other filters, and SmartRecruiters and Workday give the text only job by job. Combine them with titleSearch, a location or a time range, as with other career-site APIs.

Why do some jobs have no salary or employment type? The Actor only outputs what the career site publishes. Greenhouse, Ashby, Lever, Teamtailor and Recruitee often publish salaries, most of all for jobs in US pay-transparency states; Workday and SmartRecruiters rarely do.

A company is not found. Pass its career-page URL or ats:slug (for example greenhouse:airbnb, lever:spotify, workday:nvidia|wd5|NVIDIAExternalCareerSite). If the company uses an ATS that is not supported yet, open an issue and tell us which one.

Is this legal? The Actor reads public job postings that companies publish so that anyone can apply, through the same public APIs their career sites use. It does not log in and does not output personal data.