# Naukri Scraper - India Jobs, Salaries, Skills & Companies (`scrapewise/naukri-scraper`) Actor

Scrape Naukri.com jobs by keyword, city or search link: title, company, location, experience, salary, skills, posted date, openings, work mode and company rating. Filter by experience, job age and remote or hybrid. Schedule with onlyNew for daily job alerts.

- **URL**: https://apify.com/scrapewise/naukri-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Jobs, Lead generation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.46 / 1,000 job delivereds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Naukri Scraper: India jobs, salaries, skills and companies

This Naukri scraper collects **jobs from Naukri.com, India's largest job site**, with no account needed. Type a role, skill or company (or paste a Naukri search link) and get each job as one clean row: **title, company, city, experience, salary, skills, posted date, number of openings, work mode and the company's employee rating**.

Use it for salary benchmarks by role and city, hiring trend dashboards, lead lists of companies that are hiring right now, job alert feeds and AI job matching.

### At a glance

| What | Price |
|---|---|
| Job delivered | **US$ 0.60 per 1,000 jobs** (US$ 0.0006 each) |
| Run start | US$ 0.005 per run, charged only after Naukri answers |

- 5 search terms with 200 jobs each = 1,000 jobs = **US$ 0.605**.
- Error rows, duplicates and jobs skipped by `onlyNew` are never charged. A run that cannot reach Naukri costs nothing.
- The Indian residential proxy that Naukri needs is included in the price.
- Up to 2,000 jobs per search (the most Naukri shows); add more search terms or filters to go further.

### Quick start

```json
{
  "searchTerms": ["machine learning engineer"],
  "maxResultsPerSearch": 20
}
```

Several roles in one city, hybrid only, newest first:

```json
{
  "searchTerms": ["sap fico", "salesforce developer", "cyber security analyst"],
  "location": "bangalore",
  "workMode": "hybrid",
  "sortBy": "date",
  "maxResultsPerSearch": 200
}
```

A Naukri search link copied from the browser (its role, city and filters are kept):

```json
{
  "startUrls": [{ "url": "https://www.naukri.com/flutter-developer-jobs-in-chennai?k=flutter%20developer&l=chennai&experience=2" }]
}
```

An empty input runs the example search, so you can see the output right away.

### Input

| Field | What it does |
|---|---|
| `searchTerms` | Roles, skills or companies, one per line. Each is a separate search. Also `keywords`, `queries`. |
| `startUrls` | Naukri search result links. Role, city, experience, job age and work mode in the link are kept. |
| `location` | City or region for every search term: `bangalore`, `pune`, `hyderabad`, `delhi ncr`, `mumbai`... Empty = all of India. |
| `experience` | Years of experience of the candidate (0 = freshers). Only jobs open to that experience. |
| `jobAge` | Posted in the last 1, 3, 7, 15 or 30 days. |
| `workMode` | `any`, `office`, `hybrid` or `remote`. |
| `sortBy` | `relevance` (Naukri default) or `date` (newest first). |
| `maxResultsPerSearch` | Jobs per search term or link, 1 to 2,000. Default 50. Also `maxResults`, `maxItems`. |
| `onlyNew` | Job alerts: only jobs not delivered in earlier runs of the same input (see below). |
| `proxyConfiguration` | Default: Apify residential proxy in India. |

### Output

One row per job. Real row from a run on 7 Nov 2026 (`sap fico`, hybrid, newest first):

```json
{
  "jobId": "041126022253",
  "title": "Senior Winshuttle Developer",
  "companyName": "Hinduja Global Solutions (HGS)",
  "companyId": 4390720,
  "url": "https://www.naukri.com/job-listings-senior-winshuttle-developer-hinduja-global-solutions-hgs-indore-hyderabad-5-to-9-years-041126022253",
  "location": "Hybrid - Indore, Hyderabad",
  "cities": ["Indore", "Hyderabad"],
  "workMode": "hybrid",
  "experience": "5-9 Yrs",
  "minExperienceYears": 5,
  "maxExperienceYears": 9,
  "salary": "15-30 Lacs PA",
  "salaryMin": 1500000,
  "salaryMax": 3000000,
  "salaryCurrency": "INR",
  "salaryDisclosed": true,
  "skills": ["Senior", "SAP ECC", "SAP", "ECC", "Studio", "Development", "Winshuttle"],
  "descriptionSnippet": "Duration : Full time\nKnowledge of MDM solutions to create and maintain master data ...",
  "postedAt": "2026-11-06T11:20:57+00:00",
  "postedLabel": "1 Day Ago",
  "vacancies": 2,
  "walkIn": false,
  "diversityTags": [],
  "companyRating": 3.7,
  "companyReviewsCount": 8037,
  "companyLogoUrl": "https://img.naukimg.com/logo_images/groups/v1/233848.gif",
  "companyJobsUrl": "https://www.naukri.com/hinduja-global-solutions-hgs-jobs-careers-65085",
  "searchTerm": "sap fico",
  "searchLocation": null,
  "searchUrl": "https://www.naukri.com/sap-fico-jobs?k=sap%20fico&wfhType=3&sort=f",
  "page": 1,
  "position": 3,
  "scrapedAt": "2026-11-07T12:35:32+00:00"
}
```

| Field | Meaning |
|---|---|
| `jobId`, `url` | Naukri job id and the public job page. |
| `title`, `companyName`, `companyId` | Job title and hiring company. |
| `location`, `cities` | Location as shown on Naukri, and the list of cities. |
| `workMode` | `hybrid` or `remote` when Naukri tags it, or the mode you filtered by. Otherwise empty. |
| `experience`, `minExperienceYears`, `maxExperienceYears` | Experience range asked by the employer. |
| `salary` | Salary text as shown ("15-30 Lacs PA", "Not disclosed"). |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryDisclosed` | Yearly salary range in numbers when the employer shows it (about 1 job in 7). |
| `skills` | Key skills tagged on the job. |
| `descriptionSnippet` | The job summary shown in the results. Personal contact details are removed. |
| `postedAt`, `postedLabel` | Posting date (ISO) and Naukri's label ("1 Day Ago"). |
| `vacancies` | Number of openings, when given. |
| `walkIn` | True for walk-in drives. |
| `diversityTags` | Diversity hiring tags (for example "women", "women returning to work"). |
| `companyRating`, `companyReviewsCount` | Employee rating of the company and number of reviews. |
| `companyLogoUrl`, `companyJobsUrl` | Company logo and the company's jobs page on Naukri. |
| `searchTerm`, `searchLocation`, `searchUrl`, `page`, `position` | Which search found the job and where. |
| `isNew` | Only with `onlyNew`: always true (only new jobs are delivered). |

Export as JSON, CSV, Excel or HTML from the run page, or read the dataset with the API.

### Job alerts with onlyNew

Turn on `onlyNew` and schedule the same input daily (for example `jobAge` 1 or 3 and `sortBy` `date`). The Actor remembers the jobs it already delivered for that exact input, for 90 days, and each run returns only jobs that did not appear before. Jobs already seen are skipped and not charged, so a daily alert costs only what is new.

Changing the search terms, city or filters starts a new memory. A run where nothing is new returns one free `NO_NEW_JOBS` row.

### Errors you may see

Error rows have `errorCode` and `error`, and are never charged:

| errorCode | Meaning |
|---|---|
| `NO_RESULTS` | Naukri has no job for this search and filters. Try a broader term or fewer filters. |
| `NO_NEW_JOBS` | With `onlyNew`: every job was already delivered in an earlier run. |
| `INVALID_URL` | The link is not a Naukri search link. |
| `BLOCKED` | Naukri did not answer after several attempts. Run again in a few minutes. |
| `NOT_REACHED` | The run timeout or an early stop came before this search. Raise the timeout or run it separately. |

### Integrations, scheduling and AI agents

- **Schedules**: run daily or hourly from Apify Schedules; combine with `onlyNew` for alerts.
- **Export**: JSON, CSV, Excel, Google Sheets (through integrations), or the dataset API.
- **Make, n8n and Zapier**: send each new job to a sheet, Slack, a CRM or an email digest.
- **AI agents**: the Actor works through the Apify MCP server, so Claude, ChatGPT and other agents can search Naukri jobs as a tool.
- **Webhooks**: get notified when a run ends and pull the new rows.

Also from us: [Foundit Scraper](https://apify.com/scrapewise/foundit-scraper) for Foundit (ex-Monster India) jobs.

### FAQ

**Do I need a Naukri account?** No. Only public job results are collected.

**How many jobs can I get?** Up to 2,000 per search term or link, the most Naukri shows for one search. For more, split by city, experience or job age, or add related terms. Duplicates across searches in the same run are delivered once.

**Is the salary always there?** No. Most employers hide it; `salary` then says "Not disclosed" and the numeric fields are empty.

**Does it get the full job description?** It returns the summary Naukri shows in the results (`descriptionSnippet`) plus the skills, experience and salary. The full description page is not opened, which keeps the price low.

**Can I search other countries?** This Actor covers Naukri.com (India).

**How fast is it?** About 200 jobs per 35 seconds after a start-up of 15 to 30 seconds.

### Limitations

- At most 2,000 jobs per search (100 pages of 20), as on the site.
- Filter values follow Naukri: experience is one number of years, job age is 1, 3, 7, 15 or 30 days.
- `companyRating` and `vacancies` are empty when Naukri does not show them for that job.
- Results reflect what Naukri shows at run time; order by relevance can change between runs.

### Changelog

- **7 Nov 2026**: first version. Search terms and Naukri links, city, experience, job age, work mode and sort filters, onlyNew job alerts.

# Actor input Schema

## `searchTerms` (type: `array`):

Job titles, skills or companies to search on Naukri, one per line (for example 'machine learning engineer', 'salesforce developer', 'sap fico'). Each term is a separate search with the filters below. Also accepts 'keywords' and 'queries'.

## `startUrls` (type: `array`):

Naukri search result links copied from the browser, such as https://www.naukri.com/flutter-developer-jobs-in-chennai?experience=2. The role, city and the experience, job age and work mode filters in the link are kept. Links from other sites return a free INVALID_URL row.

## `location` (type: `string`):

Limit every search term to a city or region, as written on Naukri (for example 'bangalore', 'pune', 'delhi ncr', 'hyderabad'). Leave empty for all of India.

## `experience` (type: `integer`):

Only jobs open to a candidate with this many years of experience (0 = freshers). Leave empty for any experience.

## `jobAge` (type: `string`):

Only jobs posted in the last N days. Combine with sort by date and onlyNew for a daily feed of fresh jobs.

## `workMode` (type: `string`):

Only office, hybrid or remote jobs, as tagged by Naukri. The selected mode is also written in workMode on every job.

## `sortBy` (type: `string`):

Order of the results: Naukri relevance or newest first.

## `maxResultsPerSearch` (type: `integer`):

Maximum jobs delivered for each search term or link (Naukri shows at most 2,000 per search; narrow the filters to go deeper). Also accepts 'maxResults' and 'maxItems'.

## `onlyNew` (type: `boolean`):

Remembers the jobs delivered for this exact input and returns only jobs that did not appear in earlier runs, with isNew set to true. Use it with a daily schedule for job alerts. Jobs already seen are skipped and not charged.

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

Default: Apify residential proxy in India. Change only if you know what you need.

## Actor input object example

```json
{
  "searchTerms": [
    "machine learning engineer"
  ],
  "jobAge": "",
  "workMode": "any",
  "sortBy": "relevance",
  "maxResultsPerSearch": 50,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (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 = {
    "searchTerms": [
        "machine learning engineer"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/naukri-scraper").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 = {
    "searchTerms": ["machine learning engineer"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "machine learning engineer"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call scrapewise/naukri-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/naukri-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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