Career Site Jobs API — 1.7M+ Jobs with Salaries | $2 per 1K
Pricing
from $1.40 / 1,000 jobs
Career Site Jobs API — 1.7M+ Jobs with Salaries | $2 per 1K
1.7M+ open jobs from 19,000+ companies' own career sites (Workday, Oracle, Greenhouse, SmartRecruiters, UKG + 10 more), refreshed daily. Pay on 29% of jobs. Filter by title, location or salary, or get only new jobs each run. $2 per 1,000.
Pricing
from $1.40 / 1,000 jobs
Rating
0.0
(0)
Developer
CMM Research
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Career Site Jobs API — 1.8M+ Jobs with Salaries
Search more than 1.8 million open jobs from 19,000+ companies' own career sites (not job boards) in seconds. Workday, Oracle, Greenhouse, Lever and 15 more hiring systems, refreshed every night. Get job titles, companies, locations, posting dates, descriptions, and salaries where the posting states them (more than 500,000 jobs), as clean JSON, CSV or Excel. You don't need any coding, proxies or servers.
Built and maintained by CMM Research. Missing a company, or need a custom feed? Email us at chazmichael_michaels@icloud.com.
Who uses it
- Job boards and newsletters. Schedule a daily search with
onlyNewSinceLastRunand get a clean feed with no duplicates. - Recruiters and sales teams. See who is hiring for what, where, right now.
- Salary research. Filter by minimum pay and currency across real, current postings.
- Labour-market and AI projects. Build a large, structured, deduplicated job dataset without running a scraper.
A real result (from a 7 Oct 2026 search for data engineers paid in USD):
{"title": "Senior Data Engineer","companyName": "Credence","company": "credence","location": "McLean, Virginia, United States","additionalLocations": ["Boston, Massachusetts, United States","Warner Robins, Georgia, United States","Wright-Patterson Air Force Base, Ohio, United States"],"remote": false,"department": "DOW AI/Tech","postedAt": "2026-10-07T00:00:00.000Z","employmentType": "Full-time","salaryMin": 115000,"salaryMax": 155000,"salaryCurrency": "USD","salaryPeriod": "year","salaryText": "$115,000 - $155,000","url": "https://apply.workable.com/j/7AE92C7BA3","ats": "workable"}
Every job also comes with its description (plain text, up to 8,000 characters) and the fields listed under Output below.
Large employers hire through Workday (NVIDIA, Salesforce, CVS, Lowe's, Morgan Stanley) or Oracle Recruiting Cloud (JPMorgan Chase, Marriott, Kroger, Hilton, Macy's); mid-size and global companies through SmartRecruiters (Bosch, Domino's, Accor), UKG (Buc-ee's, Big 5 Sporting Goods, Ollie's) or Jobvite (JBS, Pilgrim's, MedVet); startups and small businesses through Greenhouse, Workable, Ashby, Lever, BambooHR, Rippling, Breezy, Personio, Teamtailor and Recruitee. Large US hospital systems are included too, such as Ascension, SSM Health, Sutter Health, CommonSpirit, Kaiser Permanente, Baylor Scott & White, Duke Health, BJC HealthCare, MedStar Health, Emory Healthcare and Texas Health Resources, including the ones on Phenom, iCIMS, TalentBrew and Taleo career sites. This Actor covers all of them with one set of output fields.
| System | Jobs |
|---|---|
| Workday | 860,000+ |
| Oracle Recruiting Cloud | 300,000+ |
| SmartRecruiters | 220,000+ |
| UKG Pro (UltiPro) | 108,000+ |
| Greenhouse | 89,000+ |
| Workable | 63,000+ |
| Ashby | 32,000+ |
| BambooHR | 27,000+ |
| Breezy HR | 19,000+ |
| Personio | 12,000+ |
| Recruitee | 12,000+ |
| Jobvite | 10,000+ |
| TalentBrew career sites | 10,000+ |
| Teamtailor | 10,000+ |
| Rippling | 9,500+ |
| iCIMS (Jibe career sites and iCIMS career portals) | 8,500+ |
| Phenom career sites | 6,000+ |
| Lever | 3,000+ |
| Taleo | 700+ |
Counts from the 19 Oct 2026 index; they change daily.
Why this one
- Fast. Every career site is collected once a day into an index, so a search doesn't crawl thousands of sites while you wait. A typical search finishes in 10–20 seconds.
- Straight from the source. Every role comes from the company's own career site, not
a third-party job board, and the
urlis the company's own apply link. - Newest first. Results are sorted by posting date, and
postedWithinDaysskips the old ones cheaply. - Nothing silently missing. Workday hides everything past its first 2,000 results; the daily collection gets past that, so big employers like Dollar Tree (23,000+ roles) are complete.
- Pay ranges as data. About a quarter of all roles — far more in the US, where
pay-transparency laws apply — state a salary or hourly rate. It's extracted into
salaryMin/salaryMax/salaryCurrency/salaryPeriod, annualised intosalaryAnnualMin/salaryAnnualMax, and filterable. Each system's own structured pay data is used where it exists (Ashby, Rippling, UKG, Recruitee, and the pay fields of Breezy and BambooHR). - Only what's new, on a schedule. Turn on
onlyNewSinceLastRunand schedule the search daily: each run returns only roles added since the last one, so you never pay twice for the same job. - Real company names (
companyName), plus the career-site id (company) for joins. - Pay only for what you get. Filters run before charging.
Pricing
$2 per 1,000 jobs, plus Apify's standard run-start fee. Platform usage is included, so you are not billed for compute separately.
maxJobsis a hard cap per run.- Apify's maximum cost per run also works: if the limit is reached mid-run, the Actor stops cleanly and keeps everything delivered so far.
Input
| Field | What it does |
|---|---|
titleKeywords / titleExcludeKeywords | Case-insensitive "contains" filters on the job title. |
locationKeywords | Matches any listed location or the country. |
companyKeywords | Matches the company name or its career-site id. |
postedWithinDays | Only recent roles. Undated roles count from the day the index first saw them. |
onlyNewSinceLastRun | Only roles the index added since this same search last ran. The first run returns everything that matches. Changing any filter starts a new history. |
monitorName | Optional. Keeps two searches with identical filters on separate histories (e.g. one per client). |
remoteOnly | Only roles whose location or workplace label says remote. |
onlyWithSalary | Only roles whose posting states pay. |
minAnnualSalary | Only roles whose pay range reaches at least this per year, in the job's own currency (hourly × 2,080, monthly × 12). |
salaryCurrencies | Only roles paying in these currencies, e.g. USD, GBP. |
sources | Limit to any of the 19 systems (workday, oracle, smartrecruiters, ukg, greenhouse, workable, ashby, lever, bamboohr, breezy, personio, rippling, teamtailor, recruitee, jobvite, phenom, icims, talentbrew, taleo). |
includeDescription | Adds the job description as plain text (up to 8,000 characters). |
maxJobs / maxJobsPerCompany | Caps on results, and your cost control. |
Output
| Field | Description |
|---|---|
id | Stable identifier |
title | Role title |
companyName / company | Company name, and its career-site id |
location / additionalLocations / country | Every listed location (country where the site publishes it) |
remote / remoteEligible / workplaceType | Remote signals, and the company's own workplace label where published |
department | Team or job category |
postedAt | When the company posted the role |
firstSeenAt | When the index first saw it. A reliable "new since" signal, even for undated roles |
employmentType | Full time, part time, contract… where published |
salaryMin / salaryMax / salaryCurrency / salaryPeriod | Stated pay: e.g. 120000 / 150000 / USD / year, or 18.5 / 22 / USD / hour. Null when the posting states none |
salaryAnnualMin / salaryAnnualMax | The same range per year, for comparing hourly and salaried roles |
salaryText / salarySource | The text it came from ("$120,000 - $150,000"), and whether it was published as data (structured) or read from the description |
url | Apply link on the company's own career site |
description | Plain-text description (optional) |
ats | Which of the 19 systems the role came from (e.g. workday, greenhouse, phenom, icims) |
indexedAt | When the index this run read was built |
The field names match our Workday and Greenhouse / Ashby / Lever Actors, which fetch a company's jobs live when you need the very latest.
Examples
Data engineers in Texas, last 7 days
{ "titleKeywords": ["data engineer"], "locationKeywords": ["Texas", "TX"], "postedWithinDays": 7 }
Every new remote role in the last day, titles and links only
{ "remoteOnly": true, "postedWithinDays": 1, "includeDescription": false, "maxJobs": 20000 }
Software engineers in the US paying $150k+
{ "titleKeywords": ["software engineer"], "salaryCurrencies": ["USD"], "minAnnualSalary": 150000, "maxJobs": 2000 }
Daily feed of new nursing roles in Ohio (schedule it once a day)
{ "titleKeywords": ["nurse", "RN"], "locationKeywords": ["Ohio", "OH"], "onlyNewSinceLastRun": true, "maxJobs": 5000 }
Everything two companies have open
{ "companyKeywords": ["Morgan Stanley", "Stripe"], "maxJobs": 10000 }
Instant API (Standby mode)
Need results inside your own app, in a second or two, without starting a run? This Actor also runs in Standby mode: it stays warm as a web API, and each request is one search.
curl "https://viridian-layout-ea2--career-site-jobs-api.apify.actor/?titleKeywords=data%20engineer&locationKeywords=Remote&postedWithinDays=7&maxJobs=50" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
Every input field works as a URL parameter; list fields take comma-separated values (titleKeywords=nurse,rn). Or POST the same JSON input you would give a run:
curl -X POST "https://viridian-layout-ea2--career-site-jobs-api.apify.actor/" \-H "Authorization: Bearer YOUR_APIFY_TOKEN" -H "Content-Type: application/json" \-d '{"titleKeywords": ["product manager"], "minAnnualSalary": 150000, "salaryCurrencies": ["USD"], "maxJobs": 100}'
The answer is JSON: {"count", "stoppedBecause", "indexedAt", "jobs": [...]}, with each job in the same format as a run's output. Same price as a run: you pay only for the jobs returned, and your spending limit trims the answer. Up to 5,000 jobs per request; descriptions are left out unless you add includeDescription=true. For daily "only new jobs" feeds, schedule a normal run with onlyNewSinceLastRun.
Use it from Claude, Cursor or any AI agent (MCP)
Apify's hosted MCP server lets an AI assistant run this Actor as a tool. It writes the input from a plain-English request and reads back the results. Add this to your client's MCP settings (Claude Desktop, Cursor, VS Code, Windsurf and others):
{"mcpServers": {"career-jobs": {"url": "https://mcp.apify.com?tools=viridian_layout_ea2/career-site-jobs-api"}}}
The first time it connects, a browser window opens so you can sign in to Apify. If your
client can't do that, add "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }.
You'll find your token under Settings → API & Integrations in Apify Console.
In Claude Code, run this once:
$claude mcp add --transport http career-jobs "https://mcp.apify.com?tools=viridian_layout_ea2/career-site-jobs-api"
Then ask in plain English, for example:
- "Find registered nurse jobs in Ohio posted in the last 3 days that state an hourly rate."
- "Which companies posted remote data engineer roles paying over $150k this week? Make a table."
- "List every open role at Morgan Stanley and Stripe, with titles and links only."
Runs started by an agent are billed exactly like any other run, at $2 per 1,000 jobs.
Ask it to set maxJobs if you want a hard cap.
Notes
-
Pay is read from each posting's own text, so it is as accurate as the posting. When a posting lists several ranges (one per state, say), the first is used.
salaryTextshows exactly what was read. -
The index is rebuilt once a day. The run's
SUMMARYrecord and every job'sindexedAtsay exactly when. For a single company's roles to the minute, use the live Actors linked above. -
Roles disappear from the index within a few days of the company closing them.
-
onlyNewSinceLastRunremembers each search in a key-value store namedcareer-site-jobs-monitorin your own Apify account. If a run stops atmaxJobsor your spending limit, the new roles it didn't deliver are not offered again, so setmaxJobscomfortably above a day's volume. -
Jobvite career pages don't show a posting date, so Jobvite roles are dated by when the index first saw them (
firstSeenAt). -
Teamtailor's feed lists at most 100 roles per company, so its very largest employers are partially covered.