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

Naukri.com job dataset from keywords, locations, search URLs, or company pages, including optional job details, company overview, and AmbitionBox reviews.

- **URL**: https://apify.com/datascrapers/naukri-scraper.md
- **Developed by:** [Farhan Ali](https://apify.com/datascrapers) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.70 / 1,000 job scrapeds

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 Job Scraper** creates a structured dataset of job listings collected from [Naukri.com](https://www.naukri.com). Each dataset item represents one job listing and can include title, company, location, experience, salary, skills, work mode, posting dates, and rating. Optional job-detail, company-overview, and AmbitionBox review fields attach to the same row. Query the source with keywords plus locations, Naukri search or listing URLs, or company pages. Control the result limit with `maxJobs`, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, or another supported format.

### Dataset at a glance

| Property | Value |
|---|---|
| Source | naukri.com (job listings; optional AmbitionBox reviews) |
| Record unit | One job listing, with optional nested company and review fields |
| Input methods | Keyword + location search (`searchQueries`, `locations`), Naukri URLs (`startUrls`), or company pages (`companyUrls`) |
| Main identifiers | `jobId`, `url` |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, XML, HTML (Apify dataset exports) |
| Update model | Fresh records per Actor run |
| Pricing | $3.00 per 1,000 jobs; +$3.00 per 1,000 job details; +$3.00 per unique company overview; +$2.00 per 1,000 reviews |

### Coverage and available records

The Actor collects public Naukri job listings from three entry points. They can be combined in one run.

- **Search-based**: Set `searchQueries` to job titles, skills, or keywords (for example `python developer`). Each query is searched in every value in `locations`. Leave `locations` empty for a nationwide search. `sortBy`, `freshness`, and `workMode` apply to these keyword searches.
- **URL-based**: Pass Naukri search pages or job listing URLs in `startUrls`. Those URLs are used in addition to keyword searches.
- **Company-based**: Pass Naukri company overview pages (for example `https://www.naukri.com/infosys-overview-13832`) or AmbitionBox review pages (for example `https://www.ambitionbox.com/reviews/infosys-reviews`) in `companyUrls`. Live jobs for that company are collected up to `maxJobs`.

Record types and limits:

- **Listing records** are always collected: `jobId`, title, company, URL, location, experience, salary, skills, work mode, posting fields, rating, and the source query when the row came from search.
- **Job-detail fields** are conditional: full description, expanded skills, education, and apply/view counts are returned only when `scrapeJobDetails` is enabled.
- **Company overview fields** are conditional: size, headquarters, followers, type, founded year, about text, and offices attach onto each job from that company when `scrapeCompanyOverview` is enabled. The overview is collected once per unique company.
- **Review records** are conditional: an AmbitionBox `reviews` array attaches onto each job from that company when `scrapeCompanyReviews` is enabled, up to `maxReviewsPerCompany` (default `20`; `0` means unlimited).
- **Result cap**: `maxJobs` limits the number of job rows (`0` means unlimited, the default). Company overview fields and reviews are attached onto those rows; they are not extra dataset items.

Known exclusions: content Naukri or AmbitionBox only shows behind login is not collected; each run captures page state at run time (no historical snapshots); `freshness` and `workMode` filters apply to keyword/location searches, not to arbitrary start URLs.

### Data dictionary

Field names below match dataset record JSON properties exactly. Fields marked *conditional* appear only when the corresponding input toggle is enabled. `jobId` is the recommended deduplication key; `url` is a reasonable secondary key.

#### Listing fields

| Field | Type | Nullable | Description | Example |
|---|---|---:|---|---|
| `jobId` | string | No | Naukri job identifier; best stable deduplication key | `150126031660` |
| `title` | string | No | Job title as listed | `Python Developer (@Infosys)` |
| `companyName` | string | No | Hiring company name | `Infosys` |
| `url` | string | No | Job listing URL | `https://www.naukri.com/job-listings-python-developer-infosys-infosys-kolkata-hyderabad-bengaluru-5-to-10-years-150126031660` |
| `companyUrl` | string | Yes | Naukri company overview URL | `https://www.naukri.com/infosys-overview-13832` |
| `location` | string | Yes | Job location as listed (may include multiple cities) | `Kolkata, Hyderabad, Bengaluru` |
| `experience` | string | Yes | Experience range as shown on Naukri | `5-10 Yrs` |
| `minimumExperience` | integer | Yes | Minimum years of experience | `5` |
| `maximumExperience` | integer | Yes | Maximum years of experience | `10` |
| `salary` | string | Yes | Salary as shown on the listing | `Not disclosed` |
| `postedAgo` | string | Yes | Relative posting age as rendered on Naukri | `7 Days Ago` |
| `postedDate` | string | Yes | Posting timestamp (ISO 8601) | `2026-08-11T10:39:09.094000+00:00` |
| `skills` | string\[] | Yes | Skills shown on the listing | `["Django", "Python", "Flask"]` |
| `workMode` | string | Yes | Work arrangement when shown (`Hybrid`, `Remote`, or office) | `Hybrid` |
| `diversityTag` | string | Yes | Diversity label when Naukri shows one | `Prefers women` |
| `rating` | number | Yes | Company rating (typically AmbitionBox, 0–5) | `3.5` |
| `reviewCount` | integer | Yes | Company review count shown on the listing | `50508` |
| `sourceQuery` | string | Yes | Search keyword that produced the row | `python developer` |
| `sourceLocation` | string | Yes | Location used in the search | `bangalore` |
| `itemType` | string | No | Record type; always `job` on dataset rows | `job` |

#### Job-detail fields (conditional — `scrapeJobDetails`)

| Field | Type | Nullable | Description | Example |
|---|---|---:|---|---|
| `description` | string | Yes | Full job description | Long-form text |
| `skills` | string\[] | Yes | Listing skills expanded with detail-page skills | `["Django", "Python", "Flask"]` |
| `education` | object | Yes | `{undergraduate, postgraduate, doctorate}` string arrays | See nested object |
| `applyCount` | integer | Yes | Number of applications shown on the listing | Null when the listing does not show a count |
| `viewCount` | integer | Yes | Number of views shown on the listing | Null when the listing does not show a count |
| `employmentType` | string | Yes | Employment type when the detail page provides it | `permanent` |

#### Company overview fields (conditional — `scrapeCompanyOverview`)

These fields attach onto every job row from that company. The overview is fetched once per unique company.

| Field | Type | Nullable | Description | Example |
|---|---|---:|---|---|
| `companySize` | string | Yes | Employee-size bucket | `100001+` |
| `headquarters` | string | Yes | Headquarters as shown on the company page | `Bengaluru` |
| `followCount` | integer | Yes | Naukri follower count | `1878902` |
| `companyType` | string | Yes | Organisation type | `Public` |
| `founded` | string | Yes | Founding year as shown on the company page | `1981` |
| `companyAbout` | string | Yes | Company about text | `Infosys is a global leader in next-generation digital services and consulting.` |
| `companyOffices` | object\[] | Yes | Offices: `{city, address, pincode, isHeadquarter}` | See example record |

#### Review fields (conditional — `scrapeCompanyReviews`)

Each job record may include a `reviews` array from AmbitionBox. One review object:

| Field | Type | Nullable | Description | Example |
|---|---|---:|---|---|
| `reviewId` | integer | No | AmbitionBox review identifier | `78544194` |
| `title` | string | Yes | Review title | `rated by a Technical Lead in Bengaluru` |
| `rating` | number | Yes | Overall company rating on the review (0–5) | `1.0` |
| `likes` | string | Yes | What the reviewer liked | `Culture and env.` |
| `dislikes` | string | Yes | What the reviewer disliked | `Manager are no supportive...` |
| `department` | string | Yes | Reviewer department | `Software Development` |
| `location` | string | Yes | Reviewer location | `Bengaluru` |
| `jobProfile` | string | Yes | Reviewer job title | `Technical Lead` |
| `employmentType` | string | Yes | Employment type on the review | `permanent` |
| `workPolicy` | string | Yes | Work policy on the review | `Hybrid` |
| `postedAgo` | string | Yes | Relative review date as rendered | `14 Aug 2026` |
| `verified` | boolean | Yes | Whether AmbitionBox marks the review verified | `false` |

### Example dataset record

Representative record from a `python developer` search in `bangalore`, with company overview and reviews enabled. `companyAbout` is shortened for length; the JSON below is valid. The `reviews` array is limited to one item for readability.

```json
{
  "jobId": "150126031660",
  "title": "Python Developer (@Infosys)",
  "companyName": "Infosys",
  "url": "https://www.naukri.com/job-listings-python-developer-infosys-infosys-kolkata-hyderabad-bengaluru-5-to-10-years-150126031660",
  "companyUrl": "https://www.naukri.com/infosys-overview-13832",
  "location": "Kolkata, Hyderabad, Bengaluru",
  "experience": "5-10 Yrs",
  "minimumExperience": 5,
  "maximumExperience": 10,
  "salary": "Not disclosed",
  "postedAgo": "7 Days Ago",
  "postedDate": "2026-08-11T10:39:09.094000+00:00",
  "skills": ["Django", "Python", "Flask", "Angularjs", "Full Stack", "Angular"],
  "workMode": "Hybrid",
  "diversityTag": "Prefers women",
  "rating": 3.5,
  "reviewCount": 50508,
  "sourceQuery": "python developer",
  "sourceLocation": "bangalore",
  "companySize": "100001+",
  "headquarters": "Bengaluru",
  "followCount": 1878902,
  "companyType": "Public",
  "founded": "1981",
  "companyAbout": "Infosys is a global leader in next-generation digital services and consulting.",
  "companyOffices": [
    {
      "city": "Bengaluru",
      "address": "Infosys, Plot No.44 Hosur Main Road, Electronics City",
      "pincode": "Karnataka 560100",
      "isHeadquarter": true
    }
  ],
  "reviews": [
    {
      "reviewId": 78544194,
      "title": "rated by a Technical Lead in Bengaluru",
      "rating": 1.0,
      "likes": "Culture and env.",
      "dislikes": "Manager are no supportive...",
      "department": "Software Development",
      "location": "Bengaluru",
      "jobProfile": "Technical Lead",
      "employmentType": "permanent",
      "workPolicy": "Hybrid",
      "postedAgo": "14 Aug 2026",
      "verified": false
    }
  ],
  "itemType": "job"
}
```

A matching input for that record shape:

```json
{
  "searchQueries": ["python developer"],
  "locations": ["bangalore"],
  "maxJobs": 20,
  "scrapeCompanyOverview": true,
  "scrapeCompanyReviews": true,
  "maxReviewsPerCompany": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

Job-detail fields such as `description`, `education`, `applyCount`, and `viewCount` appear when `scrapeJobDetails` is enabled.

### Query and input reference

| Input | Type | Required | Default | Accepted values | Description |
|---|---|---:|---|---|---|
| `searchQueries` | string\[] | No\* | `[]` | Job titles, skills, or keywords | Combined with each location. Prefill: `python developer` |
| `locations` | string\[] | No | `[]` | Indian cities or regions as shown on Naukri | Each query is searched in every location. Empty = nationwide. Prefill: `bangalore` |
| `startUrls` | array (requestListSources) | No\* | `[]` | Naukri search pages or `/job-listings-...` URLs | Used in addition to search queries |
| `companyUrls` | array (requestListSources) | No\* | `[]` | Naukri overview or AmbitionBox review pages | Collects live jobs for that company up to `maxJobs` |
| `maxJobs` | integer | No | `0` | `0` or any positive integer | Maximum job rows; `0` = unlimited. Overview and reviews attach onto those rows |
| `sortBy` | string | No | `relevance` | `relevance`, `date` | Search-result sort (`date` is newest first) |
| `freshness` | string | No | `any` | `any`, `1`, `3`, `7`, `15`, `30` | Posted-within window for keyword/location searches (days) |
| `workMode` | string | No | `any` | `any`, `office`, `hybrid`, `remote` | Work-arrangement filter for keyword/location searches |
| `scrapeJobDetails` | boolean | No | `false` | `true` / `false` | Collect full description, skills, education, and apply/view counts (charged as job-details) |
| `scrapeCompanyOverview` | boolean | No | `false` | `true` / `false` | Attach company profile fields onto each job (charged once per unique company) |
| `scrapeCompanyReviews` | boolean | No | `false` | `true` / `false` | Attach AmbitionBox reviews onto each job (charged per review) |
| `maxReviewsPerCompany` | integer | No | `20` | `0` or any positive integer | Review cap per company; `0` = unlimited. Ignored when reviews are disabled |
| `detailConcurrency` | integer | No | `5` | `1`–`20` | Maximum parallel job-detail and company requests |
| `proxyConfiguration` | object | No | Apify proxy, `RESIDENTIAL` group | Apify proxy groups or custom proxies | Residential proxies are recommended |

\* Provide at least one of `searchQueries`, `startUrls`, or `companyUrls`.

Minimal request:

```json
{ "searchQueries": ["python developer"], "locations": ["bangalore"], "maxJobs": 20 }
```

Advanced request (search filters plus a company page and enrichment):

```json
{
  "searchQueries": ["python developer"],
  "locations": ["bangalore"],
  "companyUrls": [{ "url": "https://www.naukri.com/infosys-overview-13832" }],
  "maxJobs": 100,
  "sortBy": "date",
  "freshness": "7",
  "workMode": "hybrid",
  "scrapeJobDetails": true,
  "scrapeCompanyOverview": true,
  "scrapeCompanyReviews": true,
  "maxReviewsPerCompany": 20,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### Retrieve the data through the API

The Actor runs on the Apify platform, so there is no server to host and no crawling infrastructure to maintain.

1. Start the Actor with a JSON input (console or API).
2. Wait for the run to finish, or use a synchronous endpoint if you want the response inline.
3. Retrieve items from the run's default dataset.
4. Paginate or export the dataset.

Python example:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR-APIFY-TOKEN")

run_input = {
    "searchQueries": ["python developer"],
    "locations": ["bangalore"],
    "maxJobs": 20,
    "scrapeJobDetails": True,
}

run = client.actor("datascrapers/naukri-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["jobId"], item["title"], item["companyName"])
```

Apify generates ready-to-run Python, JavaScript, and cURL examples on the Actor's [API tab](https://apify.com/datascrapers/naukri-scraper/api). Do not put a real API token in shared code or URLs.

### Data quality and record handling

- **Conditional fields**: job-detail, company-overview, and review fields are present only when their input toggle is enabled. Listing-only runs return a leaner record.
- **Attached enrichments**: company overview and reviews are nested on the job row. A company with 20 reviews still produces one dataset item per job, not extra rows.
- **Source changes**: Naukri and AmbitionBox page structure and values can change; unreadable fields are returned as null rather than fabricated. Salary is often the string `Not disclosed`.
- **Deduplication**: within a run, listings are deduplicated by `jobId`. Across runs, use `jobId` (or `url`) as the stable key and filter against previously stored IDs.
- **Detail fallback**: listing data is returned even when job-detail enrichment fails.
- **Normalization**: `minimumExperience` and `maximumExperience` are integers; `postedDate` is ISO 8601; `skills` is a string array. `sourceQuery` and `sourceLocation` are written on search-produced rows.
- **Location spelling**: keyword search locations should match Naukri's search labels (for example `bangalore`). Listing text may use a different spelling (for example `Bengaluru`).

### Export and pipeline examples

| Destination | Recommended method | Typical use |
|---|---|---|
| PostgreSQL / Supabase | Dataset API poll or webhook consumer | Store job listings alongside talent tables |
| Google Sheets | Apify Google Sheets integration | Share role shortlists with recruiting teams |
| CRM / ATS pipeline | Webhook on run completion | Push new listings into applicant tracking |
| S3 / cloud storage | Scheduled export via Apify scheduler + integration | Archival of labor-market snapshots |

### Pricing and cost examples

The Actor uses pay-per-event pricing. Events are tiered by Apify plan. Published event rates:

| Event | Trigger | Rate |
|---|---|---|
| Actor start | Once per run | $0.00005 |
| dataset-item | Every job record pushed to the dataset | $0.003 / job ($3.00 per 1,000 jobs) |
| job-details | `scrapeJobDetails` enabled, detail data fetched | $0.003 / job ($3.00 per 1,000 jobs) |
| company-overview | `scrapeCompanyOverview` enabled, once per unique company | $0.003 / company ($3.00 per 1,000 companies) |
| company-reviews | `scrapeCompanyReviews` enabled, per AmbitionBox review | $0.002 / review ($2.00 per 1,000 reviews) |

Example costs at the published event rates (Actor start is $0.00005 per run):

| Records | Configuration | Estimated base cost |
|---:|---|---:|
| 1,000 jobs | Listing only | $3.00 |
| 10,000 jobs | Listing only | $30.00 |
| 1,000 jobs | Listing + job details | $6.00 |
| 1,000 jobs + 200 unique companies | Listing + company overview | $3.60 |
| 1,000 jobs + 1,000 reviews | Listing + reviews | $5.00 |
| 1,000 jobs + details + 200 overviews + 1,000 reviews | All enrichments | $8.60 |

Paid Apify plans apply lower tiered event rates. Compute units consumed by the run are billed by your Apify plan. Estimates depend on the verified pricing model, unique-company count, review volume, and the options selected for the run.

### Limitations and responsible data use

- The Actor collects publicly accessible data from Naukri job and company pages, and from AmbitionBox review pages when reviews are enabled.
- Field availability depends on what the source renders at run time; some values can be null or missing, and site changes can alter fields.
- `freshness` and `workMode` apply to keyword/location searches. Location values should match Naukri search labels.
- Company overview and reviews attach onto job rows; they are not standalone dataset items.
- The Actor does not provide historical snapshots unless you store them yourself.
- You are responsible for compliance with Naukri and AmbitionBox terms of service, applicable privacy law, and any contractual obligations before using the data.

### Dataset questions

#### What does one dataset item represent?

One Naukri job listing. Company overview fields and AmbitionBox reviews attach onto that job row. A job whose company has 20 reviews still produces a single dataset item.

#### Which field should I use as a unique identifier?

`jobId` is the stable Naukri job identifier and is the recommended deduplication key. The `url` is a reasonable secondary key.

#### Are fields nullable or conditional?

Yes. Job-detail fields exist only when `scrapeJobDetails` is enabled; company overview fields exist only when `scrapeCompanyOverview` is enabled; the `reviews` array exists only when `scrapeCompanyReviews` is enabled. Within available records, fields the listing does not render are returned as null. `salary` is often the string `Not disclosed`.

#### How do I collect live jobs for one company?

Add the Naukri overview URL or AmbitionBox review URL to `companyUrls`. The Actor collects that company's live jobs up to `maxJobs` and attaches overview and review fields onto those rows when the corresponding toggles are on.

#### Can I retrieve the records as CSV or JSON?

Yes. The dataset can be exported as JSON, CSV, Excel, XML, or HTML from the Apify Console, and queried through the Dataset API.

#### Does the Actor return historical data?

No. Each run captures the state of the listings at run time. To track posting or salary changes, schedule repeated runs and store the outputs yourself.

#### What counts as a billable result?

Four pay-per-event charges apply after a $0.00005 Actor-start charge: a dataset-item charge for every job row ($3.00 per 1,000), a job-details charge for each enriched job ($3.00 per 1,000), a company-overview charge once per unique company ($3.00 per 1,000), and a company-reviews charge per AmbitionBox review ($2.00 per 1,000). A listing-only run incurs Actor start plus dataset-item charges.

### Related datasets from Data Scrapers

- **[Glassdoor Jobs Scraper](https://apify.com/datascrapers/glassdoor-jobs-scraper)** — Job listings with employer ratings that can be compared with Naukri rows by title, company, and location.
- **[ZipRecruiter Scraper](https://apify.com/datascrapers/ziprecruiter-scraper)** — US job listings for cross-board labor-market comparison against Naukri India results.
- **[StepStone Jobs Scraper](https://apify.com/datascrapers/stepstone-jobs-scraper)** — European job listings useful for multi-region hiring-volume analysis.
- **[LinkedIn Company Scraper](https://apify.com/datascrapers/linkedin-company-scraper)** — Company profiles that can be joined with Naukri jobs by company name.
- **[LinkedIn Profile Scraper](https://apify.com/datascrapers/linkedin-profile-scraper)** — Public professional profiles for talent and hiring research alongside Naukri openings.

### Data Scrapers support

Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.

# Actor input Schema

## `searchQueries` (type: `array`):

Job titles, skills, or keywords (e.g. "python developer", "data analyst"). Combined with each Location below. Leave empty when using Start URLs or Company URLs only.

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

Indian cities or regions as shown on Naukri (e.g. "bangalore", "hyderabad", "pune", "remote"). Each query is searched in every location. Leave empty for nationwide search.

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

Naukri search pages or job listing URLs copied from the browser (e.g. https://www.naukri.com/python-developer-jobs-in-bangalore or a /job-listings-... URL). Used in addition to search queries.

## `companyUrls` (type: `array`):

Naukri company pages (e.g. https://www.naukri.com/infosys-overview-13832) or AmbitionBox company pages (e.g. https://www.ambitionbox.com/reviews/infosys-reviews). Live jobs for that company are collected up to Max Jobs. Overview fields and reviews are attached onto those job rows when enabled below.

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

Maximum number of job listings to scrape (0 = unlimited). This is the dataset row cap — company overview fields and reviews are attached onto those job rows, not added as extra rows.

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

How to sort Naukri search results.

## `freshness` (type: `string`):

Only include jobs posted within this window. Applies to keyword/location searches.

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

Filter jobs by work arrangement. Applies to keyword/location searches.

## `scrapeJobDetails` (type: `boolean`):

When enabled, fetch the full job description, skills, education, and apply/view counts (charged separately as job-details). Listing card data is always collected.

## `scrapeCompanyOverview` (type: `boolean`):

When enabled, attach Naukri company profile fields (about, size, headquarters, followers, live job count) onto each job from that company. Charged as company-overview once per unique company.

## `scrapeCompanyReviews` (type: `boolean`):

When enabled, attach AmbitionBox employee reviews as a `reviews` list on each job from that company (up to Max Reviews Per Company). Charged as company-reviews per review. Reviews are not written as separate dataset rows.

## `maxReviewsPerCompany` (type: `integer`):

Maximum AmbitionBox reviews to collect per company when Scrape Company Reviews is enabled (0 = unlimited). Ignored when reviews are disabled.

## `detailConcurrency` (type: `integer`):

Max parallel job-detail / company requests. Each request can use a fresh residential proxy.

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

Proxy settings for anti-bot protection. Apify Residential is recommended.

## Actor input object example

```json
{
  "searchQueries": [
    "python developer"
  ],
  "locations": [
    "bangalore"
  ],
  "startUrls": [
    {
      "url": "https://www.naukri.com/python-developer-jobs-in-bangalore"
    }
  ],
  "companyUrls": [],
  "maxJobs": 20,
  "sortBy": "relevance",
  "freshness": "any",
  "workMode": "any",
  "scrapeJobDetails": false,
  "scrapeCompanyOverview": false,
  "scrapeCompanyReviews": false,
  "maxReviewsPerCompany": 20,
  "detailConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset containing job, company, and review records

## `runStats` (type: `string`):

Aggregate scrape statistics for this run

# 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 = {
    "searchQueries": [
        "python developer"
    ],
    "locations": [
        "bangalore"
    ],
    "startUrls": [
        {
            "url": "https://www.naukri.com/python-developer-jobs-in-bangalore"
        }
    ],
    "maxJobs": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datascrapers/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 = {
    "searchQueries": ["python developer"],
    "locations": ["bangalore"],
    "startUrls": [{ "url": "https://www.naukri.com/python-developer-jobs-in-bangalore" }],
    "maxJobs": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("datascrapers/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 '{
  "searchQueries": [
    "python developer"
  ],
  "locations": [
    "bangalore"
  ],
  "startUrls": [
    {
      "url": "https://www.naukri.com/python-developer-jobs-in-bangalore"
    }
  ],
  "maxJobs": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call datascrapers/naukri-scraper --silent --output-dataset

```

## MCP server setup

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