Job Search API: 12,000+ Career Sites incl. Workday avatar

Job Search API: 12,000+ Career Sites incl. Workday

Pricing

Pay per event

Go to Apify Store
Job Search API: 12,000+ Career Sites incl. Workday

Job Search API: 12,000+ Career Sites incl. Workday

Pull open jobs from any company's public Greenhouse, Lever, Ashby or SmartRecruiters job board in one unified JSON schema. Filter by keyword, location, remote and date. $2 per 1,000 jobs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

TW Data Tools

TW Data Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

Job Search API: keywords across 12,000+ company career sites (Workday, Greenhouse, Lever, Ashby, SmartRecruiters)

Search open jobs by keyword across 12,166 company career sites at once. Type a title keyword, a location or "remote", and get matching jobs from 12,166 employers on Workday, Greenhouse, Lever, Ashby and SmartRecruiters as one clean, identical JSON schema: title, company, department, location, remote flag, posting date, apply link and (when the employer publishes it) salary.

No API keys, no proxies, no browser, no login. The search runs on a job index that is rebuilt from the employers' own public job-board APIs, (Greenhouse, Lever, Ashby and SmartRecruiters every night, Workday refreshed twice a month (1st and 15th)), so a search finishes in seconds and you only pay for the jobs you get back.

There is also a classic company-list mode: give it companies, get their live job boards (the original behaviour, unchanged).

Two modes

ModeUse it whenSource
searchYou want jobs by keyword / location / date across all companiesIndex of 12,166 boards, 1,333,553 open jobs (Workday refreshed twice a month, the other ATS nightly)
companies (default)You know which companies you want, and want their live listings right nowThe employers' public job-board APIs, fetched live

Boards in the search index

ATSCompany boardsOpen jobs in indexRefresh
Workday3,568896,898twice a month
Greenhouse4,377177,118nightly
Lever23026,439nightly
Ashby3,01259,111nightly
SmartRecruiters979173,987nightly
Total12,1661,333,553

Numbers are measured from the live index (Greenhouse, Lever, Ashby and SmartRecruiters built 2026-11-08, Workday built 2026-11-09); every board in it had at least one open job when it was checked. The index timestamp is on every result (indexUpdatedAt).

Search mode

{
"mode": "search",
"keywords": ["python", "data engineer"],
"excludeKeywords": ["intern", "manager"],
"locations": ["remote", "london"],
"postedWithinDays": 14,
"maxItems": 200
}
FieldDescription
keywordsWords to find in the job title (case-insensitive). Empty = every job.
keywordMatchany (default): at least one keyword. all: every keyword must appear.
excludeKeywordsDrop jobs whose title contains any of these.
locationsSubstring match on the job location ("london", "germany", "remote"). Multi-location jobs match on any of their locations.
remoteOnlyOnly jobs the employer flags as remote.
atsFilterLimit to greenhouse, lever, ashby, smartrecruiters. Reading fewer ATS also makes the run faster.
companyFilterOnly these companies (exact slug or company name).
postedWithinDaysOnly jobs first published in the last N days.
newSinceHoursNew jobs: only jobs our index first saw in the last N hours.
includeDescriptionAdds descriptionText (plain text). Fetched live, only for matched jobs, newest first, up to maxDescriptionItems (default 200).
maxItemsCap on returned jobs (you pay per job). Newest posted jobs come first.

New jobs in the last 24 hours

{ "mode": "search", "newSinceHours": 24, "keywords": ["software engineer"], "remoteOnly": true, "maxItems": 500 }

firstSeenAt is the time our index first saw the job. Schedule this input daily and you get each day's new openings from Greenhouse, Lever, Ashby and SmartRecruiters. Workday is refreshed twice a month, so use atsFilter without workday for this 24-hour view; Workday jobs appear in batches after each twice-monthly refresh.

Jobs at specific companies, with descriptions

{ "mode": "search", "companyFilter": ["stripe", "airbnb"], "keywords": ["engineer"], "includeDescription": true, "maxItems": 50 }

Output (search mode)

{
"jobId": "6757302",
"ats": "greenhouse",
"company": "Airbnb",
"companySlug": "airbnb",
"title": "Senior Staff Machine Learning Engineer, Data & Eval",
"department": null,
"location": "United States",
"locations": ["United States"],
"isRemote": null,
"employmentType": null,
"postedAt": "2026-10-19T06:00:40Z",
"updatedAt": "2026-11-05T18:22:10Z",
"applyUrl": "https://job-boards.greenhouse.io/airbnb/jobs/6757302",
"salary": null,
"sourceUrl": "https://job-boards.greenhouse.io/airbnb/jobs/6757302",
"firstSeenAt": "2026-10-19T06:00:40Z",
"indexUpdatedAt": "2026-11-08T03:00:12Z",
"indexStale": false,
"fetchedAt": "2026-11-08T10:00:00Z"
}

indexUpdatedAt is when the index was last rebuilt. If it is more than 48 hours old, every item has indexStale: true and the run log shows a warning (results are still returned).

Company-list mode (default)

The original mode: pass career-page URLs, ats:slug pairs or bare slugs and get those companies' live postings.

{
"companies": ["greenhouse:airbnb", "https://jobs.lever.co/spotify", "notion"],
"keywords": ["engineer", "data"],
"locations": ["remote", "london"],
"postedWithinDays": 30,
"maxItems": 200
}
FieldDescription
companiesCareer-page URLs, greenhouse:airbnb style pairs, or bare slugs. A bare slug is probed on all four ATSs and the board with the most postings is used (check the log, and use ats:slug if a slug exists on several). Workday is available in search mode only; for one Workday company live, use the separate workday-jobs-live Actor.
keywords, locations, remoteOnly, postedWithinDays, includeDescription, maxItemsAs in search mode (keywords match any word).
redactContactsDefault true. Replaces emails and phone numbers in descriptions.
maxItemsPerCompanyCap per company (0 = no limit).
ATSExample career pageSlug
Greenhouseboards.greenhouse.io/airbnb, job-boards.greenhouse.io/airbnbairbnb
Leverjobs.lever.co/spotifyspotify
Ashbyjobs.ashbyhq.com/notionnotion
SmartRecruiterscareers.smartrecruiters.com/BoschGroupBoschGroup

Company-list output adds team, workplaceType and fetchedAt; salary and plain-text descriptions as available.

salary is {min, max, currency, interval, summary} when the ATS publishes pay (Ashby does for many postings; Lever and Greenhouse only when the employer fills it in the public feed).

Use cases

  • Job boards and newsletters that need fresh listings across many employers.
  • Recruiters and sourcers: "who is hiring a data engineer in Berlin this week?"
  • Job alerts: schedule a daily run with newSinceHours: 24.
  • Sales and market intelligence: which companies are hiring for which roles.
  • Labor-market research and salary-transparency studies.

Pricing

$2 per 1,000 jobs (pay per result, $0.002 per job) plus a $0.005 start fee per run. That is a fraction of the $12 per 1,000 that the largest career-site job APIs charge. Use maxItems and Apify's max-cost-per-run setting to cap spend; the Actor stops when your limit is reached.

Data source and disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Greenhouse, Lever, Ashby, SmartRecruiters, Workday or any listed employer. Data comes from the public job-board APIs that those vendors offer for publishing postings; the postings belong to the employers. The company directory was compiled from publicly visible career-page URLs. You are responsible for using the data lawfully and in line with each employer's and vendor's terms. Personal data of recruiters or hiring managers is not collected.

Limits

  • Search mode covers the boards in the index (see the table above), not every employer on the internet. Companies on other ATS (Teamtailor, iCIMS and others) are not included. For Workday, the index holds the career sites we found on myworkdayjobs.com; very large Workday sites are capped (the list API returns at most 2,000 jobs per query), and the department, employmentType and salary fields are empty because Workday's list API does not return them.
  • Greenhouse, Lever, Ashby and SmartRecruiters are rebuilt nightly: very new postings can take up to a day to appear, closed postings up to a day to disappear. Workday is rebuilt twice a month (1st and 15th): allow up to 16 days. Use company-list mode for live data.
  • Search matches the job title (not the description). department is empty for Greenhouse in the index.
  • Greenhouse's public feed has no team field and rarely carries salary; isRemote for Greenhouse is inferred from location names containing "remote".
  • Lever and SmartRecruiters publish no "updated" timestamp (updatedAt is null).
  • Descriptions in search mode are fetched live and capped by maxDescriptionItems.

FAQ

How is search different from the company-list mode? Search needs no company names: it scans a prebuilt index of all 12,166 boards and returns matching jobs. Company-list mode fetches only the companies you list, live.

How fresh is the data? The index is rebuilt every night. Each result carries indexUpdatedAt; if the index is ever older than 48 hours, results are flagged indexStale: true.

How do I get only new jobs? Use newSinceHours: 24 (jobs first seen by the index in the last 24 hours) or postedWithinDays: 1 (by the employer's own posting date).

How do I find a company's slug? For companyFilter or company-list mode, open its careers page; the last part of the URL is the slug (jobs.lever.co/spotify -> spotify). Company-list mode also accepts the full URL.

Why is a company missing from search? It may use another ATS or have no public postings, or it is not in the directory yet. Use company-list mode with its career-page URL.

Can I get descriptions? Yes: includeDescription: true. They are fetched live for matched jobs (up to maxDescriptionItems); emails and phone numbers are removed unless you set redactContacts to false.

What will a search cost? $0.005 to start plus $0.002 per returned job, so 500 jobs cost about $1.005. Nothing is charged for jobs you do not receive.