ATS Jobs API: 1M Career Site Jobs (Greenhouse, Lever, India) avatar

ATS Jobs API: 1M Career Site Jobs (Greenhouse, Lever, India)

Pricing

from $2.50 / 1,000 results

Go to Apify Store
ATS Jobs API: 1M Career Site Jobs (Greenhouse, Lever, India)

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

Pratham Israni

Maintained by Community

Actor stats

0

Bookmarked

25

Total users

14

Monthly active users

9 hours ago

Last modified

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. applyUrl is the job's page on the company's own site, not an aggregator redirect.
  • Built for daily runs. A stable id for dedupe and postedAfter for "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; maxItems caps 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

FieldWhat it does
keywordsComma-separated terms matched against title + company. Prefix match ("engineer" finds "Engineering"). A job matches ANY term.
excludeKeywordsComma-separated terms; a job with ANY of them is dropped.
categoriesKind 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.
subcategoriesNarrower role, e.g. Backend, Frontend, Machine learning & AI, Nursing, Recruiting & talent acquisition. Picking one is enough; its category is implied.
experienceLevelsFresher, Junior, Mid-level, Senior, Staff+, Not specified.
countriesCountry names; aliases work (usa, uk, uae).
statesState / province names, e.g. Karnataka, California.
cityCity names; spelling variants match (Bangalore = Bengaluru, Gurgaon = Gurugram).
includeWorldwideRemoteAlso add remote jobs open to anyone, anywhere (they have no country).
includeUnspecifiedLocationAlso add jobs whose posting gives no usable location.
workModesremote, hybrid, onsite.
companyCompany names, case-insensitive.
atsSource: career-site platform or company site.
postedWithinDaysOnly jobs posted in the last N days.
postedAfterYYYY-MM-DD, inclusive. Best for scheduled runs.
maxItemsMost 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 of applyUrl; 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. experienceMin is the minimum years when stated.
  • locations: every parsed location (up to 25). Locations matching your filter come first, so city / country (the first location) show the match. location is the text exactly as posted.
  • workMode: remote, hybrid or onsite. isRemote is the same as workMode = remote.
  • remoteScope (remote jobs only): worldwide (anyone, anywhere), region (e.g. EMEA), country (remote within the listed country) or unknown (remote, reach not stated).
  • source: where the job came from (ats is 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 includeWorldwideRemote and jobs with no usable location with includeUnspecifiedLocation.
  • 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.