Naukri Jobs Scraper
Pricing
from $0.26 / 1,000 jobs
Naukri Jobs Scraper
Scrape public Naukri jobs in India by keyword, city or a pasted search link. Rows carry the title, company, salary and experience as numbers, skills, employer rating and apply link. Filter by experience, salary, company, department or skills. $0.38 per 1,000 jobs on the free plan, less on paid ones.
Pricing
from $0.26 / 1,000 jobs
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
Scrape public Naukri job listings in India by keyword and city, no login: one row per job with the title, company, location, the experience band, salary where the employer published it, the skills tags, when it went up, the listing snippet and the public apply URL. No Naukri account.
The honest part: some runs come back shorter than you asked for, because Naukri limits what it serves. You only pay for the rows that actually arrive, and a run that comes back light is a real outcome rather than a fault you can configure away.
| Input | Keywords or pasted Naukri search links, and optionally Indian cities and Naukri's own filters |
| Output | One row per job: title, company, location, experience band and years, salary label and numbers, skills, posted time, snippet as HTML and as plain text, employer rating, URL |
| Ceiling | 5,000 jobs per run, 150 pages per search |
| Account needed | None, and no Naukri login |
| Price | $0.38 per 1,000 jobs on the free plan, falling to $0.26 on Gold and above. The free plan's $5 a month covers about 13,100 |
🔍 What Naukri Jobs Scraper does
Every keyword is searched against every location you give it, so two queries and three cities is six searches. Results are deduplicated on Naukri's own job ID across all of them, so the same listing appearing under two keywords costs you once.
A job is kept only when every word of your search appears in its title, skills or company name, so
python developer does not bill a Java developer job that never mentions Python. Naukri pads a
thin search with unrelated roles, and answers a place or filters it has no job for with looser
listings from elsewhere. The actor leaves all of those out, free, and writes a NO_RESULTS row for
the second kind.
Work mode, company type, role category, industry, department, company, salary band, years of
experience, who posted it, internship length, stipend and postedWithinDays are Naukri's own
filters, applied by Naukri, and every job that comes back is checked against them again: one that
does not fit is left out, free. experience and skills check the rows after they arrive.
Paging stops at your page limit, at your item limit, at Naukri's last page, or once two pages in a row bring back nothing new.
📋 What data you get from each Naukri job
| What you get | Field |
|---|---|
| Naukri's job ID and the public listing URL | jobId, url |
| Title and company | title, company |
| Location, as one string, and hybrid or remote when the label says so | location, workMode |
| The experience band, and as years | experience, experienceMinYears, experienceMaxYears |
| The salary as published, often "Not disclosed", and as numbers | salary, salaryMin, salaryMax, salaryCurrency, salaryHidden |
| The skills tags on the card | skills |
| When it went up | postedAt |
| The listing snippet, as Naukri's HTML and as plain text | description, descriptionText |
| Company ids, logo and its jobs page on Naukri | companyId, companyGroupId, companyLogoUrl, companyJobsUrl |
| Openings, walk-in flag, role category | openings, walkIn, roleCategory |
| The employer rating and review count on the card, and the site it credits for them | employerRating, employerReviewCount, employerRatingSource |
| Which of your searches found it | query, searchLocation |
| Row markers | ok, charged, source |
| Optional: when your saved list first and last saw it, and whether Naukri reposted it | firstSeenAt, lastSeenAt, isRepost |
| Optional: e-mails and phone numbers printed in the job ad | contactsFromJobAd |
▶️ How to scrape Naukri jobs
- Open Naukri Jobs Scraper and click Try for free.
- Put your keywords into Search queries, one per line.
- Add Indian cities to Locations, or leave it empty for the whole country.
- Leave Maximum jobs at 100 for a first run, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost to scrape Naukri jobs?
$0.38 per 1,000 jobs on the free plan. It falls with your Apify plan: $0.34 on Bronze, $0.30 on Silver, and $0.26 on Gold, Platinum and Diamond. On the free plan, the $5 Apify gives you each month covers about 13,100 jobs.
You pay per job row delivered. Duplicates across your searches, listings dropped for not matching your query, a filter or your skills, jobs an earlier run already delivered when you ask for new ones only, the sample row and diagnostic rows are all free. If you set a maximum cost for the run, it stops when that is reached.
📥 What you give it
{"searchQueries": ["python developer", "data engineer"],"locations": ["Bengaluru", "Hyderabad"],"maxItems": 200,"maxPagesPerSearch": 5}
| Field | Default | What it is |
|---|---|---|
searchQueries | empty list | Keywords or job titles. The Console box starts at python developer; an API call has to send its own. |
locations | empty list | Indian city or region names. Leave it empty to search the whole country. |
searchUrls | none | Naukri search result links, pasted as they are. The keyword, place and filters are read from each link, and each link is its own search; the form's filters apply to searchQueries only. The search starts at page 1 whatever page the link shows. A link with a setting this actor does not read, such as the education filters or Naukri's date order, stops the run before anything is searched. |
experience | none | An experience label to keep, written the way Naukri writes it, such as 3-5 Yrs. |
experienceYears | none | 0 to 30. Only jobs whose experience range takes in that many years, applied by Naukri and checked on every job. |
salaryBands | none | Yearly bands by Naukri's ids: 0to3, 3to6, 6to10, 10to15, 15to25, 25to50, 50to75, 75to100 lakhs, 100to500 for 1-5 Cr, 501 for 5+ Cr. Jobs that hide their salary are kept, as Naukri's own filter keeps them; a published salary outside your bands is left out. |
departments | none | Naukri's 37 departments, by name in the form and by id through the API, such as 5 for Engineering - Software & QA. |
companyIds, companyGroupIds | none | Naukri's numeric ids, from the companyId and companyGroupId of an earlier run's rows. |
stipends | none | Monthly internship stipends: unpaid, 0To10, 10To20, 20To30, 30To40, 40To50, 50To1 (50k and above). Setting it returns internships only. |
skills | none | Skills to look for in each job's skills tags. Every word of a skill has to be in one tag, so django matches "Django Framework". |
skillsMatch | any | any keeps a job with one of your skills, all only a job with every one. If fewer than 2 of a search's first 100 jobs have them, that search stops with a free FEW_MATCHES row. |
sortBy | relevance | date puts the jobs this run collected newest first. They are held until the reading is done and written together at the end. |
workModes | none | office, hybrid or remote, as Naukri lists the job. Pick more than one to get any of them. |
companyTypes | none | Kinds of employer, by Naukri's own ids: 213 Foreign MNC, 217 Indian MNC, 211 Corporate, 62 Startup, 219 Unicorn, 60 MNC, 215 Govt/PSU, 63 Others. |
roleCategories | none | Naukri's 166 role categories. The input form lists them by name; through the API send their ids, such as 1028 for Software Development. |
industries | none | Naukri's 83 industries, by name in the form and by id through the API, such as 110 for Software Product. |
postedBy | any | company for jobs the employer posted itself, consultant for jobs a recruitment consultant posted. |
internshipDurations | none | Internship length in months, 1 to 6, or -1 for flexible. Setting it returns internships only. |
postedWithinDays | ANY | 1, 3, 7, 15 or 30 days. Naukri counts whole days in Indian time, so 1 means today and yesterday. |
maxItems | 100 | 1 to 5,000 unique jobs across every search. |
maxPagesPerSearch | 5 | 1 to 150 pages per keyword and location pair, 20 jobs a page. Naukri shows no search past page 150. |
requestTimeoutSecs | 35 | 10 to 90 seconds for one request. |
includeDetails | on | Keeps the public listing snippet that comes back with the search card, in description and descriptionText. |
includeAdContacts | off | Adds contactsFromJobAd: e-mail addresses and phone numbers exactly as the employer printed them in the job ad's text. They can be personal data, so keep only what you need; privacy and anti-spam laws decide how anyone may be contacted. |
stateName | none | A name for the list of jobs the actor remembers between runs, such as python-bengaluru-daily. Letters, digits and dashes. Rows then carry firstSeenAt, lastSeenAt and isRepost. Runs with the same name share the list, kept in a storage of that name on your own account. |
onlyNewSinceLastRun | off | Leaves out, free, every job an earlier run with the same stateName delivered. A job Naukri reposts keeps its id, so it counts as seen. |
useBrowserFallback | on | Gives a search a second chance when the first attempt does not answer. On by default; turning it off makes short runs more likely. |
maxProxyRetries | 1 | 0 to 3 further attempts when a search did not answer. |
proxyConfiguration | none | Optional. A normal run does not need it. |
Every word you search for has to be on the job. Short ones count too, so QA engineer or
.NET developer keep only those jobs, while small words like in, for and jobs are ignored.
python developer leaves out a "Python Backend Engineer", so search python alone for every Python
job, and put cities and work modes in Locations and Work mode, not in the search words.
📤 What you get back
A real row read on 17 October 2026, with the snippet, its text copy and the URL cut short:
{"ok": true,"charged": true,"jobId": "121026012069","title": "Python Software Gen Ai Developer","company": "Tredence","location": "Hybrid - Bengaluru(Kadubeesanahalli), Hyderabad, Pune","experience": "5-8 Yrs","salary": "25-30 Lacs PA","skills": ["generative ai", "React.js", "llm", "Python", "azure", "Langchain"],"postedAt": "2026-10-12T09:18:07.043Z","description": "<br /><p>Job Description Python Full Stack Engineer (React JS & GenAI)</p> ...","url": "https://www.naukri.com/job-listings-python-software-gen-ai-developer-tredence-...","query": "python developer","searchLocation": "bengaluru","descriptionText": "Job Description Python Full Stack Engineer (React JS & GenAI)\n\nJob Title: ...","salaryMin": 2500000,"salaryMax": 3000000,"salaryCurrency": "INR","salaryHidden": false,"experienceMinYears": 5,"experienceMaxYears": 8,"companyId": "1360722","companyGroupId": "1713408","companyLogoUrl": "https://img.naukimg.com/logo_images/groups/v1/1713408.gif","companyJobsUrl": "https://www.naukri.com/tredence-jobs-careers-1360722","openings": null,"workMode": "hybrid","walkIn": false,"roleCategory": "Software Development","employerRating": 3.3,"employerReviewCount": 841,"employerRatingSource": "ambitionbox.com"}
| Field | How to read it |
|---|---|
jobId | Naukri's own ID. Stable, and the deduplication key across runs. |
salary | What the employer published. On Naukri that is very often the literal string Not disclosed, which is a value, not a missing field. |
salaryMin, salaryMax | Rupees a year, as the employer entered them. null when the salary is hidden (salaryHidden: true). |
experience | The band as Naukri shows it, like 5-8 Yrs. experienceMinYears and experienceMaxYears give it as numbers. |
postedAt | A real timestamp when Naukri gives one, otherwise the label it displayed. |
description | The public snippet from the search card, and it keeps Naukri's own <br> tags. descriptionText is the same snippet as plain text, line breaks kept. Both empty when includeDetails is off. |
location | One string, exactly as shown, so a multi-city listing stays one row. workMode is hybrid or remote when the label starts that way, otherwise null. |
employerRating, employerReviewCount | The two numbers Naukri's card shows, and employerRatingSource the site the card credits. null when the card has none. |
searchLocation | null on a nationwide search. |
🧾 Reading the output
| Row | How to spot it | Charged |
|---|---|---|
| A job | _sample and _diagnostic both absent, and a jobId | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true and a code | no |
Filter on _sample and _diagnostic being absent. Do not filter on charged: it is stamped on
a row when the row is built, so it is a label for what kind of row this is, not a receipt. And do
not filter on ok alone, because the sample row is ok: true and looks like a real job in the
table.
Diagnostics carry code, not errorCode, and record which search they belong to and how far it
had got.
code | What it means |
|---|---|
NOT_SERVED | This job was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
NO_RESULTS | Nothing for that search: no job had every word of it, Naukri had none for its place and filters, or every job it found was delivered by an earlier run with your stateName. |
FEW_MATCHES | Fewer than 2 of the search's first 100 jobs had your skills, so that search stopped. |
BAD_INPUT | A filter value is not on Naukri's own list, or a search link has a setting the actor does not read, so the run stopped before searching. |
STATE_UNAVAILABLE | The list behind your stateName could not be opened, so the run stopped before searching. Run it again. |
SERVER_ERROR, NETWORK | Naukri answered with an error or could not be reached. Re-run it. |
PROXY_GROUP_IGNORED | A network group in your input is not offered here, so it was ignored and the run carried on. |
TIME_LIMIT | The run reached its time limit before it finished. The jobs found until then are delivered and charged; give it more time for the rest. The run ends as failed only when no job had come back by then. |
💡 What people use it for
- Recruiters watching which companies are hiring for a stack in Bengaluru or Hyderabad this week.
- A daily scheduled run with a
stateNameandonlyNewSinceLastRun, so each morning's dataset holds only what went up since yesterday. - Tracking the skills tags that keep appearing against a role, straight out of
skills. - Comparing pay across cities for one role, from
salaryMinandsalaryMaxwhere employers publish them.
🚧 What it does not do
- Search-card fields only. Whatever Naukri puts on the result card is what you get. There is no visit to the full job page.
- Nothing behind sign-in. No logins, no applications, no candidate data: public listings, read the way a visitor sees them.
- No review text. The employer rating and review count are two numbers from Naukri's card. The reviews themselves are not read.
- Salary is often
Not disclosed, because Indian listings frequently omit it. No number is inferred. - Runs can come back short. Naukri limits what it serves, and when a search cannot be read you get an uncharged diagnostic rather than filler.
- A run has 15 minutes by default. Jobs are written as they are found, so a search that runs
out of time keeps them and adds a free
TIME_LIMITrow. Give it more time or split the searches. - 5,000 jobs per run and 150 pages per search. Naukri shows no search past page 150. For more, split by keyword or by city.
experiencematches the visible label, so it only keeps rows whose band is written exactly the way you typed it.experienceYearstakes a number instead.- Newest first only within the run. Naukri's own order is relevance.
- It is not an official Naukri tool. Dami's Studio is independent and is not affiliated with or endorsed by Naukri, or by any other company named on this page.
🧭 Which job scraper do you need?
| If you want | Use |
|---|---|
| Jobs in India by keyword and city, from Naukri | This one |
| Internships and fresher jobs in India, with typed stipends | Internshala Scraper |
| Hackathons, competitions, internships and jobs from Unstop | Unstop Scraper |
| Gulf and wider Middle East jobs from Naukrigulf, with salary and the full description | Naukrigulf Jobs Scraper |
| Public LinkedIn jobs by keyword and location | LinkedIn Jobs Scraper |
❓ Questions people ask
Do I need a Naukri account?
No. A keyword is enough.
Why did I get fewer jobs than I asked for?
Either the search genuinely has fewer, or Naukri served less than it holds. You pay for what arrived, not for what you asked for.
Can I get the full job description?
Not the full page. You get the public snippet from the search card when includeDetails is on, in
description and as plain text in descriptionText.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code
for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/naukri-jobs-scraper. Either way the run
happens on your Apify account at the same price.
Is scraping Naukri legal?
These are public job adverts. They can name real people, which GDPR and India's own data rules
cover, so have a reason for collecting them and keep to a sensible request rate. With
includeAdContacts on, anti-spam laws decide how anyone may be contacted. Apify's write-up on
the legality of web scraping is a good place to
start, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the keyword, the city and the run ID. The code on
the diagnostic row, plus the search it names, usually points straight at the problem.