# Naukri Jobs Scraper - Listings, Salary & Skills Data (`webdatalabs/naukri-jobs-pro`) Actor

Scrape Naukri.com job listings by keyword and city: title, company, structured salary, skills, experience, work mode and posting date. Optional full job descriptions and AmbitionBox salary benchmarks. Null-honest salary. Export CSV/JSON. No code.

- **URL**: https://apify.com/webdatalabs/naukri-jobs-pro.md
- **Developed by:** [WebDataLabs](https://apify.com/webdatalabs) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.50 / 1,000 job listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Naukri Jobs Scraper — Listings, Salary & Skills Data

Scrape **Naukri.com** job listings with structured **salary**, **skills**, **experience**, **work mode** and **company** data. Search by keyword and Indian city, filter by experience, work mode and freshness, and export clean JSON/CSV — no code. Optionally pull **full job descriptions** with **AmbitionBox salary benchmarks**, benefits and applicant counts.

Built for recruiters, job-market analysts, and HR-tech teams who need reliable Naukri data with **honest salary handling**. Naukri hides the real pay on most postings — so when it's disclosed you get the exact figure (never a fake `0`), and by enabling **Add market salary** you also get an **AmbitionBox market-salary benchmark** (`marketAvgCtcLpa`) for that role and company on every job.

### What data can I extract from Naukri.com?

Every job returns a flat, single-record row. High-value fields:

| Field | Description |
|-------|-------------|
| `title`, `companyName` | Role and hiring company |
| `salaryMinLpa`, `salaryMaxLpa`, `salaryDisclosed` | Numeric salary in lakhs/annum — `null` + `false` when the employer hid it |
| `marketAvgCtcLpa`, `marketMinCtcLpa`, `marketMaxCtcLpa` | AmbitionBox market-pay benchmark for the role + company (enable **Add market salary**) — the salary signal even when Naukri hides the real number |
| `experienceMinYears`, `experienceMaxYears`, `seniority` | Experience band + a derived seniority level |
| `skills` | Skills/tags list |
| `location`, `workMode` | City and office / hybrid / remote |
| `companyRating`, `companyReviewCount` | AmbitionBox rating and review count |
| `postedDate`, `jobUrl` | Posting date and direct link |

Turn on **Add market salary** (under Advanced) for the benchmark on every job — deduped by company+role and cached across runs. With **Fetch full job descriptions** on, each job also gets `descriptionFull`, `keySkillsPreferred`/`keySkillsOther`, `roleCategory`, `industry`, `benefits`, `vacancy` and `applyCount` (and the market benchmark comes bundled).

Turn on **AI enrichment** to also add an AI `aiSummary`, a distilled `aiRequirements` list, and a normalized `aiSeniorityNormalized` label per job — no API key of your own required.

### Example output

```json
{
  "jobId": "170426030208",
  "title": "Senior Data Scientist",
  "companyName": "Wipro",
  "companyRating": 3.6,
  "companyReviewCount": 66203,
  "salaryDisclosed": true,
  "salaryMinLpa": 27.5,
  "salaryMaxLpa": 42.5,
  "salaryLabel": "27.5-42.5 Lacs",
  "experienceMinYears": 14,
  "experienceMaxYears": 18,
  "experienceLabel": "14-18 Yrs",
  "seniority": "Senior",
  "location": "Pune",
  "workMode": "hybrid",
  "skills": ["Python", "Azure", "AI/ML", "LLM", "AWS"],
  "postedDate": "2026-06-23",
  "jobUrl": "https://www.naukri.com/job-listings-...-170426030208",
  "sourceKeyword": "data scientist",
  "sourceLocation": "pune"
}
```

When the employer hides the salary (most Naukri postings), the record stays honest — and with **Add market salary** on, it still carries a benchmark:

```json
{ "title": "Python Developer", "companyName": "Persistent", "salaryDisclosed": false, "salaryMinLpa": null, "salaryMaxLpa": null, "salaryLabel": null, "marketAvgCtcLpa": 22.5, "marketMinCtcLpa": 18, "marketMaxCtcLpa": 30 }
```

### How to use the Naukri scraper (quick start)

1. Enter one or more **Job keywords** (e.g. `data scientist`, `java developer`).
2. Optionally add **Cities** (e.g. `bangalore`, `mumbai`) — leave empty to search all of India.
3. Set **Max jobs** and, if you like, **Experience**, **Work mode**, or **Posted within**.
4. Run it. Download results as JSON, CSV, or Excel, or pull them via the API.

Minimal input:

```json
{ "keywords": ["data scientist"], "locations": ["bangalore"], "maxJobs": 200 }
```

Recruiter input with full descriptions and market pay:

```json
{
  "keywords": ["backend engineer"],
  "locations": ["bangalore", "hyderabad"],
  "experienceYears": "5",
  "workMode": ["hybrid", "remote"],
  "fetchFullDescription": true,
  "maxJobs": 500
}
```

### How much does it cost to scrape Naukri.com?

This actor uses **pay-per-result** — you only pay for the jobs you actually get. See the pricing shown above for the exact rate. Base listings are the cheapest; **full descriptions** and **AI enrichment** are optional and billed separately, so you never pay for extras you don't use.

### Who is this Naukri scraper for?

- **Recruiters & staffing** — pull roles by skill + city + experience to map who's hiring and at what pay.
- **Job-market & HR analysts** — track hiring volume, salary bands and in-demand skills by role, city and company over time (schedule it with **Only new jobs**).
- **Compensation research** — combine disclosed salaries with AmbitionBox market benchmarks to build pay ranges by role and seniority.
- **Job boards & aggregators** — ingest fresh Indian job supply with clean, structured fields.
- **AI / RAG builders** — feed structured job data (optionally AI-summarized) into search, matching or analytics products.

### Can I filter jobs and monitor new postings?

Yes. Filter by **experience**, **work mode** (office/hybrid/remote) and **posting freshness**, or paste full Naukri search-result URLs under Advanced to scrape exactly the filtered searches you build on the site. Turn on **Only new jobs** and schedule the actor to receive just the postings added since your last run — ideal for daily monitoring.

### Frequently asked questions

#### Is it legal to scrape Naukri.com?

This actor collects **publicly available commercial job postings** (no logins, no personal candidate data). You are responsible for using the data in line with Naukri's terms and applicable laws. It is designed for market research, recruitment and analytics use cases.

#### Does it handle hidden salaries?

Yes — honestly, and it can still give you a salary signal. Naukri hides the real pay on most postings; when that happens `salaryDisclosed` is `false` and the disclosed figures are `null` (never a fake `0`). Enable **Add market salary** and every job also carries an **AmbitionBox market-salary benchmark** (`marketAvgCtcLpa` plus a typical min/max) for that role at that company — the honest way to get pay data from Naukri. It's deduped by company+role and cached across runs to keep it cheap.

#### How many jobs can I scrape per search?

A single keyword+city search paginates through Naukri's results; to go wide, add multiple keywords and cities — the actor fans out across every combination and de-duplicates jobs automatically.

#### What's the salary format?

Salaries are normalized to **LPA** (lakhs per annum) as numeric `salaryMinLpa` / `salaryMaxLpa`, with the original label preserved in `salaryLabel`.

#### Do I need a proxy?

Yes — Naukri is protected by Akamai. The actor uses Apify residential proxies (India by default) to mint a valid session and rotate on blocks. This is preconfigured; you don't need to set anything up.

#### Can I get the full job description?

Turn on **Fetch full job descriptions** to add the complete description plus AmbitionBox salary benchmarks, benefits, education and applicant counts to every job.

#### Can I get an AI summary of each job?

Yes — turn on **AI enrichment** to add a short `aiSummary`, a distilled `aiRequirements` list, and a normalized seniority label to every job. It uses a low-cost model, needs no API key of your own, and is billed at the AI rate.

### Related actors

- **AliExpress Product Intelligence** — products, prices, variants and sales signals.
- **Reddit Scraper Pro** — posts, comments and sentiment for brand monitoring.
- **eBay Scraper Pro** — listings, sold prices and deal signals.

Explore more by [WebDataLabs](https://apify.com/webdatalabs).

### Support

Found a bug or need a field added? Open an issue on the **Issues** tab and we'll take a look.

### Leave a review

Is this actor saving you time? A quick review on the Store helps other people find it — and tells us which fields to add next. **[Rate this actor →](https://apify.com/webdatalabs/naukri-jobs-pro)**

# Actor input Schema

## `keywords` (type: `array`):

Job titles or skills to search, e.g. "data scientist", "java developer". Each keyword is searched across every location below.

## `locations` (type: `array`):

Indian cities to search, e.g. "bangalore", "mumbai", "delhi". Leave empty to search all of India for each keyword.

## `maxJobs` (type: `integer`):

Total jobs to return across all keyword and city combinations. Keep low for a cheap trial run.

## `experienceYears` (type: `string`):

Filter by years of experience (Naukri matches a job's range to a single value — a 3-7 yr job matches 5).

## `workMode` (type: `array`):

Filter by work arrangement. Leave empty for any.

## `fetchFullDescription` (type: `boolean`):

For each job, also fetch the complete description plus AmbitionBox salary benchmarks, benefits, education and vacancy count. Adds one request per job and is billed at the detailed rate.

## `marketSalary` (type: `boolean`):

Adds an AmbitionBox market-salary benchmark (marketAvgCtcLpa) to every job — the real salary signal, since Naukri hides the actual pay on most postings. Deduped by company+role and cached across runs, but slower (browser-based). Off by default.

## `searchUrls` (type: `array`):

Optional. Paste full Naukri search-result page URLs (e.g. https://www.naukri.com/data-scientist-jobs-in-bangalore) to scrape exactly those filtered searches. Overrides the keyword/city builder for those URLs.

## `postedWithinDays` (type: `string`):

Only return jobs posted within this many days.

## `onlyNewJobs` (type: `boolean`):

On scheduled runs, skip jobs already returned in previous runs of the same search. Ideal for monitoring. Uses a named key-value store to remember seen jobs.

## `aiEnrich` (type: `boolean`):

Add an AI summary, distilled requirements and a normalized seniority label per job (low-cost OpenAI model). Billed at the AI rate. Off by default.

## `aiApiKey` (type: `string`):

Only needed for AI enrichment, and only if you want to use your own key — otherwise the built-in key is used. Your OpenAI API key.

## `useApifyProxy` (type: `boolean`):

Required. Naukri is protected by Akamai and blocks bare/datacenter IPs. Residential proxies are used to mint a session token and rotate on blocks.

## `proxyConfiguration` (type: `object`):

Defaults to Apify residential proxies in India (recommended for Naukri). Override the group or country here if needed.

## `debug` (type: `boolean`):

Verbose logs for token minting, blocks, rotations and enrichment failures.

## Actor input object example

```json
{
  "keywords": [
    "data scientist"
  ],
  "locations": [
    "bangalore",
    "mumbai"
  ],
  "maxJobs": 200,
  "experienceYears": "any",
  "workMode": [],
  "fetchFullDescription": false,
  "marketSalary": false,
  "searchUrls": [],
  "postedWithinDays": "any",
  "onlyNewJobs": false,
  "aiEnrich": false,
  "useApifyProxy": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountryCode": "IN"
  },
  "debug": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `salary` (type: `string`):

No description

## `full` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "data scientist"
    ],
    "locations": [
        "bangalore",
        "mumbai"
    ],
    "maxJobs": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdatalabs/naukri-jobs-pro").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["data scientist"],
    "locations": [
        "bangalore",
        "mumbai",
    ],
    "maxJobs": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("webdatalabs/naukri-jobs-pro").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "data scientist"
  ],
  "locations": [
    "bangalore",
    "mumbai"
  ],
  "maxJobs": 200
}' |
apify call webdatalabs/naukri-jobs-pro --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=webdatalabs/naukri-jobs-pro",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gpENnVWVHcx57M5mK/builds/Nmann12dKB4ZmQRfP/openapi.json
