AS
Apify Store
/blackfalcondata/naukri-jobs-feed
Naukri Job Scraper 💰 Just $0.27/1k - Salary, Skills & Detail
Naukri Job Scraper for naukri.com: India's largest job board (500K+ listings). Salary, walk-in contacts, skills, company profiles, full descriptions. Just $0.27/1K on paid plans; $0.39/1K free, no mon
liveasyncunknown~30s typical
jobslead generationautomationnaukrifeed
$0.00049
per result + $0.005 call
plus $0.001 platform fee per run
Actor charges $0.00039 per result; Cracked adds 25% plus a $0.005 call fee
Bring your own Apify Store key: provider portion drops to $0.
$Set up https://cracked-ai-pearl.vercel.app/SKILL.md, then use Cracked to run apify /blackfalcondata/naukri-jobs-feed for me.
Input
| Field | Type | Description |
|---|---|---|
| keyword | string | Canonical job search keyword (e.g. 'python developer', 'data analyst'). Not required if jobIds, startUrls, companyGroupIds, or searchQueries is provided. Compatibility: `query` is accepted as an alias for `keyword`. |
| searchQueries | array | Run one search task per entry — useful for batching related searches in a single run. `maxResults` is a GLOBAL cap across the union of all queries (not per-query); under that cap, earlier queries in the list have scheduling priority. Whitespace-only entries are ignored, and exact duplicates are deduplicated (preserving order of first occurrence). Mutually exclusive with `keyword`: if both are supplied, canonical `keyword` wins and searchQueries is ignored. Results dedupe by jobId across queries. |
| skills | array | Filter by skill names (e.g. ['Python', 'Django', 'AWS']). Appended to the search keyword for server-side matching. |
| jobIds | array | Fetch specific jobs by their Naukri job IDs (skips keyword search). Each ID is fetched individually. |
| startUrls | array | Paste any naukri.com URL straight from your browser. Four shapes work: (1) single-job pages like https://www.naukri.com/job-listings-...-220426501512, (2) search-results like https://www.naukri.com/jobs?keyword=devops&location=mumbai, (3) 'X jobs in Y' SEO URLs like https://www.naukri.com/python-developer-jobs-in-bangalore (optionally -1-to-3-years), and (4) keyword-only SEO URLs like https://www.naukri.com/python-developer-jobs. Mix freely with keyword and jobIds; results dedupe by jobId. |
| ignoreUrlFailures | boolean | When true (default), unparseable startUrls are logged and skipped. When false, the run fails fast on the first bad URL. default true |
| location | string | Filter by location (e.g. 'Bangalore', 'Mumbai', 'Delhi') |
| experience | string | Convenient shortcut for the experience filter. Accepts ranges like "0-1", "3-6", "10-15", open-ended "5+", a single integer like "2", or labels: fresher, entry, junior, mid, senior, lead. Fans out to experienceMin + experienceMax. If you also supply experienceMin/experienceMax, those win. |
| experienceMin | integer | Minimum years of experience. Most users should set the `experience` shortcut above instead — only use this for explicit numeric control. |
| experienceMax | integer | Maximum years of experience. Most users should set the `experience` shortcut above instead — only use this for explicit numeric control. |
| salary | string (0to3 | 3to6 | 6to10 | 10to15 | 15to25 | 25to50) | Salary range filter in lakhs per annum. Note: Naukri's API does not enforce this filter strictly — many matched jobs still hide their actual salary (salaryDetail.hideSalary=true). |
| sortBy | string (relevance | date) | Sort results by relevance or posting date |
| workMode | string (office | remote | hybrid | temporary_wfh) | Filter by work arrangement |
| freshness | integer | Only show jobs posted within this many days (1, 3, 7, 15, or 30). Compatibility: `freshnessInDays` is accepted as an alias. |
| datePosted | string | Convenient shortcut for the freshness filter. Accepts integer days ("7"), shorthand like "24h", "7d", "30d", or labels: today, yesterday, week, fortnight, month, quarter (the last|past|this prefix is tolerated, e.g. "last_week"). Coerces to integer days. If you also supply freshness, that wins. |
| roleCategory | string | Post-filter by role category (e.g. 'Software Engineering', 'Data Science', 'Sales'). Partial match, case-insensitive. Requires fetchDetails. |
| industry | string | Post-filter by industry (e.g. 'IT Services', 'Banking', 'Healthcare'). Partial match, case-insensitive. Requires fetchDetails. |
| cityTypeGid | integer | Filter by Naukri city ID (e.g. 97 for Bengaluru, 17 for Hyderabad, 139 for Pune). Stronger filter than the free-text 'location' field. IDs come from the citiesGid cluster in taxonomy_clusters.json. |
| groupId | integer | Filter to a single company group (e.g. 10476 for Accenture, 223346 for TCS). IDs come from the topGroupId cluster in taxonomy_clusters.json. |
| companyId | integer | Filter to a specific company entity (e.g. 1354 for Virtusa, 6762 for Conduent). Different ID-space from groupId — companyId targets a single entity, groupId targets a parent group with subsidiaries. IDs come from the featuredCompanies cluster. |
| companyGroupIds | array | Crawl multiple company groups in parallel by ID. Each ID becomes its own search seed with independent pagination. IDs from the 1892-company prefetch seed (taxonomy_seed_v4.json) are verified compatible. Mutually exclusive with single groupId. |
| companyType | array | Server-side filter by company type (multi-select). Common IDs: 213=Foreign MNC, 211=Corporate, 217=Indian MNC, 62=Startup, 215=Govt/PSU, 60=MNC. Best-effort — Naukri's mobile API may interpret inconsistently. |
| postedBy | string (Both | Company | Consultant) | Filter by who posted the job. Verified client-side via the `consultant` field — reliable. "Company" drops recruiter/consultant listings (recruiter-spam-filter); "Consultant" keeps only consultant-posted; "Both" (default) returns all. |
| departmentIds | array | Server-side filter by department (multi-select). E.g. 5=Engineering-SW&QA, 3=Data Science, 14=Sales. See Naukri's filter list for full ID set. Best-effort. |
| roleCategoryIds | array | Server-side role-category filter via Naukri's roleCategoryGid (e.g. 1028=Software Development, 1067=Data Science). Distinct from `roleCategory` text filter (which is client-side post-filter on detail). Use IDs for fast server-side narrowing. Best-effort. |
| ugCourse | array | Filter by undergraduate course/degree (multi-select). E.g. "37"=B.Com, "5"=B.Tech. Niche filter for university recruiting. |
| pgCourse | array | Filter by postgraduate course/degree (multi-select). E.g. "8"=MBA, "22"=M.Tech. |
| stipend | array | Filter internship listings by stipend bracket. Naukri taxonomy IDs. |
| duration | array | Filter internship listings by duration bracket. Naukri taxonomy IDs. |
| topCompanies | array | Filter to Naukri's curated top-employer lists (multi-select). Naukri taxonomy IDs. |
| fetchDetails | boolean | Fetch full job details. Enables: description, roleCategory, functionalArea, jobRole, employmentType, educationUG, educationPG, applyCount, vacancy, workMode, companyDescription, companyWebsite, plus AmbitionBox reviews/salaries/benefits and walk-in details. Slower — one extra request per job. |
| maxResults | integer | Maximum number of jobs to return (0 = unlimited). Compatibility: `limit` and `maxItems` are accepted as aliases. default 25 |
| compact | boolean | Return only core fields (jobId, title, company, location, salary, experience, skills, createdDate, portalUrl, description). Ideal for AI agents and MCP workflows. default false |
| excludeEmptyFields | boolean | Drop null / empty-string / empty-array fields (and fully-null nested objects) from each output record. Off by default to preserve dataset schema compatibility; turn on to slim output for LLM / agent consumption. default false |
| descriptionMaxLength | integer | Truncate job descriptions to this many characters (0 or empty = no truncation) |
| incremental | boolean | Only return new or changed jobs since last run (state scoped per keyword+location). Tracks NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED classifications across runs. |
| stateKey | string | Override the incremental state key. By default scoped to keyword+location. Use this to isolate state for different workflows using the same query. Concurrent runs with the same stateKey are blocked by a soft 30-min lock to prevent state corruption. |
| skipReposts | boolean | Exclude listings detected as reposts of previously seen jobs (matched by content hash). default false |
| emitUnchanged | boolean | Incremental only — also emit jobs that are still in the SERP but whose tracked content has not changed since last run. default false |
| emitExpired | boolean | Incremental only — also emit jobs that were present last run but are gone this run (marks them as EXPIRED). default false |
Call it
curl
curl https://cracked-ai-pearl.vercel.app/v1/run \
-H "Authorization: Bearer ck_live_..." -H "content-type: application/json" \
-d '{"provider":"apify","endpoint":"/blackfalcondata/naukri-jobs-feed","input":{"keyword":"python developer","maxResults":3,"maxConcurrency":3,"descriptionFormat":"all"},"wait":false}'poll
curl "https://cracked-ai-pearl.vercel.app/v1/runs/<runId>?wait=30" -H "Authorization: Bearer ck_live_..."cli
npx cracked-ai run -p apify -e /blackfalcondata/naukri-jobs-feed -i '{"keyword":"python developer","maxResults":3,"maxConcurrency":3,"descriptionFormat":"all"}' -w 120mcp
run_tool({ provider: "apify", endpoint: "/blackfalcondata/naukri-jobs-feed", input: {"keyword":"python developer","maxResults":3,"maxConcurrency":3,"descriptionFormat":"all"}, wait: false })Try it
Runs against your signed-in workspace balance. Sign in if you have not.