Naukri Jobs Scraper
Search public Naukri job listings by keyword and location. No login and no API key. You only pay for the rows that actually arrive.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchQueries,locations,experience(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00038 per job = $0.38 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Job | One job listing: title, company, location, employment type, salary where shown, skills, posting age and the apply URL. Listings Naukri returns that do not match your query are dropped and never charged. | $0.00038 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-22, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchQueries | Naukri keywords or job titles. | array |
locations | Optional Indian city or region names. | array |
experience | Optional visible experience label to retain, for example 3-5 Yrs. | string |
workModes | Only jobs Naukri lists as work from office, hybrid or remote. A job in any of the modes you pick comes back. | array |
companyTypes | Only jobs from these kinds of employer, as Naukri files them. | array |
roleCategories | Only jobs in these role categories, as Naukri files them. A job in any of the ones you pick comes back. | array |
industries | Only jobs from employers in these industries, as Naukri files them. A job in any of the ones you pick comes back. | array |
postedBy | Jobs posted by the hiring company itself, or by a recruitment consultant on its behalf. | string |
internshipDurations | Only internships of these lengths. Picking one leaves regular jobs out. | array |
maxItems | Maximum unique jobs to return. | integer |
maxPagesPerSearch | Maximum search-result pages per keyword and location. | integer |
requestTimeoutSecs | Maximum duration of one direct or browser request. | integer |
includeDetails | Retain public listing snippets when returned by Naukri search. | boolean |
useBrowserFallback | When direct HTTP is refused, use Naukri's public browser flow instead. | boolean |
maxProxyRetries | How many browser sessions to retry after a block. | integer |
What you get
A structured dataset — each result includes fields like:
titlecompanylocationexperiencesalarypostedAturlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Naukri Jobs Scraper: public job listings from India, by keyword and city
Search Naukri by keyword, optionally narrowed to Indian cities, and get one row per job. 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 login and 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, and optionally Indian cities |
| Output | One row per job |
| Ceiling | 1,000 jobs per run |
| Account needed | None, and no Naukri login |
| Price | $0.38 per 1,000 jobs on the free plan, less on paid plans |
🔍 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.
Listings Naukri hands back that do not actually match what you asked for are dropped before anything is charged. That matters on Naukri, where a thin search gets padded out with unrelated roles. The same goes for a place or a set of filters Naukri has no job for: it answers with looser listings from elsewhere, and the actor leaves every one of them out and writes a NO_RESULTS row.
Paging stops at your page limit, at your item limit, at an empty page, or at the first page that brings back nothing new.
📥 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. |
experience | none | An experience label to keep, written the way Naukri writes it, such as 3-5 Yrs. |
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. |
maxItems | 100 | 1 to 1,000 unique jobs across every search. |
maxPagesPerSearch | 5 | 1 to 25 pages per keyword and location pair. |
requestTimeoutSecs | 35 | 10 to 90 seconds for one request. |
includeDetails | on | Keeps the public listing snippet that comes back with the search card. |
useBrowserFallback | on | Lets a refused search try again another way. Leave it on; turning it off makes short runs more likely. |
maxProxyRetries | 1 | 0 to 3 further attempts after a refusal. |
proxyConfiguration | none | Optional network settings. Your own servers, if you give any, are used exactly as supplied. |
Do not search with a term where every word is under three letters. QA, HR and UI switch the relevance filter off, and unrelated listings then come back and are charged. Write QA engineer or HR manager instead.
📤 What you get back
A real row from a recent run, with the snippet and the URL cut short:
{
"ok": true,
"charged": true,
"jobId": "120926013305",
"title": "Python Developer",
"company": "Infosys",
"location": "Hybrid - Hyderabad, Bengaluru, Delhi / NCR",
"experience": "5-8 Yrs",
"salary": "Not disclosed",
"skills": ["python", "Numpy", "sql", "Pandas", "etl", "Automation", "..."],
"postedAt": "2026-09-12T10:06:08.296Z",
"description": "We are looking for an experienced Python Developer with 5-8 years ...",
"url": "https://www.naukri.com/job-listings-python-developer-infosys-hyderabad-...",
"query": "python developer",
"searchLocation": null,
"source": "direct-http+token"
}
| Field | What it is |
|---|---|
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. |
experience | The band as Naukri shows it, like 5-8 Yrs. Text, not numbers. |
skills | The tags on the listing card, as an array. |
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. Empty when includeDetails is off. |
location | One string, exactly as shown, so a multi-city listing stays one row. |
query, searchLocation | Which of your searches produced this row. searchLocation is null on a nationwide search. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| 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. BLOCKED is the one you will actually see: Naukri refused that search, and nothing from it was delivered or charged. The row also records which search it was and how far it had got. NO_RESULTS means Naukri had nothing for that search's place and filters. BAD_INPUT means a filter value is not on Naukri's own list, so the run stopped before searching.
▶️ How to run it
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?
$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.
You pay per job row delivered. Duplicates across your searches, listings dropped for not matching your query, the sample row and diagnostic rows are all free.
💡 What people use it for
- Recruiters watching which companies are hiring for a stack in Bengaluru or Hyderabad this week.
- Job boards pulling Indian listings on a schedule and deduplicating on
jobId. - Tracking the skills tags that keep appearing against a role, straight out of
skills. - Comparing experience bands being asked for across cities, using
experience. - Building a company shortlist by running an employer name as the keyword.
🚧 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.
- No logins, no applications, no candidate data. Public listings, read the way a visitor sees
them.
- 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 is refused you get
an uncharged diagnostic rather than filler.
- Rows land at the end of the run, which has a 15 minute ceiling. A very large search can run
out of time and deliver nothing, so keep maxItems and maxPagesPerSearch sensible and run more often instead.
- 1,000 jobs per run is the hard ceiling. 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.
🧭 Which jobs scraper do you need?
| If you want | Use |
|---|---|
| Jobs on Naukri in India | This one |
| Gulf jobs from Naukrigulf | Naukrigulf Jobs Scraper |
| Jobs in Australia and New Zealand | SEEK Jobs Scraper |
| Jobs across 11 countries on Indeed | Indeed Jobs Scraper |
| Jobs posted on LinkedIn | 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.
Why is salary "Not disclosed" on most rows? Because that is what the employer published. It is the site's own wording, kept as it stands.
Can I search several cities at once? Yes. Every keyword runs against every location, and the results are deduplicated on job ID before anything is charged.
Can I get the full job description? Not the full page. You get the public snippet from the search card when includeDetails is on.
Is scraping job listings 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. Apify's write-up on scraping and the law 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.