India ATS Jobs: Zoho Recruit, Keka, Freshteam (Half Price) avatar

India ATS Jobs: Zoho Recruit, Keka, Freshteam (Half Price)

Pricing

Pay per usage

Go to Apify Store
India ATS Jobs: Zoho Recruit, Keka, Freshteam (Half Price)

India ATS Jobs: Zoho Recruit, Keka, Freshteam (Half Price)

Open jobs from company career sites on Zoho Recruit, Keka and Freshteam, India's most-used SMB ATSs. Public listings only, robots.txt honoured. One normalised schema with experience, department, location and description. $2 per 1,000 jobs.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Unadhi

Unadhi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Categories

Share

India ATS Jobs: Zoho Recruit, Keka and Freshteam career sites (half price)

This actor pulls every open job from company career sites hosted on Zoho Recruit and Keka, the ATSs most Indian SMBs and startups use, plus Freshteam (legacy). It covers only public, login-free listings. Paste career-page URLs and you get one clean row per job in the same schema as our Greenhouse/Lever/Ashby actor.

Price: $2 per 1,000 jobs ($1.75 on SILVER, $1.25 on GOLD+), with no $0.03 start fee. That is half of memo23/career-site-ats-jobs-api at every tier. You only pay for jobs delivered after your filters. Failed boards, duplicates and filtered-out jobs are free.

Sources and why they're allowed

We checked each platform on 29 Sep 2026 before building it. This is our reading, not legal advice.

SourceHow we read itrobots.txtTermsStatus
Zoho Recruit (*.zohorecruit.in/.com/.eu/...)Server-rendered /jobs/Careers page; the jobs JSON is embedded in itAllows /jobs, /jobs/*, /careersZoho terms: no anti-scraping clause✅ Supported
Keka (*.keka.com/careers)Keka's public jobs-embed endpoint under /careers/api/… (what Keka gives customers to embed jobs on their own sites)Disallow: /, Allow: /careers. We only touch /careers…Keka MSA: no anti-scraping clause✅ Supported
Freshteam (*.freshteam.com/jobs)Server-rendered list page. The description is the list excerpt; detail pages aren't fetchedAllows /jobsFreshworks terms: no clause⚠️ Legacy: Freshworks is shutting Freshteam down (access ends about April 2027)
Darwinboxn/arobots.txt redirects to a login page, and jobs load only through an undocumented app APITerms page can't be read without JS❌ Not supported (failed the gate)

robots.txt is fetched and obeyed per host (RFC 9309, including Crawl-delay; at least 0.2 s between requests to a host). Every row carries a sourceCompliance object recording the robots and terms basis.

Output

Each row has ats, board, jobId, title, company, locations, city, country, workplaceType, employmentType, department, industry (Zoho), experience (Keka, e.g. "1-3"), skills (Keka), publishedAt, jobUrl/applyUrl, requisitionId (Keka job number), salary* (when stated), description (plain text), and sourceCompliance. There is also a BOARDS_SUMMARY record in the key-value store with a status per board.

Known gaps:

  • Keka rarely states the employment type (it only gives a numeric code, kept as atsJobTypeCode), so employmentType is filled only when the title or description says it (16 of 180 jobs).
  • None of the tested boards published salaries.
  • Freshteam gives no posting date.

Filters

keywords, excludeKeywords, searchDescription, locations, remoteOnly, departments, employmentTypes, postedWithinDays, maxJobsPerBoard, maxJobsTotal. The run's max total charge is always respected: jobs beyond it aren't delivered and aren't charged.

Measured (box, 29 Sep 2026)

14 inputs (5 Zoho, 5 Keka, 1 Freshteam, plus Darwinbox, Naukri and a nonexistent Keka tenant as negative tests): 11/11 real boards returned ok, 235 jobs (Zoho 53, Keka 180, Freshteam 2). The 3 negative inputs were rejected cleanly and cost nothing. 29 requests, 6.6 s wall, 1.62 CPU-s, 118 MB peak. A random job URL from each board: 11/11 returned HTTP 200. Details are in test/RESULTS.md.