Naukri Jobs Scraper avatar

Naukri Jobs Scraper

Pricing

from $0.26 / 1,000 jobs

Go to Apify Store
Naukri Jobs Scraper

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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

4 days ago

Last modified

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.

InputKeywords or pasted Naukri search links, and optionally Indian cities and Naukri's own filters
OutputOne 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
Ceiling5,000 jobs per run, 150 pages per search
Account neededNone, 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 getField
Naukri's job ID and the public listing URLjobId, url
Title and companytitle, company
Location, as one string, and hybrid or remote when the label says solocation, workMode
The experience band, and as yearsexperience, experienceMinYears, experienceMaxYears
The salary as published, often "Not disclosed", and as numberssalary, salaryMin, salaryMax, salaryCurrency, salaryHidden
The skills tags on the cardskills
When it went uppostedAt
The listing snippet, as Naukri's HTML and as plain textdescription, descriptionText
Company ids, logo and its jobs page on NaukricompanyId, companyGroupId, companyLogoUrl, companyJobsUrl
Openings, walk-in flag, role categoryopenings, walkIn, roleCategory
The employer rating and review count on the card, and the site it credits for thememployerRating, employerReviewCount, employerRatingSource
Which of your searches found itquery, searchLocation
Row markersok, charged, source
Optional: when your saved list first and last saw it, and whether Naukri reposted itfirstSeenAt, lastSeenAt, isRepost
Optional: e-mails and phone numbers printed in the job adcontactsFromJobAd

▶️ How to scrape Naukri jobs

  1. Open Naukri Jobs Scraper and click Try for free.
  2. Put your keywords into Search queries, one per line.
  3. Add Indian cities to Locations, or leave it empty for the whole country.
  4. Leave Maximum jobs at 100 for a first run, then click Start.
  5. 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
}
FieldDefaultWhat it is
searchQueriesempty listKeywords or job titles. The Console box starts at python developer; an API call has to send its own.
locationsempty listIndian city or region names. Leave it empty to search the whole country.
searchUrlsnoneNaukri 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.
experiencenoneAn experience label to keep, written the way Naukri writes it, such as 3-5 Yrs.
experienceYearsnone0 to 30. Only jobs whose experience range takes in that many years, applied by Naukri and checked on every job.
salaryBandsnoneYearly 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.
departmentsnoneNaukri's 37 departments, by name in the form and by id through the API, such as 5 for Engineering - Software & QA.
companyIds, companyGroupIdsnoneNaukri's numeric ids, from the companyId and companyGroupId of an earlier run's rows.
stipendsnoneMonthly internship stipends: unpaid, 0To10, 10To20, 20To30, 30To40, 40To50, 50To1 (50k and above). Setting it returns internships only.
skillsnoneSkills 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".
skillsMatchanyany 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.
sortByrelevancedate puts the jobs this run collected newest first. They are held until the reading is done and written together at the end.
workModesnoneoffice, hybrid or remote, as Naukri lists the job. Pick more than one to get any of them.
companyTypesnoneKinds 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.
roleCategoriesnoneNaukri's 166 role categories. The input form lists them by name; through the API send their ids, such as 1028 for Software Development.
industriesnoneNaukri's 83 industries, by name in the form and by id through the API, such as 110 for Software Product.
postedByanycompany for jobs the employer posted itself, consultant for jobs a recruitment consultant posted.
internshipDurationsnoneInternship length in months, 1 to 6, or -1 for flexible. Setting it returns internships only.
postedWithinDaysANY1, 3, 7, 15 or 30 days. Naukri counts whole days in Indian time, so 1 means today and yesterday.
maxItems1001 to 5,000 unique jobs across every search.
maxPagesPerSearch51 to 150 pages per keyword and location pair, 20 jobs a page. Naukri shows no search past page 150.
requestTimeoutSecs3510 to 90 seconds for one request.
includeDetailsonKeeps the public listing snippet that comes back with the search card, in description and descriptionText.
includeAdContactsoffAdds 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.
stateNamenoneA 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.
onlyNewSinceLastRunoffLeaves out, free, every job an earlier run with the same stateName delivered. A job Naukri reposts keeps its id, so it counts as seen.
useBrowserFallbackonGives a search a second chance when the first attempt does not answer. On by default; turning it off makes short runs more likely.
maxProxyRetries10 to 3 further attempts when a search did not answer.
proxyConfigurationnoneOptional. 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"
}
FieldHow to read it
jobIdNaukri's own ID. Stable, and the deduplication key across runs.
salaryWhat the employer published. On Naukri that is very often the literal string Not disclosed, which is a value, not a missing field.
salaryMin, salaryMaxRupees a year, as the employer entered them. null when the salary is hidden (salaryHidden: true).
experienceThe band as Naukri shows it, like 5-8 Yrs. experienceMinYears and experienceMaxYears give it as numbers.
postedAtA real timestamp when Naukri gives one, otherwise the label it displayed.
descriptionThe 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.
locationOne 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, employerReviewCountThe two numbers Naukri's card shows, and employerRatingSource the site the card credits. null when the card has none.
searchLocationnull on a nationwide search.

🧾 Reading the output

RowHow to spot itCharged
A job_sample and _diagnostic both absent, and a jobIdyes
The sample row_sample: trueno
A diagnostic_diagnostic: true and a codeno

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.

codeWhat it means
NOT_SERVEDThis job was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED.
NO_RESULTSNothing 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_MATCHESFewer than 2 of the search's first 100 jobs had your skills, so that search stopped.
BAD_INPUTA 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_UNAVAILABLEThe list behind your stateName could not be opened, so the run stopped before searching. Run it again.
SERVER_ERROR, NETWORKNaukri answered with an error or could not be reached. Re-run it.
PROXY_GROUP_IGNOREDA network group in your input is not offered here, so it was ignored and the run carried on.
TIME_LIMITThe 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 stateName and onlyNewSinceLastRun, 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 salaryMin and salaryMax where 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_LIMIT row. 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.
  • experience matches the visible label, so it only keeps rows whose band is written exactly the way you typed it. experienceYears takes 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 wantUse
Jobs in India by keyword and city, from NaukriThis one
Internships and fresher jobs in India, with typed stipendsInternshala Scraper
Hackathons, competitions, internships and jobs from UnstopUnstop Scraper
Gulf and wider Middle East jobs from Naukrigulf, with salary and the full descriptionNaukrigulf Jobs Scraper
Public LinkedIn jobs by keyword and locationLinkedIn 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.

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.