Job Search API: 2M Job Postings, 45k+ Company Career Sites
Pricing
from $4.00 / 1,000 job returneds
Job Search API: 2M Job Postings, 45k+ Company Career Sites
Search about 2 million job postings from 49,000 company career sites on 19 applicant tracking systems (Greenhouse, Workday, Lever, Ashby, SmartRecruiters, Paylocity, Personio and more), updated daily. Filter by title, country, remote, salary, date and company. Only-new mode for job alerts.
Pricing
from $4.00 / 1,000 job returneds
Rating
0.0
(0)
Developer
JamieDoe
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Security
Limited permissionsShare
Job Search API: 2M Jobs, 45k+ Company Career Sites, Daily
Search about 2 million open jobs from about 49,000 company career sites in one call. One clean format across 19 applicant tracking systems, from Greenhouse, Workday, Lever and Ashby to BambooHR, Paylocity, Personio and Teamtailor, refreshed daily.
Why this one
- No scraping at run time. Your run searches a ready-made index that is rebuilt every day, so a search across all 2 million jobs takes a minute at most, often seconds.
- One schema for every ATS, with a normalized
countryCode, remote/hybrid flag, salary range and posting date.- Job alerts built in. Only jobs not returned before gives you just the new jobs on every scheduled run, and you aren't charged for the rest.
- Beyond the usual three ATSs. Workday's big employers, US mid-market platforms (BambooHR, Paylocity, Rippling, Breezy, Jobvite) and European ones (Personio, Recruitee, Teamtailor, softgarden, JOIN, d.vinci) sit next to Greenhouse, Lever and Ashby.
What it does
Companies publish their open jobs through their applicant tracking system (ATS). Each ATS offers a public job-board feed, the same one that powers the company's careers page. A daily process reads those feeds for about 49,000 companies and stores their open jobs in one index (2,016,483 jobs on 31 October 2026: Workday 907k, SmartRecruiters 297k, Greenhouse 210k, Paylocity 80k, Lever 74k, Ashby 66k, Workable 57k, softgarden 50k, BambooHR 49k, Teamtailor 49k, Recruitee 41k, Breezy 35k, Personio 33k, JOIN 19k, Rippling 17k, Jobvite 11k, Comeet 8k, Pinpoint 8k, d.vinci 5k). This Actor searches that index with your filters and saves the matching jobs as a dataset you can download as JSON, CSV or Excel, or read through the API.
Need the full job ad text? Turn on Include job description and the Actor fetches it live from each job's own board during your run, for every platform in the index. Most platforms need one request per company; a few whose feeds carry no descriptions (such as Workday and SmartRecruiters) need one per job, so those are limited to 500 jobs per company and 5,000 per run. Jobs over the limit, or on a job board that can't be read at that moment, are still returned, with description set to null and descriptionAvailable set to false; the status message and the SUMMARY record say how many.
Filters
| Filter | What it does |
|---|---|
| Job title contains any of / none of | Keywords like engineer, data scientist, account executive. Matches the start of words, so engineer also finds Engineering; 1-2 letter keywords (AI, QA, Go) must match a whole word. |
| Department or team contains | e.g. engineering, sales |
| Employment type | Full-time, part-time, contract, internship, temporary. Each ATS words this differently (Vollzeit, FULL_TIME, full-or-part-time); they are grouped for you. |
| Location contains any of | Free text against the job's locations, e.g. Berlin, Bay Area, Bavaria |
| Countries | Germany, United States, GB, CH... From the ATS's country field or, when missing, from the location (Austin, TX is US, München is DE). Tick Also keep jobs that name no country to add jobs listed only as "Remote" or "EMEA". |
| Workplace type / Remote jobs only | Remote, hybrid, on-site |
| Posted within the last N days | Uses the ATS posting date, or the day the job first appeared in the index |
| Jobs with salary only, Minimum salary, Salary currency | Keep jobs that publish pay; minimum is per year, with monthly and hourly pay converted |
| Companies | Company names (Stripe, Hugging Face), job board names (huggingface) or job board URLs |
| Applicant tracking systems | e.g. greenhouse, personio. The SUMMARY of every run lists the platforms in the current index with their job counts. |
| Sort by, Max jobs | Newest first or company A-Z; cap the number of jobs (and so the cost) |
Example input
{"titleKeywords": ["engineer", "developer"],"excludeTitleKeywords": ["senior", "staff"],"countries": ["Germany", "Switzerland", "Austria"],"workplaceType": ["remote", "hybrid"],"postedWithinDays": 7,"onlyNewSinceLastRun": true,"maxJobs": 200}
Output
| Field | Example | Notes |
|---|---|---|
title | ClickHouse Operations Engineer | |
company, companySlug | posthog | company is the employer name, cleaned of board labels such as "Careers" or "Jobs at" (for Workday, read from the employer's own job ads); empty if a board names no employer. companySlug is the company's job board name on its ATS |
ats, jobId | ashby, 43dbf072-… | ats + companySlug + jobId identify a job |
location, locations | Remote | all locations of the job |
country, countryCode | USA, US | country as the ATS gives it; countryCode is always ISO 3166 (e.g. DE, GB, US), empty if unknown |
workplaceType | remote / hybrid / onsite | from the ATS, or from "remote" / "hybrid" in the location or title |
department, team, employmentType | Engineering, ClickHouse, Full-time | as published |
postedAt, updatedAt | 2026-10-29T15:32:29Z | from the ATS (ISO 8601, UTC) |
firstSeenAt, lastSeenAt | 2026-10-29T15:32:29Z | when the index first and last saw the job open |
salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText | 150000, 190000, USD, year, "$150K – $190K" | from the ATS's salary fields or the pay range in the ad |
url, applyUrl | links to the job ad and the application form | |
sourceUrl | the company job board | |
description, descriptionAvailable | full job ad as plain text; true/false | only with Include job description; null and false when the job board couldn't be read or the job was over the per-job limit |
scrapedAt | 2026-10-31T01:42:07Z | when your run returned the job |
Empty values are null, so every row has the same columns in CSV and Excel.
Example output
{"title": "ClickHouse Operations Engineer","company": "posthog","ats": "ashby","companySlug": "posthog","jobId": "43dbf072-0fc1-48c9-8c1e-7416db7d4a14","location": "Remote","locations": ["Remote"],"country": "USA","countryCode": "US","workplaceType": "remote","department": "Engineering","team": "ClickHouse","employmentType": "Full-time","postedAt": "2026-10-29T15:32:29Z","updatedAt": null,"firstSeenAt": "2026-10-29T15:32:29Z","lastSeenAt": "2026-10-31T01:32:30Z","salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"salaryText": null,"url": "https://jobs.ashbyhq.com/posthog/43dbf072-0fc1-48c9-8c1e-7416db7d4a14","applyUrl": "https://jobs.ashbyhq.com/posthog/43dbf072-0fc1-48c9-8c1e-7416db7d4a14/application","sourceUrl": "ashby:posthog","description": "ABOUT POSTHOG\n\nPostHog is your product's context layer. …","scrapedAt": "2026-10-31T01:42:07Z"}
Job alerts and integrations
- Set your filters and turn on Only jobs not returned before.
- Create a schedule in Apify, e.g. every morning.
- The first run returns the jobs that match now. Every later run returns only jobs that earlier runs of the same search haven't returned, and you aren't charged for the ones it skips.
- Connect an integration to send each run's jobs to Slack, email, Google Sheets, Make, Zapier, n8n or a webhook.
The memory of returned jobs is kept per set of filters, in a key-value store named job-search-state in your own account. Give the search a Search name if you want to keep the memory while you edit the filters.
Use cases
- Job boards and aggregators: fill a niche board (remote jobs, jobs in Switzerland, climate tech, jobs with salary) with fresh jobs every day, in one consistent format.
- Job alerts: a daily feed of new jobs for a set of titles, countries or companies, sent to Slack or email.
- Recruiting and talent intelligence: see which companies hire for which roles and where, and how fast.
- Sales signals: a company hiring a "Salesforce administrator", "data engineer" or "head of security" is a buying signal for tools and services in that area. Filter by title or department and feed the companies into your CRM.
- Market and salary research: compare titles, countries, remote share and published pay ranges across employers and ATSs.
Pricing
You pay per job saved to the dataset. The exact price is on the Pricing tab. Jobs removed by your filters, jobs skipped as already returned, and jobs dropped because they closed are free. Max jobs and the maximum cost per run in the run options both cap what a run can cost; the Actor stops cleanly at either limit.
How the filters work
- Keywords are case-insensitive and match the start of a word:
datafinds Data Engineer and Database Administrator, butaidoesn't match inside Retail. Add exclusions for the rest, e.g. titlejavawith excludejavascript. - Countries use the ATS's country field when it has one, otherwise the location text, including US states (
Austin, TX) and major cities (London,München,Bengaluru). A job listed only as "Remote" or "EMEA" has no country and is dropped when you filter by country, unless you tick Also keep jobs that name no country. - On-site includes jobs with no stated workplace type, because most ATSs only flag remote and hybrid jobs.
- Minimum salary compares the bottom of the published range, converted to a year (monthly x12, hourly x2080). Set Salary currency too, otherwise amounts in different currencies are compared as-is.
- Posted within uses the ATS's posting date. Some companies repost evergreen roles or keep old dates. A few platforms publish no posting date at all (BambooHR, Rippling, Jobvite, Comeet, Pinpoint, and some softgarden and Workday jobs); those jobs use the day they first appeared in the index, so they all count as recent for the first days after their platform or company was added (many on 31 October 2026).
- A SUMMARY record in the run's key-value store shows the index date and size, the job count per platform, how many jobs matched, any warnings and, with descriptions on, which job boards couldn't be read.
FAQ
Is this legal? The index is built only from the public job-board feeds that ATS vendors provide so companies can publish their openings. No logins, nothing bypassed, and no candidate or personal data: just job postings. The job ads belong to the employers, so check your use case (for example, republishing full descriptions) against the employer's terms. This Actor is not affiliated with any applicant tracking system vendor (such as Greenhouse, Workday, Lever, Ashby or SmartRecruiters) or with any employer whose jobs appear in the results.
How fresh are the jobs? The index is rebuilt every day. Most job boards are read on every rebuild; Workday's large employer sites are read in rotation, each at least every 2–3 days. If a board can't be read in a rebuild, its jobs from the last good read stay in the index for up to 3 days. The run's status message and the SUMMARY record show when it was last updated, and lastSeenAt on each job says when it was last seen open. With Include job description on, each job is also checked against the live job board, and jobs that closed since the last update are dropped.
Why did I get fewer jobs than Max jobs? Fewer jobs matched your filters, earlier runs already returned them (with Only jobs not returned before), or the run reached its maximum cost. The status message says which.
A company I need is missing. Check its name or job board name in Companies. If it still doesn't show up, open an issue with its careers page so it can be added to the index.
Which platforms are covered? The 19 listed under What it does, as of the date shown there. Some platforms are only partly covered so far (for example Workday, where the index holds about 2,600 of the roughly 3,400 employer sites it knows); coverage grows over time, and the SUMMARY record of every run lists the platforms in the current index and how many jobs each has. Job sites such as LinkedIn or Indeed are not included, only company career sites.
Why is countryCode empty for some jobs? The ATS gave no country and the location (e.g. "Remote", "EMEA", a small town) doesn't name one.