India ATS Jobs: Zoho Recruit, Keka, Freshteam (Half Price)
Pricing
Pay per usage
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
Maintained by CommunityActor 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.
| Source | How we read it | robots.txt | Terms | Status |
|---|---|---|---|---|
Zoho Recruit (*.zohorecruit.in/.com/.eu/...) | Server-rendered /jobs/Careers page; the jobs JSON is embedded in it | Allows /jobs, /jobs/*, /careers | Zoho 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 fetched | Allows /jobs | Freshworks terms: no clause | ⚠️ Legacy: Freshworks is shutting Freshteam down (access ends about April 2027) |
| Darwinbox | n/a | robots.txt redirects to a login page, and jobs load only through an undocumented app API | Terms 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), soemploymentTypeis 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.