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

Scrape Naukri.com jobs in India: title, company, salary, skills, location, role, industry. 30+ fields per job. Filter by keyword, location, experience, work mode.

- **URL**: https://apify.com/makework36/naukri-scraper.md
- **Developed by:** [deusex machine](https://apify.com/makework36) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 7 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## 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 Scraper API — Jobs, Salaries, Companies & Skills Data from India

A high-performance **Naukri scraper** that extracts complete job listings from [Naukri.com](https://www.naukri.com), India's largest job portal with 7M+ active listings across IT services, financial services, manufacturing, BPO and healthcare. Pull 30+ structured fields per job — title, company, salary (parsed to INR and USD), required experience, skills, education, role category, industry, department, and full description — without writing a single line of HTML parsing logic.

Designed for recruiters building talent pipelines, market analysts tracking India's labor demand on portals like [Glassdoor](https://www.glassdoor.com), [LinkedIn Jobs](https://www.linkedin.com/jobs), and [Indeed](https://www.indeed.com), founders mapping competitor hiring patterns, salary benchmarking firms enriching their compensation datasets, and ML/AI startups training resume-to-job matching models. Compatible with [schema.org JobPosting](https://schema.org/JobPosting) downstream pipelines and exports cleanly to CSV, JSON, Excel or [Google Sheets](https://workspace.google.com/products/sheets/).

### What this Naukri scraper does

This actor automates browsing **naukri.com** like a real user. It opens the public job search pages, paginates through results, parses every job tuple into a clean record, and (optionally) opens each job detail page to extract premium fields that aren't visible in the search results — like the full job description, applicant count, salary breakdown by tier, employment type, education requirements, and addresses.

Output is structured JSON, ready for direct ingestion into any database, BI tool or LLM pipeline. Salary strings like `"6-15 Lacs PA"` are parsed into `salaryMin: 600000`, `salaryMax: 1500000`, `salaryCurrency: "INR"`, plus a `salaryUsdEstimate: "$7,229 - $18,072"` field that nobody else in the market provides.

The scraper is built on a stealth browser stack tuned specifically for India's anti-bot protections. No reCAPTCHA solving services required, no residential proxies — runs on Apify's datacenter network out of the box.

### Data fields the Naukri scraper extracts

Every job record contains these fields when available:

#### Identity & links
- `jobId` — Unique 12-18 digit Naukri job identifier
- `jobUrl` — Direct link to the full job listing
- `title` — Position title as displayed
- `companyName` — Hiring company
- `companyUrl` — Naukri career page of the hiring company
- `companyLogoUrl` — Company logo image URL
- `companyRating` — AmbitionBox rating out of 5 (e.g. `3.5`)
- `companyReviewsCount` — Total employee reviews (e.g. `48992`)

#### Location & arrangement
- `locationText` — Raw location string ("Hybrid - Kolkata, Hyderabad, Bengaluru")
- `locations` — Parsed list of cities (`["Kolkata", "Hyderabad", "Bengaluru"]`)
- `workMode` — `"hybrid"`, `"remote"`, `"office"` or `null`
- `address` — Detailed address from job detail page (when fetchDetails=true)

#### Experience & seniority
- `experienceText` — Raw display string ("5-10 Yrs")
- `experienceMin` — Minimum years required (integer)
- `experienceMax` — Maximum years required (integer)
- `seniority` — Derived label: `"fresher"`, `"junior"`, `"mid"`, `"senior"`, `"lead"`

#### Compensation
- `salaryText` — Raw salary display ("6-15 Lacs PA")
- `salaryMin` — Minimum salary in INR (integer)
- `salaryMax` — Maximum salary in INR (integer)
- `salaryCurrency` — Currency code (typically `"INR"`)
- `salaryUsdEstimate` — Estimated USD range for international users

#### Skills & description
- `skills` — Clean array of skill chips (`["Python", "Django", "AWS"]`)
- `jobDescriptionPreview` — First 600 chars shown in search results
- `jobDescription` — Full description text (only with fetchDetails=true)
- `jobDescriptionHtml` — Original HTML markup of description (truncated 30K chars)

#### Role taxonomy (fetchDetails=true)
- `role` — Specific role like `"Back End Developer"` or `"Full Stack Developer"`
- `roleCategory` — Broader category like `"Software Development"`
- `department` — Functional area like `"Engineering - Software & QA"`
- `industry` — Industry type like `"IT Services & Consulting"`
- `employmentType` — `"Full Time, Permanent"`, `"Contract"`, etc.

#### Education requirements (fetchDetails=true)
- `educationUG` — Undergraduate degree expected (e.g. "B.Tech in Any Specialization")
- `educationPG` — Postgraduate degree expected (e.g. "M.Tech in Any Specialization")

#### Competition metrics (fetchDetails=true)
- `applicants` — Number of applicants so far (signal for competitiveness)
- `vacancy` — Number of open positions for this listing
- `applyByDate` — Application deadline when published

#### Timestamps
- `postedRelative` — Naukri's relative date ("4 days ago", "1 week ago")
- `postedDate` — Estimated ISO 8601 timestamp derived from the relative date

### Use cases for this Naukri data API

1. **Recruitment & talent acquisition** — Build a daily-updated stream of jobs matching your target keywords across multiple cities. Use `companyReviewsCount` and `companyRating` to filter only well-rated employers.
2. **Compensation benchmarking** — Aggregate `salaryMin`/`salaryMax` by `role` + `experienceMin` to produce reliable Indian market salary tables. The `salaryUsdEstimate` field makes it directly usable in global comp reports.
3. **Hiring intelligence** — Track which companies are scaling specific functions (e.g. AI/ML engineers, growth marketers). The `industry` + `roleCategory` taxonomy lets you slice the dataset cleanly.
4. **Resume-to-job ML training data** — Pair the `skills` array, full `jobDescription`, and `experienceMin/Max` fields to train recommendation models. Tens of thousands of jobs per day.
5. **Skill demand tracking** — Run a weekly cron, count the top occurring `skills` entries by `roleCategory`. Identify trending technologies before they show up in industry reports.
6. **Lead generation** — Cold outreach to hiring managers at companies actively recruiting in your niche. Combine with company website lookup tools for full B2B enrichment.

### How to use this Naukri scraper

Choose between **keywords mode** (easiest — provide one or many search keywords and the scraper builds the URLs) or **URLs mode** (advanced — paste pre-built Naukri search URLs with all the filter parameters already encoded).

#### Mode 1 — Search by keywords

```json
{
  "mode": "keywords",
  "keywords": ["python developer", "data engineer mumbai"],
  "maxJobs": 100,
  "fetchDetails": false
}
````

#### Mode 2 — Search by URLs

```json
{
  "mode": "urls",
  "searchUrls": [
    { "url": "https://www.naukri.com/python-developer-jobs-in-bangalore?experience=3" }
  ],
  "maxJobs": 50,
  "fetchDetails": true,
  "workMode": "remote"
}
```

#### Mode 3 — Filtered, detailed mode for premium analysis

```json
{
  "mode": "keywords",
  "keywords": ["data scientist"],
  "maxJobs": 200,
  "fetchDetails": true,
  "workMode": "hybrid",
  "experienceMin": 3,
  "experienceMax": 7,
  "cities": ["Bengaluru", "Pune", "Hyderabad"]
}
```

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | enum | `"keywords"` | `"keywords"` or `"urls"` |
| `keywords` | array of strings | `["python developer"]` | Search keywords; slugs are auto-built |
| `searchUrls` | array | `[]` | Pre-built Naukri search URLs (use when mode=urls) |
| `maxJobs` | integer | `50` | Cap per keyword/URL (1–5000) |
| `fetchDetails` | boolean | `false` | Open each job detail page for premium fields |
| `workMode` | enum | `"any"` | `"any"`, `"remote"`, `"hybrid"`, `"office"` |
| `experienceMin` | integer | `0` | Filter jobs requiring at least N years |
| `experienceMax` | integer | `40` | Filter jobs requiring at most N years |
| `cities` | array | `[]` | Whitelist cities (post-extract filter) |

### Output example (single record, JSON)

```json
{
  "jobId": "230326014707",
  "title": "Python Developer",
  "jobUrl": "https://www.naukri.com/job-listings-python-developer-movate-technologies-bengaluru-5-to-8-years-230326014707",
  "companyName": "Movate Technologies",
  "companyUrl": "https://www.naukri.com/movate-technologies-jobs-careers-2034621",
  "companyLogoUrl": "https://img.naukimg.com/logo_images/groups/v1/2034621.gif",
  "companyRating": 3.1,
  "companyReviewsCount": 2646,
  "locationText": "Bengaluru",
  "locations": ["Bengaluru"],
  "workMode": null,
  "experienceText": "5-8 Yrs",
  "experienceMin": 5,
  "experienceMax": 8,
  "seniority": "mid",
  "salaryText": "16-20 Lacs PA",
  "salaryMin": 1600000,
  "salaryMax": 2000000,
  "salaryCurrency": "INR",
  "salaryUsdEstimate": "$19,277 - $24,096",
  "skills": ["Django", "React.Js", "Python", "Python Development", "SQL"],
  "postedRelative": "1 week ago",
  "postedDate": "2026-05-16T05:42:06.471457+00:00",
  "role": "Full Stack Developer",
  "roleCategory": "Software Development",
  "department": "Engineering - Software & QA",
  "industry": "IT Services & Consulting",
  "employmentType": "Full Time, Permanent",
  "educationUG": "Any Graduate",
  "applicants": 1,
  "jobDescription": "We are looking for an experienced Python developer..."
}
```

### How to call this Naukri scraper from your code

#### From the Apify API (curl)

```bash
curl -X POST "https://api.apify.com/v2/acts/makework36~naukri-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "keywords",
    "keywords": ["data engineer"],
    "maxJobs": 100,
    "fetchDetails": false
  }'
```

#### From Python (apify-client)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("makework36/naukri-scraper").call(run_input={
    "mode": "keywords",
    "keywords": ["python developer", "react developer"],
    "maxJobs": 200,
    "fetchDetails": True,
    "workMode": "remote",
})

for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["companyName"], job["salaryUsdEstimate"])
```

#### From Node.js (apify-client)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('makework36/naukri-scraper').call({
    mode: 'keywords',
    keywords: ['devops engineer mumbai'],
    maxJobs: 100,
    fetchDetails: false,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} jobs`);
```

#### Export to CSV

```bash
curl "https://api.apify.com/v2/acts/makework36~naukri-scraper/runs/last/dataset/items?format=csv&token=$APIFY_TOKEN" \
  -o naukri_jobs.csv
```

### Performance & cost

The scraper runs on a stealth browser at 4 GB RAM. Typical performance:

| Mode | Time per page (20 jobs) | Time per detail | 100 jobs ETA |
|---|---:|---:|---:|
| Search only (fast) | ~7 s | — | ~35 s |
| With `fetchDetails=true` | ~7 s + 25 s/job | ~25 s | ~45 min |

Each search page returns 20 jobs. Pagination is automatic up to `maxJobs`. The detail-page fetch is slower because it loads the full job description, but it adds 9 premium fields that are not available in the search results.

### Naukri scraper comparison

| Feature | This actor | Browser-only (residential proxy) | Headless w/ proxy + captcha solver |
|---|:---:|:---:|:---:|
| Output fields | 30+ structured | 20–25 | 25 |
| Salary parsed to INR + USD | ✅ | ❌ | ❌ |
| Seniority field (fresher/junior/mid/senior/lead) | ✅ | ❌ | ❌ |
| Skills cleaned of UI noise | ✅ | ❌ | ❌ |
| Residential proxy required | ❌ | ✅ | ✅ |
| Captcha solver required | ❌ | ❌ | ✅ |
| Pricing model | PAY\_PER\_EVENT tiered | flat or rental | flat |

### Step-by-step tutorial — your first run in 3 minutes

1. Click **Try for free** at the top of this page.
2. In the input form, leave `mode` as `keywords`.
3. Replace the default keyword with one matching your niche (e.g. `"machine learning engineer"`).
4. Set `maxJobs` to `20` for a quick first run.
5. Leave `fetchDetails` off for the first test — saves time and compute.
6. Click **Start**. The run finishes in 30–60 seconds.
7. Open the dataset tab. You'll see a table view with company logos, titles, locations and salaries.
8. Click **Export** → choose CSV or JSON. Open in Excel or your tool of choice.
9. Once you're happy with the output, increase `maxJobs`, enable `fetchDetails` for richer data, or schedule a daily run.

### Advanced usage patterns

#### Pattern A — Daily talent radar

Schedule the actor with `keywords: ["your role"]`, `maxJobs: 50`, `fetchDetails: false`. Each morning you get a CSV in your inbox via Apify's email integration showing what's new in your niche.

#### Pattern B — Multi-city compensation report

Run with `keywords: ["python developer"]`, `cities: ["Bengaluru","Pune","Hyderabad","Mumbai","Delhi"]`, `fetchDetails: true`. Aggregate `salaryMin`/`salaryMax` by city to produce a salary heatmap.

#### Pattern C — Trending skills tracker

Weekly cron with `keywords` covering 5 broad role categories. Group jobs by `roleCategory`, count skill occurrences in the `skills` array. Top-trending skills emerge over time.

#### Pattern D — Recruiter outreach pipeline

Use `fetchDetails: true` to capture full description and `applicants` count. Filter jobs where `applicants < 10` (early-stage listings — your candidates have less competition). Export and prioritize for outreach.

#### Pattern E — B2B sales prospecting

Use the dataset to identify companies hiring specific roles (e.g. all companies hiring a "Head of Growth" in India). Combine with company website finders to build cold outreach lists.

### Troubleshooting

**My run takes too long with `fetchDetails: true`.**
The detail fetch adds ~25 s per job because the actor opens each listing's full page. For 1000 jobs with details, expect 7–8 hours. To go faster, run search-only mode first, then re-run only on jobs with missing salary using `mode: urls`.

**Some `salaryMin`/`salaryMax` come back null.**
Naukri lists "Not Disclosed" for ~80% of jobs in the search results. The `fetchDetails: true` mode raises that recovery rate dramatically because more listings expose salary on the detail page.

**I see `workMode: null` on most jobs.**
That's expected — Naukri only marks `Hybrid -` or `Remote` explicitly. Office-based jobs come through as plain locations and the field stays `null`. You can infer office-mode safely if `workMode is null && locations is not empty`.

**The actor returned 0 jobs for my keyword.**
Naukri requires the keyword in slug form. Try a more common phrasing (e.g. `"data scientist"` not `"data sciences specialist"`). Or use mode `urls` with a search URL pre-built on the website.

**My free credit ran out mid-run.**
Bump your account's free tier limit in the Apify console, or set a tighter `maxJobs` value. Each search page (20 jobs) costs much less than a single detail fetch.

**I want only specific industries (e.g. only fintech jobs).**
Pre-filter via the search URL by appending Naukri's industry filter (e.g. `&industry=BankingFinancialServicesInsurance`) and pass that URL via `searchUrls`.

### Pricing

This actor uses **PAY\_PER\_EVENT** pricing with tiered volume discounts. You pay only for what you extract; no monthly subscriptions, no idle costs.

| Tier | Standard job (search only) | Detailed job (with fetchDetails) |
|:-----|---:|---:|
| FREE | $3.50 / 1K | $9.50 / 1K |
| BRONZE | $2.50 / 1K | $7.00 / 1K |
| SILVER | $1.80 / 1K | $5.00 / 1K |
| GOLD | $1.20 / 1K | $3.50 / 1K |
| PLATINUM | $0.90 / 1K | $2.80 / 1K |
| DIAMOND | $0.65 / 1K | $2.50 / 1K |

Plus a one-time **$0.001 per actor run** for initialization. A typical run of 200 standard jobs costs $0.70 (FREE tier) or as little as $0.13 (DIAMOND).

### FAQ

**Does this Naukri scraper work for international users?**
Yes. The `salaryUsdEstimate` field provides converted ranges in USD so compensation comparisons across markets work without manual conversion. The actor runs from Apify's datacenter so you don't need any India-located infrastructure.

**Is scraping Naukri.com legal?**
This actor accesses publicly available pages — no login, no bypassing paywalls, no scraping of user accounts. Always check the target site's terms of service before deploying at scale and consult legal counsel for your jurisdiction.

**How fresh is the data?**
The scraper fetches in real time when you run it. Job listings on Naukri update continuously throughout the day. Schedule the actor as frequently as your use case demands.

**Can I scrape Naukri without writing code?**
Yes. Use the input form on this page, click Start, then download the results as CSV or Excel. No Python or Node required.

**Why don't I see `educationPG` for every job?**
Naukri only lists postgraduate requirements when relevant. Roles that don't require a PG show `null` for `educationPG`. The `educationUG` field is more consistently populated.

**Does the actor handle pagination automatically?**
Yes. Set `maxJobs` to your desired total and the scraper paginates internally until it reaches the cap or runs out of results, whichever comes first.

**Can I scrape jobs from a specific company?**
Yes — use `mode: urls` and pass the company's Naukri career page URL (e.g. `https://www.naukri.com/cognizant-jobs-careers-2114`). The scraper treats it like any search page.

**What if Naukri changes its HTML structure?**
The scraper uses defensive selectors and DOM extraction. When Naukri pushes a layout change, fixes typically land within 24–48 hours. Use the Issues tab to report problems.

**Is there a rate limit?**
The actor inserts a ~0.5 s delay between pages and 1–2 s between detail fetches to stay polite. For large runs (>1000 jobs), consider splitting across multiple Apify Tasks scheduled minutes apart.

**Does this support Naukri's company review/AmbitionBox data?**
The scraper extracts `companyRating` and `companyReviewsCount` directly from the search results. A separate dedicated AmbitionBox scraper is on the roadmap.

### Changelog

- **0.1** (2026-05) — Initial release. Search mode + detail mode. 30+ fields. Tiered pricing.

### Related scrapers from the same author

- [`makework36/trustpilot-reviews-scraper`](https://apify.com/makework36/trustpilot-reviews-scraper) — Trustpilot business reviews
- [`makework36/google-maps-scraper-full`](https://apify.com/makework36/google-maps-scraper-full) — Google Maps places with contact info
- [`makework36/flight-price-scraper`](https://apify.com/makework36/flight-price-scraper) — Multi-source flight data
- [`makework36/vrbo-scraper`](https://apify.com/makework36/vrbo-scraper) — Vacation rentals

### Legal & ethics note

This Naukri scraper is intended for **authorized data collection** on publicly available information. It does not bypass authentication, paywalls, or extract personally identifiable information beyond what is shown publicly. Users are responsible for complying with Naukri.com's [terms of use](https://www.naukri.com/terms-conditions), India's [Information Technology Act](https://en.wikipedia.org/wiki/Information_Technology_Act,_2000), and any data protection regulations applicable in their jurisdiction (e.g. GDPR, CCPA). The author of this actor takes no responsibility for misuse.

# Actor input Schema

## `mode` (type: `string`):

How to fetch jobs. 'keywords' searches Naukri by keyword. 'urls' takes specific search URLs.

## `keywords` (type: `array`):

Keywords to search (e.g. 'python developer', 'data scientist mumbai'). Slugs are auto-built.

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

Direct Naukri search URLs (advanced). Used when mode = urls.

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

Maximum jobs per keyword/URL. Naukri shows 20 per page; the scraper paginates until this cap.

## `fetchDetails` (type: `boolean`):

If true, opens each job detail page to extract salary, role, industry, education, applicants. Slower and more expensive but ~35 fields.

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

Filter by work arrangement.

## `experienceMin` (type: `integer`):

Filter jobs requiring at least this many years.

## `experienceMax` (type: `integer`):

Filter jobs requiring at most this many years.

## `cities` (type: `array`):

Optional whitelist of cities. Empty = no filter. Matches against parsed locations\[].

## Actor input object example

```json
{
  "mode": "keywords",
  "keywords": [
    "python developer"
  ],
  "searchUrls": [],
  "maxJobs": 50,
  "fetchDetails": false,
  "workMode": "any",
  "experienceMin": 0,
  "experienceMax": 40,
  "cities": []
}
```

# 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("makework36/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 = {}

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Naukri Scraper - Jobs, Salaries, Companies India",
        "description": "Scrape Naukri.com jobs in India: title, company, salary, skills, location, role, industry. 30+ fields per job. Filter by keyword, location, experience, work mode.",
        "version": "0.1",
        "x-build-id": "mMYhznSNcLDIAuF1c"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/makework36~naukri-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-makework36-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/makework36~naukri-scraper/runs": {
            "post": {
                "operationId": "runs-sync-makework36-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/makework36~naukri-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-makework36-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "keywords",
                            "urls"
                        ],
                        "type": "string",
                        "description": "How to fetch jobs. 'keywords' searches Naukri by keyword. 'urls' takes specific search URLs.",
                        "default": "keywords"
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "Keywords to search (e.g. 'python developer', 'data scientist mumbai'). Slugs are auto-built.",
                        "default": [
                            "python developer"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Direct Naukri search URLs (advanced). Used when mode = urls.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxJobs": {
                        "title": "Max jobs",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum jobs per keyword/URL. Naukri shows 20 per page; the scraper paginates until this cap.",
                        "default": 50
                    },
                    "fetchDetails": {
                        "title": "Fetch detailed job info",
                        "type": "boolean",
                        "description": "If true, opens each job detail page to extract salary, role, industry, education, applicants. Slower and more expensive but ~35 fields.",
                        "default": false
                    },
                    "workMode": {
                        "title": "Work mode filter",
                        "enum": [
                            "any",
                            "remote",
                            "hybrid",
                            "office"
                        ],
                        "type": "string",
                        "description": "Filter by work arrangement.",
                        "default": "any"
                    },
                    "experienceMin": {
                        "title": "Min experience (years)",
                        "minimum": 0,
                        "maximum": 40,
                        "type": "integer",
                        "description": "Filter jobs requiring at least this many years.",
                        "default": 0
                    },
                    "experienceMax": {
                        "title": "Max experience (years)",
                        "minimum": 0,
                        "maximum": 40,
                        "type": "integer",
                        "description": "Filter jobs requiring at most this many years.",
                        "default": 40
                    },
                    "cities": {
                        "title": "City filter (post-extract)",
                        "type": "array",
                        "description": "Optional whitelist of cities. Empty = no filter. Matches against parsed locations[].",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
