Job Search API: 12,000+ Career Sites incl. Workday
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Features
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
| Mode | Use it when | Source |
|---|---|---|
search | You want jobs by keyword / location / date across all companies | Index 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 now | The employers' public job-board APIs, fetched live |
Boards in the search index
| ATS | Company boards | Open jobs in index | Refresh |
|---|---|---|---|
| Workday | 3,568 | 896,898 | twice a month |
| Greenhouse | 4,377 | 177,118 | nightly |
| Lever | 230 | 26,439 | nightly |
| Ashby | 3,012 | 59,111 | nightly |
| SmartRecruiters | 979 | 173,987 | nightly |
| Total | 12,166 | 1,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}
| Field | Description |
|---|---|
keywords | Words to find in the job title (case-insensitive). Empty = every job. |
keywordMatch | any (default): at least one keyword. all: every keyword must appear. |
excludeKeywords | Drop jobs whose title contains any of these. |
locations | Substring match on the job location ("london", "germany", "remote"). Multi-location jobs match on any of their locations. |
remoteOnly | Only jobs the employer flags as remote. |
atsFilter | Limit to greenhouse, lever, ashby, smartrecruiters. Reading fewer ATS also makes the run faster. |
companyFilter | Only these companies (exact slug or company name). |
postedWithinDays | Only jobs first published in the last N days. |
newSinceHours | New jobs: only jobs our index first saw in the last N hours. |
includeDescription | Adds descriptionText (plain text). Fetched live, only for matched jobs, newest first, up to maxDescriptionItems (default 200). |
maxItems | Cap 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}
| Field | Description |
|---|---|
companies | Career-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, maxItems | As in search mode (keywords match any word). |
redactContacts | Default true. Replaces emails and phone numbers in descriptions. |
maxItemsPerCompany | Cap per company (0 = no limit). |
| ATS | Example career page | Slug |
|---|---|---|
| Greenhouse | boards.greenhouse.io/airbnb, job-boards.greenhouse.io/airbnb | airbnb |
| Lever | jobs.lever.co/spotify | spotify |
| Ashby | jobs.ashbyhq.com/notion | notion |
| SmartRecruiters | careers.smartrecruiters.com/BoschGroup | BoschGroup |
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,employmentTypeand 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).
departmentis empty for Greenhouse in the index. - Greenhouse's public feed has no team field and rarely carries salary;
isRemotefor Greenhouse is inferred from location names containing "remote". - Lever and SmartRecruiters publish no "updated" timestamp (
updatedAtisnull). - 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.