# Naukri Jobs Scraper & Company Hiring Monitor (`sauliusautomatesit/naukri-hiring-monitor`) Actor

Find companies hiring on Naukri. Export jobs, skills and disclosed salaries, compare previous job IDs, and get a company hiring report with source links. Pay per completed search page, with platform costs included.

- **URL**: https://apify.com/sauliusautomatesit/naukri-hiring-monitor.md
- **Developed by:** [Saulius Saulenas](https://apify.com/sauliusautomatesit) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $34.00 / 1,000 completed search pages

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?

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 & Company Hiring Monitor

Find companies advertising relevant roles on Naukri, export the jobs, and identify IDs you have not seen before. Built for recruitment research and recurring hiring watchlists.

**Quick start:** enter a role and optional city, leave the first test at one page, and run. Open the Jobs dataset for vacancies, COMPANIES for the hiring report, and SUMMARY for coverage. No Naukri login or API key is required.

### What you get

Recruitment agencies and recruitment software builders need a repeatable way to discover companies advertising relevant vacancies. This Actor combines job search results with a company hiring report and baseline comparison.

- Search roles and locations, or supply filtered public Naukri search URLs.
- Export unique job IDs, source links, company, location, experience, disclosed salary, skills and description snippets.
- Rank companies by newly observed jobs within the collected sample.
- Pass the previous run's IDs to identify new arrivals without overlapping runs sharing mutable state.
- Inspect each completed page and a coverage report. An all-failed run fails.

### Example input

```json
{"queries":["python developer"],"location":"bengaluru","freshnessDays":7,"maxPagesPerSearch":5,"previousJobIds":[],"onlyNew":false}
```

Use `searchUrls` to preserve filters from Naukri. These override the generated keyword/location/freshness search. Ten searches and ten pages per search are the hard limits. Source pages normally contain 20 listings; this is not guaranteed.

### Outputs

- **Jobs dataset:** unique jobs, or only newly observed IDs when `onlyNew` is enabled. Download JSON, CSV or Excel through Apify.
- **COMPANIES:** observed job counts, counts absent from the baseline, top skills, locations and supporting job IDs.
- **SUMMARY:** successful pages, source result counts, stop reasons, failed searches and budget status.
- **PAGE-0001, PAGE-0002, ...:** completed search snapshots, including valid empty results.
- **SEEN-JOB-IDS:** up to 10,000 IDs for the next run. Save this in your workflow and pass it as `previousJobIds`.

An empty baseline marks every collected ID new to this comparison; it does not mean the jobs were just posted. Use identical searches and limits when comparing runs. A truncated sample cannot prove a vacancy closed or company hiring increased. Reports count the collected sample, not a company's entire workforce or vacancies. IDs beyond the rolling 10,000-ID baseline may reappear as new.

Hidden salaries remain null. Descriptions are search-result snippets, not guaranteed full job descriptions. The Actor does not collect applicant profiles or CVs, use account cookies, or submit job applications.

### Pricing

**$0.04 per completed search page** before plan discounts. A page normally contains up to 20 jobs. Job exports, company reports, compute and proxy usage during the Actor run are included.

| Completed pages | Typical maximum jobs in one search | Event charges before discounts at 1 GB |
|---|---:|---:|
| 1 | 20 | $0.04005 |
| 3 | 60 | $0.12005 |
| 5 | 100 | $0.20005 |

The completed-page event includes a confirmed empty search or a page containing only previously observed jobs: the purchased result is the completed monitoring check. `onlyNew` changes which jobs appear in the dataset; it does not make the check free. Blocked or malformed pages do not incur this event. Overlapping searches are checked separately and charged per completed page, while their exported jobs are deduplicated.

Actor start (`apify-actor-start`) is **$0.00005**, charged once per GB of selected memory, minimum one event. Page prices are $0.038 for Bronze, $0.036 for Silver and $0.034 for Gold/Platinum/Diamond. Set a maximum run cost to cap event charges; allow room for the start event. Downloads and storage after the run can incur ordinary Apify usage outside the Actor price.

### Reliability boundary

Availability depends on Naukri's public pages. This implementation does not solve CAPTCHAs or require account cookies. Partial failure preserves completed output and records missing coverage. Inspect SUMMARY before treating an export as complete. If a source blocks a run, avoid immediately scheduling repeated retries.

The source can refresh or repost listings, reorder results and omit salary details. Use sourceCreatedAt and sourceAgeLabel as source-provided signals, not independently verified posting dates. No result proves that a company needs a recruitment supplier or will respond to outreach.

### API and automation

Start a run through `POST /v2/acts/sauliusautomatesit~naukri-hiring-monitor/runs` with your input and `maxTotalChargeUsd` query parameter. Read the returned run ID until it completes, then download its default dataset and COMPANIES/SUMMARY/SEEN-JOB-IDS records.

For recurring research, retain SEEN-JOB-IDS and pass it as the next run's previousJobIds. Keep the same search and page limits. Set onlyNew to true if you only need additions in the Jobs dataset. The initial run establishes your baseline.

Use the Actor's API and MCP tabs for integration settings. Leave a review based on your experience, or open an issue with the run ID and input if the output is wrong; do not post API tokens.

### Download the recruiter workflow

[Download the Python recruitment watchlist starter](https://api.apify.com/v2/key-value-stores/dcFsTIQ5F10aYN6RF/records/naukri-recruiter-workflow-v1.zip?signature=1hMzQhM8ZeS2IzVX2IVuo). It includes a tested input, CSV export, company reports, an explicit spending cap and a saved job-ID baseline for repeat runs. Python 3.10 or newer; no extra packages.

# Actor input Schema

## `queries` (type: `array`):

One to ten roles or skills. Ignored when searchUrls is supplied.

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

Optional city name for keyword searches, such as Bengaluru or Pune.

## `freshnessDays` (type: `integer`):

Ask Naukri for listings within this number of days (1, 3, 7, 15 or 30). Source dates can reflect reposting.

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

Public search URLs whose filters take precedence over queries, location and freshnessDays.

## `maxPagesPerSearch` (type: `integer`):

$0.04 per completed page before plan discounts, normally up to 20 jobs. Confirmed empty and unchanged pages also count. A first one-page test costs at most $0.04005 in event charges at 1 GB.

## `previousJobIds` (type: `array`):

Up to 10,000 job ID strings. Pass the previous SEEN-JOB-IDS output to continue comparisons without shared mutable state.

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

Exclude baseline IDs from the Jobs dataset. Page snapshots and company reports retain the current sample.

## Actor input object example

```json
{
  "queries": [
    "python developer"
  ],
  "location": "",
  "freshnessDays": 7,
  "searchUrls": [],
  "maxPagesPerSearch": 1,
  "previousJobIds": [],
  "onlyNew": false
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `companies` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `baseline` (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 = {
    "queries": [
        "python developer"
    ],
    "maxPagesPerSearch": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("sauliusautomatesit/naukri-hiring-monitor").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 = {
    "queries": ["python developer"],
    "maxPagesPerSearch": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("sauliusautomatesit/naukri-hiring-monitor").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 '{
  "queries": [
    "python developer"
  ],
  "maxPagesPerSearch": 1
}' |
apify call sauliusautomatesit/naukri-hiring-monitor --silent --output-dataset

```

## MCP server setup

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

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/EnlAhcusJzcdwNpyR/builds/8P7vH2KHFac6d6aPV/openapi.json
