Zoho Recruit & Keka Jobs Scraper - India Career Sites
Pricing
from $2.60 / 1,000 job returneds
Zoho Recruit & Keka Jobs Scraper - India Career Sites
Scrape open jobs from any company careers page on Zoho Recruit or Keka: title, department, city, state, country, experience, salary, skills, posted date and apply link in one row shape. Full description optional. Zero open roles and a missing careers page come back as their own rows. Unofficial.
Pricing
from $2.60 / 1,000 job returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
Get every open job from a company careers page on Zoho Recruit or Keka as one clean table: title, company, department, employment type, experience, city, state, country, salary where published, skills, posted date and the apply link. Enter a company name or paste the careers page URL. No login or API key needed.
You get the jobs the company itself has published, in the same columns for Zoho Recruit and Keka, ready for Excel, CSV or your own tool.
What you get
- One row per open job, same 31 columns on Zoho Recruit and Keka, so one spreadsheet or filter works for both
- City, state and country as separate columns, so filtering by Hyderabad or India is one click in a spreadsheet
- Experience (for example "20+ years") and department where the company publishes them
- Full job description as plain text on request (
includeDescription); with it on, Zoho Recruit rows also get skills, salary and industry where the company published them - Posted date in ISO 8601, so "jobs from the last 7 days" works with
postedWithinDays - Remote jobs flagged as the company set them (
isRemote); a separateremoteHintcolumn gives a best guess from the title or location - Salary shown only where the company published it; otherwise the cell stays empty
Know why a company returned nothing
Every company you enter returns at least one row, so an empty result is never a mystery. Only job rows are charged. The rowType column says which case you got:
rowType | What it means | Charged? |
|---|---|---|
job | One open job | Yes |
no-open-roles | The careers page is live and has no open jobs (or none matching your filters - the reason column says which) | No |
board-not-found | No careers page with that name exists on Zoho Recruit or Keka | No |
unavailable | The page could not be read after retries (temporary error) | No |
budget-reached | Your maximum total charge for the run was reached; says how many jobs you got of how many | No |
If a filter cannot work for a company - for example remoteOnly on Keka, whose careers pages have no remote field - you get a free row that says so, instead of a silent zero.
Input
| Field | Example | What it does |
|---|---|---|
companies | zoho:talent-shore, keka:pennanttech | One entry per company, up to 200 per run |
titleContains | developer | Keep jobs whose title contains this text |
departmentContains | sales | Keep jobs whose department contains this text |
locationContains | Bengaluru | Matches city, state, country or any of several locations |
remoteOnly | true | Only jobs the company marked as remote |
postedWithinDays | 7 | Only jobs opened in the last N days |
maxJobsPerCompany | 50 | Cap rows per company |
includeDescription | true | Add the full description (slower on Zoho Recruit: one extra page per job) |
Three ways to name a company
{"companies": ["zoho:talent-shore","https://pennanttech.keka.com/careers/","pennanttech"]}
zoho:<company>- the part before.zohorecruit.com. Regional addresses such asacme.zohorecruit.inare accepted tookeka:<company>- the part before.keka.com- A pasted careers page URL
- Just the name - Zoho Recruit is tried first, then Keka
Left empty, the run uses the two examples above.
Output example
A real row from a run on 2026-10-29 (some columns left out here):
{"rowType": "job","ats": "Keka","companySlug": "pennanttech","companyName": "Pennant Technologies","jobId": "143320","title": "Chief Delivery Officer","department": "Client Services","employmentType": "full-time","experience": "20+ years","locationRaw": "Corporate Office, Hyderabad, TG, India","city": "Hyderabad","state": "TG","country": "India","isRemote": null,"postedAt": "2026-10-16T09:54:29.917Z","jobUrl": "https://pennanttech.keka.com/careers/jobdetails/143320","applyUrl": "https://pennanttech.keka.com/careers/jobdetails/143320"}
All columns: rowType, ok, reason, ats, companySlug, companyName, jobId, title, department, employmentType, experience, locationRaw, locationsAll, country, state, city, isRemote, remoteHint, salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryText, skills, industry, postedAt, jobUrl, applyUrl, descriptionSnippet, descriptionText, source.
Measured on the live sites (2026-10-29)
- Default input (one Zoho Recruit and one Keka company): 250 jobs in under 5 seconds
- With full descriptions for three companies: 280 jobs, every one with its full description, about 3 minutes (Zoho Recruit reads one page per job)
- Two company names that do not exist: two free
board-not-foundrows, no charge
Questions this answers
- How do I scrape jobs from a Zoho Recruit careers page? Put
zoho:<company>or the careers page URL incompaniesand run. - How do I export Keka job openings to Excel or CSV? Use
keka:<company>, then download the dataset as CSV or Excel. - Which of these companies is hiring developers in Bengaluru right now?
titleContains: developerwithlocationContains: Bengaluru. - Did this company stop hiring, or is the page gone? Two different rows:
no-open-rolesandboard-not-found.
Typical uses
- Hiring signals for sales - a company that just opened 20 roles is a different lead than one with none
- Job boards and aggregators for India - one schema for two platforms that Indian employers use
- Recruiting and staffing - track client and competitor openings daily and compare on
jobId - Salary and skills research - structured salary where the company published it, required skills from Zoho Recruit job pages (with
includeDescription)
Pricing
Pay per result: a small start fee once per run, charged only when the first job row is returned, then a fee per job row. Rows that say a page does not exist, has no open jobs, could not be read, or that your limit was reached are free. The same company entered twice in one run is read and charged once.
Notes and limits
- Unofficial. Not affiliated with, endorsed by, or sponsored by Zoho Corporation or Keka Technologies. All product names are trademarks of their respective owners.
- Only public careers pages are read. Nothing needs a login.
- Keka careers pages have no remote field, so
remoteOnlykeeps no Keka jobs (a free row explains this). UseremoteHintfor a guess. - Some companies leave fields empty (for example city or department); those stay
nullrather than guessed. - Company names on Zoho Recruit come from the page title when it reads "Jobs at ..." or "Careers at ..."; other titles leave
companyNameempty. - Up to 200 companies per run. Temporary errors (HTTP 429 or 5xx, timeouts) are retried; a page that does not exist is reported, not retried.
Other tools by NeverEmpty
- Job Listing API - Career Site Jobs from Any ATS - the same idea for the large global applicant tracking systems
- ATS Detection - find which applicant tracking system a company uses from its domain
Support
If a company page does not work as expected, or you want another Indian applicant tracking system added, open an issue on the Issues tab of this Actor with the company name. It will be reproduced on the live page before anything is changed.