ATS Jobs API: 1M Career Site Jobs (Greenhouse, Lever, India)
Pricing
from $2.50 / 1,000 results
ATS Jobs API: 1M Career Site Jobs (Greenhouse, Lever, India)
ATS Jobs API: nearly 1M live jobs from 30,000+ company career sites, pre-indexed and filterable by category, experience, location and remote. Strong India coverage (Keka, greytHR, Infosys, Wipro). Refreshed daily. Pay per result.
Pricing
from $2.50 / 1,000 results
Rating
5.0
(3)
Developer
Pratham Israni
Maintained by CommunityActor stats
0
Bookmarked
25
Total users
14
Monthly active users
9 hours ago
Last modified
Categories
Share
ATS Jobs API: 1M company career site jobs (India + global)
Nearly 1 million live jobs, refreshed every day, straight from 30,000+ companies' own career sites: Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Keka, greytHR, Zoho Recruit and more, plus the career sites of Amazon, Accenture, Infosys, Wipro, HCLTech and Capgemini.
Every row has a direct apply link, a category (Software Engineering › Backend, Data & AI › Analytics, Healthcare › Nursing...), an experience level and parsed locations (country, state, city). It is not a LinkedIn, Indeed or Naukri scraper.
Why use it
- Filter like a job board, not like a scraper. 19 categories and 114 subcategories, experience level (Fresher to Staff+), country, state, city, remote/hybrid/on-site, posted date, exclude words.
- Strong India coverage. 116,000+ jobs in India, including Indian IT-services firms and Indian HR platforms (Keka, greytHR, Zoho Recruit, RippleHire) that US-centric job APIs miss. 450,000+ in the United States.
- Direct apply links.
applyUrlis the job's page on the company's own site, not an aggregator redirect. - Built for daily runs. A stable
idfor dedupe andpostedAfterfor "only what's new". - Fast and cheap. It reads a ready index instead of scraping live, so a run takes seconds. You pay only per job returned;
maxItemscaps the cost.
Quick start
The form opens with a small, cheap sample:
{"categories": ["Software Engineering"],"countries": ["India"],"postedWithinDays": 7,"maxItems": 25}
Fields you leave empty filter nothing (only maxItems has a default, 25).
Backend and mobile developers in Bengaluru, junior to mid-level, no interns:
{"subcategories": ["Backend", "Mobile"],"experienceLevels": ["Junior", "Mid-level"],"city": ["Bengaluru"],"excludeKeywords": "intern","postedWithinDays": 3,"maxItems": 200}
Remote data jobs in India plus remote jobs open worldwide:
{"categories": ["Data & AI"],"countries": ["India"],"includeWorldwideRemote": true,"workModes": ["remote"],"maxItems": 100}
Daily feed of only new nursing jobs in the US (schedule it, set postedAfter to the previous run's date):
{"subcategories": ["Nursing"],"countries": ["United States"],"postedAfter": "2026-10-16","maxItems": 1000}
Input
| Field | What it does |
|---|---|
keywords | Comma-separated terms matched against title + company. Prefix match ("engineer" finds "Engineering"). A job matches ANY term. |
excludeKeywords | Comma-separated terms; a job with ANY of them is dropped. |
categories | Kind of work: Software Engineering, DevOps, Cloud & Infrastructure, Data & AI, Security, IT & Support, Product & Design, Sales & Business Development, Marketing & Content, Customer Support & Success, Finance & Accounting, HR & Recruiting, Legal & Compliance, Operations & Admin, Logistics & Transport, Engineering (non-software), Healthcare & Life Sciences, Retail, Hospitality & Food, Education & Training, Executive Leadership. |
subcategories | Narrower role, e.g. Backend, Frontend, Machine learning & AI, Nursing, Recruiting & talent acquisition. Picking one is enough; its category is implied. |
experienceLevels | Fresher, Junior, Mid-level, Senior, Staff+, Not specified. |
countries | Country names; aliases work (usa, uk, uae). |
states | State / province names, e.g. Karnataka, California. |
city | City names; spelling variants match (Bangalore = Bengaluru, Gurgaon = Gurugram). |
includeWorldwideRemote | Also add remote jobs open to anyone, anywhere (they have no country). |
includeUnspecifiedLocation | Also add jobs whose posting gives no usable location. |
workModes | remote, hybrid, onsite. |
company | Company names, case-insensitive. |
ats | Source: career-site platform or company site. |
postedWithinDays | Only jobs posted in the last N days. |
postedAfter | YYYY-MM-DD, inclusive. Best for scheduled runs. |
maxItems | Most jobs to return (and pay for). |
Output
One dataset item per job:
{"id": "eecbbbf8612ffc3f7ce4559b87c10163","title": "Senior Backend Engineer, India","company": "GitLab","companyDomain": "gitlab.com","companyLogo": "https://www.google.com/s2/favicons?domain=gitlab.com&sz=128","applyUrl": "https://job-boards.greenhouse.io/gitlab/jobs/8716143002","category": "Software Engineering","subcategory": "Backend","experienceLevel": "Senior","workMode": "onsite","isRemote": false,"location": "Bangalore, India","locations": [{ "country": "India", "state": "Karnataka", "city": "Bengaluru" }],"city": "Bengaluru","country": "India","source": "greenhouse","ats": "greenhouse","postedAt": "2026-10-15","lastSeenAt": "2026-10-17T10:34:44.256Z"}
id: stable hash ofapplyUrl; the dedupe key across runs.category,subcategory: what kind of job it is. Absent when it could not be told from the job.experienceLevel: from the title and the posting's stated experience. Absent when the posting gives no signal.experienceMinis the minimum years when stated.locations: every parsed location (up to 25). Locations matching your filter come first, socity/country(the first location) show the match.locationis the text exactly as posted.workMode: remote, hybrid or onsite.isRemoteis the same asworkMode = remote.remoteScope(remote jobs only):worldwide(anyone, anywhere),region(e.g. EMEA),country(remote within the listed country) orunknown(remote, reach not stated).source: where the job came from (atsis the same value under its old name).postedAt: posting date; the date the job was first found when the site gives none.lastSeenAt: last time the daily refresh saw the job live.
The Overview tab shows logo, title, company, category, experience, location, posted date and apply link.
Pricing
Pay per result; the Pricing tab shows the current rate. maxItems caps a run's cost, and a run also stops at your Apify spending limit.
Good to know
- Location filters only match jobs with a known location. Add worldwide-remote jobs with
includeWorldwideRemoteand jobs with no usable location withincludeUnspecifiedLocation. - Refreshed daily, not live. If the freshest result is more than about a day and a half old, the run logs a warning.
- No job descriptions or salaries. Title, company, category, level, location, apply link and dates.
- Optional fields (
category,experienceLevel,companyDomain,companyLogo,experienceMin,city) are present when known. - The same opening listed on two sources can appear twice.
API access
The same data is available as a REST API with an OpenAPI spec. Category and filter lists: GET https://job-feed-api.pk2732004.workers.dev/api/public/v1/categories. Live counts: /api/public/v1/stats.
FAQ
Is this LinkedIn or Indeed data? No. Only companies' own career sites and the platforms that host them.
How do I get only new jobs each run? Schedule the Actor daily with postedAfter set to the previous run's date, and skip ids you already have.
Fewer results than maxItems? Your filters matched fewer jobs. Widen postedWithinDays, drop city, or add includeWorldwideRemote.
Missing a company or career site? Open an issue on the Actor page with the link.