# Naukri.com Job Scraper (`data_dino/naukri-job-scraper`) Actor

Scrape Naukri.com job listings by title and location. Get structured records with company, salary, experience, skills, and direct application URLs — ready for job boards, market analysis, and recruitment workflows.

- **URL**: https://apify.com/data\_dino/naukri-job-scraper.md
- **Developed by:** [Data Dino](https://apify.com/data_dino) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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.com Job Listings Scraper

Search Naukri.com for job listings by title and location, returning structured job records with company, salary, experience, skills, and direct application URLs. This actor stays undetected by navigating Naukri the way a real user does — keeping your runs reliable even as the site evolves and other scrapers get blocked.

It is built for recruiters, job-market analysts, researchers, and developers who need dependable Naukri.com data without worrying about bot detection taking their pipeline offline.

### Why use this actor?

- **Stays undetected, stays working** — avoids the bot-detection traps that take other scrapers offline. When Naukri changes its anti-scraping measures, this actor keeps delivering because it behaves like a real visitor.
- **No proxy required at small scale** — other Naukri scrapers require Apify Residential proxies to avoid IP blocking. This actor works without proxy configuration for small to medium runs.
- **Free and open source** — no per-result pricing, no result caps, no trial limits. Use it for research, analytics, or personal job search without a usage meter.
- **Simple mental model** — just a job title and location. Three input fields, no complex filter builders or search URL construction required.
- **Structured output** — every job listing returns 11 clean fields: title, company, description, logo, experience, location, posted date, salary, job ID, direct URL, and skills.

### What you can collect

Each output record includes the following fields scraped directly from the Naukri.com search results page:

| Category | Fields |
|---|---|
| Job identity | `title` (job title), `job_id` (Naukri job ID), `job_url` (direct listing URL) |
| Company | `company` (company name), `logo_url` (company logo image URL) |
| Description | `job_description` (snippet from search results) |
| Classification | `experience` (e.g. "3-5 Yrs"), `location` (e.g. "Hybrid - Hyderabad, Pune, Bengaluru"), `posted_date` (e.g. "2 days ago") |
| Compensation | `salary` (text as shown on Naukri, "N/A" when not disclosed) |
| Skills | `skills` (comma-separated skill tags) |

### Input

Provide a job title in `searchTerm`. Optionally set a `location` and a `maxResults` ceiling.

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `searchTerm` | String | Yes | — | The job title or keyword to search for on Naukri.com (e.g. "Python Developer", "Data Scientist"). |
| `location` | String | No | `India` | Location filter for the job search. Free-text; accepts city, state, or country names (e.g. "Bangalore", "Mumbai", "USA"). |
| `maxResults` | Integer | No | `20` | Maximum number of job listings to return. Range: 1–100. |

#### Example input

```json
{
  "searchTerm": "Python Developer",
  "location": "India",
  "maxResults": 20
}
```

To search in a specific city:

```json
{
  "searchTerm": "Data Scientist",
  "location": "Bangalore",
  "maxResults": 50
}
```

### Output

The actor pushes one dataset item per job listing. A representative result looks like this:

```json
{
  "title": "Python developer",
  "company": "Infosys",
  "job_description": "Preferred candidate profile Experience with frameworks such as Django, Flask, or FastAP...",
  "logo_url": "https://img.naukimg.com/logo_images/groups/v1/13832.gif",
  "experience": "3-5 Yrs",
  "location": "Hybrid - Hyderabad, Pune, Bengaluru",
  "posted_date": "2 days ago",
  "salary": "N/A",
  "job_id": "050826011769",
  "job_url": "https://www.naukri.com/job-listings-python-developer-infosys-hyderabad-pune-bengaluru-3-to-5-years-050826011769",
  "skills": "Python, Python Framework, Django, Flask, Framework, Python Development, Development"
}
```

Fields that are not present on the page are returned as `"N/A"`. The `job_url` links directly to the Naukri.com listing page.

### Built for practical workflows

- **Job market research** — track job title frequency, salary trends, and skill demand across locations and companies.
- **Recruitment and sourcing** — collect structured job listings for analysis, candidate matching, or competitive intelligence.
- **Skill gap analysis** — extract skill tags from listings to map emerging technology requirements across industries.
- **Company hiring trends** — aggregate listings by company to identify active hiring patterns and growth areas.
- **Personal job search** — collect and organize listings with direct application URLs for offline review.
- **Restricted environments** — operate reliably behind strict network policies or in regions where other scrapers get blocked.

### How to run

1. Open the actor in Apify.
2. Enter a job title in `searchTerm` (required).
3. Optionally set a `location` and a `maxResults` (defaults: "India", 20).
4. Start the run.
5. Review the dataset or export it as JSON, CSV, Excel, or another supported format.

### Important limitations

- **Single page per run** — the actor scrapes one search results page. `maxResults` is capped at 100 because Naukri.com search pages rarely exceed that many listings on a single page. Multi-page pagination is not yet supported.
- **No advanced filters** — the actor does not support freshness (last 1/3/7/15/30 days), experience range, salary range, work mode (office/remote/hybrid), company type, role category, industry, department, or education filters. Use the `searchTerm` and `location` fields only.
- **No AmbitionBox enrichment** — company ratings, reviews, and salary benchmarks from AmbitionBox are not included in the output.
- **No search URL input mode** — the actor constructs the search URL from `searchTerm` and `location`. Pasting a pre-built Naukri search URL is not supported.
- **No direct job ID fetch** — the actor cannot look up a specific job by its Naukri job ID. It always performs a keyword search.
- **Single-threaded execution** — the actor runs one search at a time. Bulk collection across many search terms or locations requires multiple runs.
- **Speed trade-off** — the anti-detection approach means each run takes a few seconds per page rather than being instant. This is a practical trade-off for reliability and works well for runs up to 100 results, but it is not designed for high-throughput bulk collection.
- **Naukri.com only** — Naukrigulf.com is not supported.
- **Text-only job descriptions** — the description field contains a text snippet from the search results page, not the full HTML job description found on the detail page.

The actor is read-only and uses only the public Naukri.com website. Use the collected information in accordance with Naukri.com's terms of service and your organization's data-use policies.

# Actor input Schema

## `keyword` (type: `string`):

Search keyword for jobs (e.g., 'Python Developer', 'Software Engineer')

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

Job location (e.g., 'Bangalore', 'Mumbai', 'Remote')

## `maxPages` (type: `integer`):

Maximum number of search result pages to scrape

## `proxyConfig` (type: `object`):

Proxy settings for the scraper

## Actor input object example

```json
{
  "keyword": "Python Developer",
  "location": "Bangalore",
  "maxPages": 5
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("data_dino/naukri-job-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("data_dino/naukri-job-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 '{}' |
apify call data_dino/naukri-job-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_dino/naukri-job-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/rVbDhYOSlrwWsI7do/builds/cM4ItWlezAfn0XXkr/openapi.json
