Naukri Jobs Scraper: Salaries, Skills & New Job Alerts
Pricing
from $0.27 / 1,000 jobs
Naukri Jobs Scraper: Salaries, Skills & New Job Alerts
Get Naukri jobs for keywords and cities, such as Python in Bengaluru or sales in Mumbai: salaries, experience, skills, company rating and work mode. Track new India jobs daily with a watch ID. About $0.00034 per job; 1,000 cost $0.34. Full details included. No login.
Pricing
from $0.27 / 1,000 jobs
Rating
0.0
(0)
Developer
mogged
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
8 days ago
Last modified
Categories
Security
Limited permissionsShare
For recruitment teams, staffing agencies, hiring-market analysts and job-board operators who need repeatable Naukri jobs data from India. Search keywords and cities, export salary and experience ranges, collect skills and company ratings, and keep a daily feed of previously unseen job IDs.
About $0.00034 per delivered job. A 1,000-job export costs $0.34, plus the small run-start fee. Full job details use the same job price. No Naukri login, account cookies, external API subscription or API key is needed.
What you get
Each delivered job is one dataset row. A readable summary comes first, followed by the job title, company, locations, salary disclosure, experience, skills and public posting information. Turn on includeDetails for full job descriptions, education, department, industry, employment type and applicant counts where Naukri supplies them.
An additional free SUMMARY row gives the number of jobs, number newly observed by the selected watch, top companies and the spread of disclosed salaries. A copy is available as the SUMMARY record in the run's default key-value store. Free NOTE rows explain invalid URLs, expired jobs, missing details or source refusals.
This Naukri scraper exports public jobs and company information. It removes contact sections from descriptions and excludes recruiter contact fields, job-seeker profiles, resumes and applications.
Start in three steps
- Enter one or more
keywords, such assoftware engineer,accountantornurse, and optionallocations, such asBengaluru,MumbaiorChennai. - Choose
maxItems. The form prefill requests 20 software-engineering jobs in Bengaluru. Leave details off for the fastest preview, or turn them on for the full posting. - Start the run. Open the Jobs overview or Job details dataset view, then download JSON, CSV or Excel. Filter
recordTypetoJOBwhen loading job rows into another system.
Cloud validation on 29 October 2026 returned 20 jobs in 20 seconds and 20 detailed jobs in 26 seconds. A paginated 100-job run finished in 52 seconds. Timing includes container startup and varies with source and proxy response times.
Input reference
| Input | Type | Meaning |
|---|---|---|
keywords | array of strings | Role names, skills or other search terms. Each keyword is searched in each requested city. |
locations | array of strings | Indian cities. Empty means a national search. Bengaluru/Bangalore and Gurugram/Gurgaon are treated as aliases when checking locations. |
experienceYears | number | Keep jobs whose published experience range contains this number of years. Missing ranges do not pass this filter. |
salaryMinLakh | number | Minimum advertised annual salary in lakh INR. A value of 5 means the advertised lower bound must be at least INR 500,000. Hidden salaries are excluded. |
workMode | string | any, office, remote or hybrid. Office filtering reads details to verify the mode. |
postedWithinDays | integer | Maximum posting age in days, checked against the source timestamp. |
companies | array of strings | Case-insensitive company-name filters, such as Infosys. This narrows search results; it is not an exhaustive company-directory crawl. |
startUrls | array | Optional Naukri search or individual job URLs. Accepts URL strings and objects containing a url field. |
maxItems | integer | Global maximum unique delivered jobs across all inputs, up to 10,000. The form prefill is 20; the runtime default is 100. |
includeDetails | boolean | Add the full posting fields. Default false. No additional detail event is charged. |
onlyNewSinceLastRun | boolean | Skip IDs delivered by earlier runs of the same watch. Requires watchId. Default false. |
watchId | string | A persistent watch name. Use a different name for a separate monitoring workflow. |
proxyConfiguration | object | Optional Apify proxy configuration. Default is datacenter, with India residential as the final retry. Set useApifyProxy: false for direct HTTP. |
The limits apply across the union of all queries. Earlier inputs have priority when they fill the global cap. Search matches are deduplicated by Naukri job ID before delivery and charging. A job returned by two keywords or repeated URLs produces one job row.
Salary and experience research
{"keywords": ["accountant"],"locations": ["Mumbai"],"experienceYears": 3,"salaryMinLakh": 2,"maxItems": 50,"includeDetails": true}
A strict combination can return fewer than maxItems. The Actor does not relax salary, experience, work-mode or city filters to fill a quota. It reports how many candidates were inspected and excluded in the summary.
Search and individual-job URLs
{"startUrls": ["https://www.naukri.com/python-jobs-in-bangalore",{"url": "https://www.naukri.com/jobs?keyword=sales&location=Mumbai"}],"maxItems": 40}
Individual job-listings-...-<12-digit ID> URLs are supported too. Direct-job inputs read the full job record, even when includeDetails is off. Keywords and URL inputs can be combined. Only HTTPS URLs on Naukri's main or mobile web host are accepted; other domains become free notes.
Output fields
| Field | Meaning |
|---|---|
recordType | JOB, NOTE or SUMMARY. |
summary | A short readable job or run summary. |
jobId | Naukri's job identifier, preserved as a string. |
title | Public job title. |
company, companyId | Employer or staffing company shown by Naukri and its public identifier. |
companyRating, companyReviewCount | Aggregate AmbitionBox company information embedded in Naukri's response, when present. |
locations | Published cities or location labels. A listing can have several. |
workMode | office, remote, hybrid, or null when the source does not identify it. |
experienceMin, experienceMax | Published experience range in years. |
salaryMin, salaryMax | Numeric annual salary in INR, when disclosed. These are rupees, not lakh units. |
salaryCurrency | Currency supplied by the source, usually INR. |
salaryDisclosed | Whether a usable public salary is disclosed; unknown remains null. |
skills | Unique published skill labels. |
postedAt | ISO UTC timestamp from Naukri's posting date. |
postedAgoText | Source text such as 1 Day Ago, when supplied by search. |
applicants | Public apply count from details, when shown. |
isNewSinceLastRun | Whether this ID was absent from this watch's prior delivered IDs. Without a watch, rows are new to this run. |
description | Full plain-text description with contact sections removed, when details are fetched. |
education | Undergraduate, postgraduate and doctorate requirements from details. |
industry, department | Public industry and functional area. |
roleCategory, employmentType | Published role grouping and employment type. |
url, applyUrl | Public job page and application route. The job page is used when no separate supported application URL is supplied. |
scrapedAt | UTC timestamp fixed at run startup for a consistent snapshot. |
detailStatus | complete, not_requested or unavailable. |
Unknown fields stay null; missing salaries are never converted to a zero salary. Company ratings describe the employer. Applicant counts can change during a run; use postedAt for time comparisons.
Real listing example
A software-engineering search in the 29 October 2026 cloud tests returned this job. The sample below selects core fields from the actual result; production rows contain the full schema above.
{"recordType": "JOB","jobId": "271026030758","title": "XR- Software Engineer","company": "Qualcomm","locations": ["Bengaluru"],"experienceMin": 0,"experienceMax": 3,"salaryMin": 2000000,"salaryMax": 3500000,"salaryCurrency": "INR","salaryDisclosed": true,"companyRating": 3.6,"isNewSinceLastRun": true}
This is a historical example, not a promise that the same listing remains active or has the same counts on a later run.
Monitor new Naukri jobs every day
Use a stable watch name and keep its search inputs consistent:
{"keywords": ["python developer"],"locations": ["Bengaluru"],"postedWithinDays": 7,"onlyNewSinceLastRun": true,"watchId": "bengaluru-python-daily","maxItems": 100,"includeDetails": true}
The first run delivers its initial set and records those IDs. Later runs use newest-first ordering and skip IDs already delivered by this watch. Only newly delivered jobs incur the job charge. A quiet run can have zero job rows and a free summary, with only the platform's small start fee.
Save the input as an Apify task, create a daily schedule in the Console, and choose that task. Start once a day, then send the dataset to Sheets, a database, Make, Zapier or n8n through your existing Apify integration or webhook. The Actor itself does not send messages.
History is stored in a named key-value store scoped to this Actor, your Apify user and watchId. Use distinct watch names for independent searches. Do not overlap runs for the same watch; a short-lived guard rejects an already active watch. Change watchId to start a fresh baseline. Job IDs are the comparison unit: edits to an existing posting do not make it a new job.
The scan is bounded to avoid endlessly searching for a rare match: up to ten times maxItems, with a minimum of 200 candidates and a maximum of 10,000. Search pagination also stops at 100 pages per query. A daily watch is a recent feed, not an exhaustive change-history or expired-job tracker. Narrow searches can be monitored more completely than a national all-jobs query.
Price and spending limits
| Delivered jobs | Job price before plan discounts |
|---|---|
| 20 | $0.0068 |
| 100 | $0.034 |
| 1,000 | $0.34 |
| 10,000 | $3.40 |
The start fee is $0.001 per memory GB, with a minimum of one unit. The normal HTTP run uses 512 MB, so one start unit applies. Bronze has 5% off the job price, Silver 10%, and Gold 20%; the Console displays your applicable price. Full details are included in the same job price.
Only unique delivered job rows are charged. Duplicate matches, rejected filters, previously seen watch IDs, expired job responses, missing sources, retries, notes and summary rows have no job charge. The Actor checks the remaining maximum charge before delivering the next row and stops cleanly when there is no room. A saved row is reconciled with platform event counts after a reboot so it is not delivered or charged twice.
Use through the API
Use your Apify token as an environment variable. This token authenticates to Apify; it is not a Naukri login. Keep it out of public input examples and shared files.
curl -X POST \'https://api.apify.com/v2/acts/moggedhq~naukri-jobs-scraper/run-sync-get-dataset-items' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"keywords":["data analyst"],"locations":["Pune"],"maxItems":20}'
For larger jobs, start asynchronously with /runs, poll the run, then download defaultDatasetId. Import jobId as text to preserve leading zeroes.
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("moggedhq/naukri-jobs-scraper").call(run_input={"keywords": ["accountant"],"locations": ["Mumbai"],"maxItems": 20,"includeDetails": True,})jobs = [row for row in client.dataset(run["defaultDatasetId"]).iterate_items()if row.get("recordType") == "JOB"]
Use with AI agents (MCP)
Connect your agent to https://mcp.apify.com, add this Actor by its identifier, and ask for a concrete export: "Get 20 Naukri Python jobs in Bengaluru with salary disclosure, skills and company rating." The agent should pass keywords, locations and maxItems, then retrieve the resulting dataset.
For recurring work, ask the agent to reuse the same watchId and onlyNewSinceLastRun: true. Request details only when the full posting is needed. Tell the agent to read the run summary and free notes before treating an empty dataset as proof that no jobs exist. Source refusals and a quiet watch have different summary statuses.
Limits and source behavior
- This Actor covers Naukri.com India. Naukrigulf is not included.
- Search is the source's relevance search, not an exact phrase index. Results and ordering can change during pagination.
- Listing-only responses do not always identify office work mode. An unspecified mode remains null. A work-mode filter excludes unverified values.
- Salary filtering is strict and uses disclosed advertised lower bounds. It does not estimate compensation or infer hidden salaries.
- Source posting timestamps can reflect refreshed listings. Daily newness is based on a previously unseen ID, not a guarantee that a vacancy was first created today.
- Full descriptions omit contact sections. Some source postings are short, incomplete or no longer active.
- Individual source failures are free notes and do not remove other successful rows. Check
detailStatusand the summary for partial results. - No account login, account cookies, CAPTCHA solving, challenge service or external paid data provider is used. The Actor reads Naukri's public signed-out mobile data interface.
- Naukri's terms restrict scraping and automated access. Review the current source terms and obtain any permission required for your use. This Actor is independent and is not affiliated with Naukri or Info Edge.
FAQ
Is this an official Naukri API?
No. It is an independent export tool that reads public Naukri jobs and returns a stable dataset schema through Apify. There is no Naukri developer credential to configure.
Why are there fewer jobs than maxItems?
A filter may exclude candidates, a posting may expire, the source may return fewer matches, a watch may already have seen the IDs, the scan cap may be reached, or your spending limit may stop the run. Read the free summary and notes.
Does includeDetails cost more per job?
No. It adds requests and run time, but the job event price is the same. A failed enrichment retains a listing with detailStatus: unavailable; it does not invent a description or create an extra detail charge.
Can I monitor several cities together?
Yes. Supply several locations. Each keyword is searched in each city until the global result cap is reached. Use separate scheduled tasks when each city must receive its own independent quota.
Does the daily mode report edits or expired vacancies?
No. It reports IDs that this watch has not delivered before. Existing IDs remain seen even if their content changes or they disappear from the current results.
What happens after an Actor reboot?
The run reloads its saved search-page snapshot and existing dataset, reconciles saved rows with authoritative job-charge counts, and skips completed IDs. It continues until the requested cap or spending limit is reached.
Can I get recruiter contact lists?
No. The output focuses on public jobs and companies. Recruiter names, personal contact fields, emails, phone numbers and job-seeker information are outside this Actor's output.
Naukri jobs, Naukri scraper and India jobs exports for repeatable hiring research and daily monitoring.