# Naukri Job Scraper (`goat255/naukri-scraper`) Actor

Scrape Naukri job listings by keyword and location without a login. Search any role, skill, or company across Indian and Gulf locations and get clean structured rows: title, company, salary, experience, skills, location, and a direct apply link. Walks pagination up to your chosen limit.

- **URL**: https://apify.com/goat255/naukri-scraper.md
- **Developed by:** [Goutam Soni](https://apify.com/goat255) (community)
- **Categories:** Jobs, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Job Scraper

Scrape Naukri job listings by keyword and location with no login and no API key required. Search any role, skill, or company across Indian and Gulf locations and get clean structured rows: job title, company, salary, experience, skills, location, posting date, and a direct apply link.

### What it does

- **Keyword job search** by role, skill, or company name (for example `python developer`, `react`, `Acme Co`).
- **Location filtering** across Indian cities and Gulf locations (for example `bangalore`, `mumbai`, `dubai`).
- **Many searches in one run.** Queue multiple keyword and location pairs and process them in parallel.
- **Automatic pagination.** Walks page after page until your per-search limit is reached or results run out.
- **Salary and experience parsing.** Returns both the human label (`14-24 Lacs PA`, `5-10 Yrs`) and numeric min/max values you can filter and sort on. Undisclosed pay returns null instead of a misleading zero.
- **Company ratings.** Includes company rating and review counts when the company has a public profile.
- **Openings count.** Reports the number of advertised vacancies for a role when the listing exposes it.
- **Clean structured output.** Every row follows one stable schema with skills as an array and a deduplicated job id.

No account, no password, no API key. Give it keywords and locations and it returns clean structured job rows.

### Use cases

- **Job board / aggregator** - power a niche, city, or skill-specific job feed with fresh listings.
- **Recruitment lead generation** - source companies actively hiring for a role and build an outreach list.
- **Hiring market research** - track demand for a skill, role, or technology across cities over time.
- **Competitor hiring monitoring** - watch which roles your competitors are recruiting for.
- **Salary benchmarking** - collect advertised salary ranges for a role to benchmark compensation.

### Input

| Field | Type | Description |
|---|---|---|
| `searches` | array | One entry per search. Each entry is an object with a `keyword` (role, skill, or company) and an optional `location`. |
| `keyword` | string | A single keyword, as a shortcut when you only need one search. Combined with `location` below. |
| `location` | string | Location for the single-search keyword. Leave blank to search everywhere. |
| `maxItemsPerSearch` | integer | Maximum jobs returned per search. Default 100. Pagination walks as many pages as needed to reach it. |
| `concurrency` | integer | How many searches to process in parallel. Default 5. |
| `proxyConfig` | object | Proxy configuration. Defaults to Apify residential proxy for reliable large runs. |

#### Example input

```json
{
  "searches": [
    { "keyword": "python developer", "location": "bangalore" },
    { "keyword": "accountant", "location": "dubai" }
  ],
  "maxItemsPerSearch": 200
}
````

### Output

Each job is one dataset row with a stable schema. Sample row:

```json
{
  "type": "job",
  "jobId": "160626017917",
  "title": "DevOps Engineer",
  "url": "https://www.naukri.com/job-listings-devops-engineer-acme-co-160626017917",
  "companyName": "Acme Co",
  "companyId": 15624,
  "companyRating": 3.4,
  "companyReviewsCount": 1516,
  "salaryLabel": "14-24 Lacs PA",
  "minSalary": 1400000,
  "maxSalary": 2400000,
  "currency": "INR",
  "experience": "5-10 Yrs",
  "minExperienceYears": 5,
  "maxExperienceYears": 10,
  "location": "Hyderabad, Bengaluru",
  "openings": 4,
  "skills": ["Docker", "Terraform", "AWS", "CI/CD"],
  "description": "Develop and manage container images...",
  "logo": "https://example.com/logo.png",
  "postedLabel": "1 Day Ago",
  "postedAt": "2026-06-16T00:32:17.000Z",
  "scrapedAt": "2026-06-18T04:10:00.000Z"
}
```

#### Key fields

- **`jobId`, `url`** - stable unique id and the direct apply link for each listing.
- **`salaryLabel` + `minSalary` / `maxSalary`** - the advertised salary as a readable label and as numeric bounds for filtering and sorting. When a listing does not disclose pay, `salaryLabel` reads "Not disclosed" and the numeric fields (and `currency`) are null rather than a misleading zero.
- **`experience` + `minExperienceYears` / `maxExperienceYears`** - required experience as a label and as numeric bounds.
- **`openings`** - number of advertised vacancies for the role, when the listing exposes it.
- **`skills`** - the listing's tagged skills as a clean array.
- **`companyRating`, `companyReviewsCount`** - included when the company has a public profile, null otherwise.
- **`postedAt`** - ISO timestamp of when the job was posted (null for listing types that do not expose it); `postedLabel` always carries the human-readable freshness ("1 Day Ago").

### FAQ

**Do I need a login or API key?**
No. The scraper needs no account, no password, and no API key. Just provide keywords and locations.

**How much does it cost?**
You are billed per job result returned, on top of standard Apify platform usage. There is no per-run start fee. See the Pricing tab on the actor page for the current rate.

**How many jobs can I get?**
Set `maxItemsPerSearch` to your target (up to 50,000 per search). The scraper paginates automatically until it reaches that number or the search is exhausted. Run multiple searches in one go to cover more roles and cities.

**Which locations are supported?**
Indian cities (for example bangalore, mumbai, delhi, pune, hyderabad) and Gulf locations (for example dubai, abu dhabi) all resolve through the same search. Leave `location` blank to search everywhere.

**How fast is it?**
Searches run in parallel (controlled by `concurrency`), and each search streams pages back as it goes. A typical search of a few hundred jobs completes in seconds; large multi-search runs scale with the number of pages walked.

**Why are some salary or rating fields empty?**
Some listings do not advertise a salary, and some companies have no public rating profile. Those fields are returned as null rather than guessed, so your data stays accurate.

**Can I filter by salary or experience?**
Yes. Each row includes numeric `minSalary` / `maxSalary` and `minExperienceYears` / `maxExperienceYears` alongside the readable labels, so you can filter and sort downstream.

# Actor input Schema

## `searches` (type: `array`):

One entry per search. Each entry is an object with a keyword (role, skill, or company) and an optional location. Indian and Gulf locations both work. Example: \[{"keyword": "python developer", "location": "bangalore"}, {"keyword": "accountant", "location": "dubai"}].

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

A single keyword to search, as a shortcut when you only need one. Combined with the Location field below. Leave blank if you are using Searches above. Example: project manager.

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

Location for the single-search keyword above. Leave blank to search everywhere. Example: bangalore, mumbai, dubai.

## `maxItemsPerSearch` (type: `integer`):

Cap on jobs returned per search. Pagination is walked across multiple pages until this is reached or the search is exhausted.

## `concurrency` (type: `integer`):

How many searches to process in parallel.

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

Optional proxy. Routing through a rotating proxy improves reliability for large runs.

## Actor input object example

```json
{
  "searches": [
    {
      "keyword": "data analyst",
      "location": "bangalore"
    }
  ],
  "maxItemsPerSearch": 100,
  "concurrency": 5,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searches": [
        {
            "keyword": "data analyst",
            "location": "bangalore"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("goat255/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 = { "searches": [{
            "keyword": "data analyst",
            "location": "bangalore",
        }] }

# Run the Actor and wait for it to finish
run = client.actor("goat255/naukri-scraper").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 '{
  "searches": [
    {
      "keyword": "data analyst",
      "location": "bangalore"
    }
  ]
}' |
apify call goat255/naukri-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Naukri Job Scraper",
        "description": "Scrape Naukri job listings by keyword and location without a login. Search any role, skill, or company across Indian and Gulf locations and get clean structured rows: title, company, salary, experience, skills, location, and a direct apply link. Walks pagination up to your chosen limit.",
        "version": "0.1",
        "x-build-id": "JHbakzfX1m6X9E2cq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/goat255~naukri-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-goat255-naukri-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/goat255~naukri-scraper/runs": {
            "post": {
                "operationId": "runs-sync-goat255-naukri-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/goat255~naukri-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-goat255-naukri-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searches": {
                        "title": "Searches",
                        "type": "array",
                        "description": "One entry per search. Each entry is an object with a keyword (role, skill, or company) and an optional location. Indian and Gulf locations both work. Example: [{\"keyword\": \"python developer\", \"location\": \"bangalore\"}, {\"keyword\": \"accountant\", \"location\": \"dubai\"}].",
                        "default": [
                            {
                                "keyword": "data analyst",
                                "location": "bangalore"
                            }
                        ]
                    },
                    "keyword": {
                        "title": "Keyword (single search)",
                        "type": "string",
                        "description": "A single keyword to search, as a shortcut when you only need one. Combined with the Location field below. Leave blank if you are using Searches above. Example: project manager."
                    },
                    "location": {
                        "title": "Location (single search)",
                        "type": "string",
                        "description": "Location for the single-search keyword above. Leave blank to search everywhere. Example: bangalore, mumbai, dubai."
                    },
                    "maxItemsPerSearch": {
                        "title": "Max items per search",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Cap on jobs returned per search. Pagination is walked across multiple pages until this is reached or the search is exhausted.",
                        "default": 100
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many searches to process in parallel.",
                        "default": 5
                    },
                    "proxyConfig": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional proxy. Routing through a rotating proxy improves reliability for large runs.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
