Career Site Jobs API: Workday, Greenhouse, Salaries ($5/1K) avatar

Career Site Jobs API: Workday, Greenhouse, Salaries ($5/1K)

Pricing

from $4.00 / 1,000 jobs

Go to Apify Store
Career Site Jobs API: Workday, Greenhouse, Salaries ($5/1K)

Career Site Jobs API: Workday, Greenhouse, Salaries ($5/1K)

$5 per 1,000 jobs, failed inputs free. Search 2M+ open jobs from company career sites: Workday, Greenhouse, Lever and 21 more job systems, refreshed nightly. Filter by title, place, salary.

Pricing

from $4.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Plumbline

Plumbline

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

Career Site Jobs API

Search over 2 million open jobs taken straight from company career sites, refreshed every night: Greenhouse, Lever, Ashby, Workday, SmartRecruiters, iCIMS, Workable, BambooHR, Personio, Oracle Cloud, UKG, ADP, Paylocity, Taleo and 10 more job systems, from more than 50,000 company job boards. Filter by job title, place, remote or hybrid, salary, seniority, company and posting date. Each row has the full description, salary range, skills, seniority, every location, and the company's hiring activity (new and closed jobs in the last 30 days). Closed jobs come with how long they stayed open.

  • Fast: a search returns in seconds, because the jobs are already collected; nothing is scraped while you wait.
  • Fresh: every job board is read again every night. Jobs that disappear are marked closed, not left in your results.
  • Real employers: every job comes from the employer's own careers page, not a job aggregator. Staffing agencies are left out unless you turn them on.
  • Export: JSON, CSV, Excel, Google Sheets, or the API. Works with Make, Zapier, n8n, and AI agents (MCP).

What you can do with it

  • Run a job board or job alerts: schedule a daily run with Only new jobs since my last run on. Each new job arrives once.
  • Find companies that are hiring: search a role and a place, for example data engineer in Germany, to get the companies hiring for it. companyNewJobs30d shows how fast each one is growing. Hiring is a buying signal for sales teams and a lead for recruiters.
  • Salary and hiring research: compare salaryMin and salaryMax by role, seniority and city. With Job status set to closed, daysOpen shows how long roles take to fill.
  • AI agents and job tools: one call answers "remote senior Python jobs in Europe paying over 80k".

How to use it

  1. Type job title words (data engineer) and places (Berlin, Texas, United States, EMEA, Remote).
  2. Add any other filters: remote or hybrid, posted within N days, minimum salary, seniority, companies.
  3. Press Start. Rows appear in seconds.

Places are matched by meaning, not by exact text: NYC finds New York, Bay Area finds San Francisco, Oakland and San Jose, and a Germany search also includes remote jobs open to EMEA or worldwide (turn that off with Include remote jobs open to these locations).

Input example

{
"keywords": ["data engineer", "analytics engineer"],
"locations": ["Germany", "Netherlands"],
"workArrangement": ["remote", "hybrid"],
"postedWithinDays": 7,
"maxResults": 100
}

Good to know

  • Coverage: over 2 million open jobs from more than 50,000 company job boards on 24 job systems, found by scanning the public web for career sites (about 112,000 boards are known; the others list no jobs, are retired, or are read for the first time over the next nights). Large employers on Workday fill in over the first nights, up to 1,500 new jobs per employer per night.
  • Company names: Walmart finds Walmart Inc., and Nvidia finds NVIDIA USA and NVIDIA Germany: legal forms, countries and internal codes are ignored. A name never finds a different company that starts with it (Amazon is not Amazon Watch); write Siemens* for every employer whose name starts with Siemens, or a domain such as stripe.com.
  • A company is missing? Run Careers Page Jobs Scraper on its careers page to read it live. A company you ask for that the index does not hold gets an error row, which is free, listing the closest names the index does hold.
  • The same job in many cities is one row with every location (postingCount, mergedJobIds). Turn off One row per job posted in several places to get one row per posting.
  • Empty results never fail silently: a search with no match returns a free error row that says so.
  • Places: every job gets a city, region and country where its location names them. A town given without a country ("Paderborn") gets one from GeoNames (CC BY 4.0) when only one country fits.

Pricing

Pay per result: $5 per 1,000 jobs, plus $0.001 per run start. No subscription.

EventWhenPrice
Actor startOnce per run (per GB of memory; the default 1 GB counts as one)$0.001
JobEach job row saved to the dataset$0.005
ExampleRowsCost
10 jobs10$0.001 + $0.05 = $0.051
100 jobs100$0.001 + $0.50 = $0.501
1,000 jobs1,000$0.001 + $5.00 = $5.001
  • Error rows are free: a search with no match, or a company the index does not hold.
  • On Apify's free plan a run stops at 20 rows. Any paid Apify plan removes this limit.
  • Set Max total charge per run in the run options. The Actor stops cleanly at that limit and keeps every row saved so far.

Use it from code, automations, and AI agents

API (returns the rows when the run finishes):

curl -X POST "https://api.apify.com/v2/acts/plumblinedata~career-site-jobs-api/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords": ["data engineer"], "locations": ["Germany"], "postedWithinDays": 7, "maxResults": 100}'

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("plumblinedata/career-site-jobs-api").call(run_input={"keywords": ["data engineer"], "locations": ["Germany"], "postedWithinDays": 7})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["title"], row["company"], row["location"])

No-code: connect the Actor in Make, Zapier, n8n, or Google Sheets through Apify's integrations, or add a webhook to get notified when a run finishes.

AI agents (MCP): add https://mcp.apify.com?tools=plumblinedata/career-site-jobs-api to Claude, Cursor, or any MCP client. The agent can search jobs with the same input as above.

FAQ

How fresh are the jobs? Every board is read once a night. lastSeenAt is the last time the job was on its board; firstSeenAt is when it first appeared.

Can I get only new jobs every day? Yes. Turn on Only new jobs since my last run and schedule the Actor. The first run returns current matches; later runs return only jobs added since.

Is the data legal to use? Every job comes from a public careers page that the employer publishes so people can apply. No logins, no personal data beyond what the employer posts. You are responsible for how you use the data, including copyright, personal data rules such as GDPR, and the site's terms.

What does an error row mean? A search with no match returns one row with type: "error", a short errorCode (no_matching_jobs, no_new_jobs, company_not_indexed, company_ambiguous, index_unavailable) and a plain-language errorMessage. Error rows are free. Remove them with a filter on type.

How is this different from Careers Page Jobs Scraper? This Actor searches jobs we have already collected, so a search across thousands of companies returns in seconds. Careers Page Jobs Scraper reads the careers pages you give it, live, including companies this index does not hold.

Support

Found a problem or need a field? Open an issue on the Issues tab. Include the run ID and the input that shows the problem. We read every issue.