# India Jobs MCP | Naukri, IIMJobs, Hirist + 7 Boards (`data_daemon/india-jobs-mcp`) Actor

MCP server for Claude, Cursor and other AI agents: search Naukri, IIMJobs, Hirist, foundit, Instahyre, Shine, Cutshort, Apna, WorkIndia and Unstop. Tools: search_jobs, search_all_boards, new_jobs_since, list_boards. Salary in LPA, experience, skills. Pay only each board's per-job price.

- **URL**: https://apify.com/data_daemon/india-jobs-mcp.md
- **Developed by:** [Daemon Data](https://apify.com/data_daemon) (community)
- **Categories:** Jobs, MCP servers, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## 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/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**India Jobs MCP** is an **MCP server for AI agents** (Claude, Cursor, VS Code and any client that speaks the Model Context Protocol) that **searches ten Indian job boards**: **Naukri, IIMJobs, Hirist**, foundit, Instahyre, Shine, Cutshort, Apna, WorkIndia and Unstop. Your agent asks for "product manager jobs in Bangalore posted this week" and gets back one compact list: title, company, city, remote/onsite, **experience in years, salary in LPA**, skills, posting date and the job link, with the same job on two boards folded into one. A **`new_jobs_since` watch** returns only jobs the agent has not seen before, for daily alerts. **No fee of its own**: each search runs that board's Daemon Data Actor in your Apify account at the board's per-job price (20 Naukri jobs cost about $0.017).

### What can an agent do with India Jobs MCP?

| You ask your agent | Tool it calls |
|---|---|
| "Find 20 data engineer jobs on Hirist posted in the last 3 days" | `search_jobs` (board `hirist`) |
| "Which companies are hiring product managers in Bangalore this week, on every board?" | `search_all_boards` |
| "Every morning, tell me the new finance jobs on IIMJobs and Naukri in Mumbai" | `new_jobs_since` (stateName `finance-mumbai`) |
| "Compare the pay for telecaller jobs in Pune on Apna and WorkIndia" | `search_all_boards` (boards `apna`, `workindia`) |
| "Which board should I use for MBA roles, and what does it cost?" | `list_boards` |

Typical users: **recruiters and staffing teams** sourcing openings by role and city, **HR-tech and job-alert builders** who need a daily India feed inside an agent, **career coaches and job seekers** who want one list instead of ten tabs, and **analysts** tracking advertised salaries in LPA.

### Tools

| Tool | What it does | Main arguments | Cost |
|---|---|---|---|
| `search_jobs` | One board, newest jobs first | `board` (one of the ten), `keywords`, `city`, `postedWithinDays` (1-30), `max` (1-100, default 20), `minExperience`, `maxExperience`, `includeDescription` | the board's per-job price x jobs + $0.001 |
| `search_all_boards` | Several boards in parallel, merged and deduplicated | same, plus `boards` (default all ten), `maxPerBoard` (1-50, default 10) | sum of the boards' prices |
| `new_jobs_since` | Only jobs not returned before under the same `stateName`; jobs already seen are skipped and not charged | `stateName` (required), `boards`, `keywords`, `city`, `maxPerBoard` (1-100, default 20) | same as above, new jobs only |
| `get_results` | Reads board runs that were still running when a search answered (`pendingRunIds`) | `runIds` (up to 10) | free |
| `list_boards` | The ten boards, what each is strong for, and the **live per-job price** read from each board Actor's current pricing | none | free |

Every tool answers within `waitSecs` (10-110 s, default 50) so it fits common MCP client timeouts. Most boards answer in 5-20 s. Instahyre reads every job page and takes about two minutes for 20 jobs: the search then returns what is ready plus `pendingRunIds`, and `get_results` collects the rest.

### How to connect India Jobs MCP to Claude, Cursor or VS Code

You need an [Apify account](https://console.apify.com/sign-up) (the free plan includes monthly credit) and your API token from [Console > Settings > API & Integrations](https://console.apify.com/settings/integrations).

**MCP server URL (Streamable HTTP):**

```
https://data-daemon--india-jobs-mcp.apify.actor/mcp
```

Send the token in the header `Authorization: Bearer <YOUR_APIFY_TOKEN>`.

**Cursor** (`~/.cursor/mcp.json`):

```json
{
    "mcpServers": {
        "india-jobs": {
            "url": "https://data-daemon--india-jobs-mcp.apify.actor/mcp",
            "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
        }
    }
}
```

**VS Code** (`.vscode/mcp.json`):

```json
{
    "servers": {
        "india-jobs": {
            "type": "http",
            "url": "https://data-daemon--india-jobs-mcp.apify.actor/mcp",
            "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
        }
    }
}
```

**Claude Desktop** (`claude_desktop_config.json`, through the `mcp-remote` bridge for header authentication):

```json
{
    "mcpServers": {
        "india-jobs": {
            "command": "npx",
            "args": ["-y", "mcp-remote", "https://data-daemon--india-jobs-mcp.apify.actor/mcp", "--header", "Authorization:${AUTH_HEADER}"],
            "env": { "AUTH_HEADER": "Bearer <YOUR_APIFY_TOKEN>" }
        }
    }
}
```

**Through the Apify MCP server:** connect to the [Apify MCP server](https://mcp.apify.com) with `https://mcp.apify.com/?tools=data_daemon/india-jobs-mcp` and the five tools appear as `data_daemon--india-jobs-mcp--search_jobs`, `...--search_all_boards`, `...--new_jobs_since`, `...--get_results` and `...--list_boards`. An agent already connected to the Apify MCP server can also find this Actor in Store search and call its tools by name.

### Output

Each tool returns a one-line `summary`, the `jobs` (newest first), `boardRuns` (the run in your account for each board, with status and job count) and `pendingRunIds`. One job from a real `search_jobs` call (Hirist, "python developer", 5 November 2026):

```json
{
    "id": "hirist:1682499",
    "board": "Hirist",
    "title": "Python Engineer - Data Processing",
    "company": "CRESCENDO GLOBAL LEADERSHIP HIRING INDIA PRIVATE L",
    "locations": "Noida",
    "experienceMinYears": 4,
    "experienceMaxYears": 8,
    "skills": "Python, Data Engineering, Pandas, Numpy, SQL, OOPS",
    "postedAt": "2026-11-05",
    "url": "https://www.hirist.tech/j/python-engineer-data-processing-1682499"
}
```

| Field | Meaning |
|---|---|
| `id` | `board:jobId`, stable across calls |
| `board`, `title`, `company`, `locations` | as posted; cities comma-separated |
| `workMode`, `employmentType` | remote / hybrid / onsite / field, full time / internship..., when the board says |
| `experienceMinYears`, `experienceMaxYears` | experience range in years |
| `salaryMinLpa`, `salaryMaxLpa` | pay in lakh INR per year (monthly pay converted); `salaryText` when no yearly figure can be computed |
| `skills` | up to 10 skills |
| `postedAt` | posting date, `YYYY-MM-DD` |
| `url`, `applyUrl` | job page; apply link when it differs |
| `alsoListedOn` | other boards with the same job |
| `description` | with `includeDescription`, cut to 1,500 characters |

Empty fields are left out to keep answers short for the agent's context.

### How much does India Jobs MCP cost?

**The server charges nothing.** Each search starts the board's own Daemon Data Actor in your Apify account, and that Actor charges its per-job price there (Apify Free and Starter plan prices on 5 November 2026; higher plans pay less, and `list_boards` always shows the live figures):

| Board | Strong for | Price per job | 20 jobs |
|---|---|---|---|
| [Naukri](https://apify.com/data_daemon/naukri-jobs-scraper) | India's largest board, all sectors | $0.0008 | $0.017 |
| [IIMJobs](https://apify.com/data_daemon/iimjobs-jobs-scraper) | management, finance, MBA | $0.002 | $0.041 |
| [Hirist](https://apify.com/data_daemon/hirist-jobs-scraper) | software and tech | $0.002 | $0.041 |
| [foundit](https://apify.com/data_daemon/foundit-jobs-scraper) | all sectors (formerly Monster India) | $0.0008 | $0.017 |
| [Instahyre](https://apify.com/data_daemon/instahyre-jobs-scraper) | tech at startups and product companies | $0.0008 | $0.017 |
| [Shine](https://apify.com/data_daemon/shine-jobs-scraper) | all sectors | $0.0008 | $0.017 |
| [Cutshort](https://apify.com/data_daemon/cutshort-jobs-scraper) | startup and tech roles, salary bands | $0.0008 | $0.017 |
| [Apna](https://apify.com/data_daemon/apna-jobs-scraper) | entry-level, sales, telecalling, field jobs | $0.0008 | $0.017 |
| [WorkIndia](https://apify.com/data_daemon/workindia-jobs-scraper) | blue-collar jobs with monthly pay | $0.0008 | $0.017 |
| [Unstop](https://apify.com/data_daemon/unstop-scraper) | fresher jobs (charged per opportunity) | $0.0015 | $0.031 |

The 20-job column includes the $0.001 start fee of each board run. A `search_all_boards` call with 10 jobs from each of the ten boards costs about $0.12. The server itself runs in your account as an Apify Standby run (256 MB, stops 3 minutes after the last call), billed as ordinary platform usage of a fraction of a cent per session.

### Limits

- `postedWithinDays` 1-30 (Naukri's limit); Apna rounds to 1, 3 or 7 days.
- Up to 5 keywords and 5 cities per call, comma-separated. Empty keywords = the newest jobs on each board in the window.
- `max` 1-100 per board for `search_jobs` and `new_jobs_since`, 1-50 per board for `search_all_boards`.
- Experience filters apply on Naukri (minimum only), IIMJobs, Hirist, foundit, Instahyre and Cutshort; Shine, Apna, WorkIndia and Unstop are not filtered by experience.
- Each board run uses 512 MB of your account's memory while it runs (all ten at once: 5 GB). If your account is at its memory limit, the server retries until `waitSecs` ends.
- Cutshort searches by skill and role names (`react`, `product-manager`); a free-text phrase may return fewer jobs.

### Normal runs (without an MCP client)

The Actor also works as a regular run from the Console, the API or a schedule: pick a `tool` and its fields on the **Input** tab, and the jobs land in the dataset (JSON, CSV, Excel), with the full answer in the `OUTPUT` record. An empty input `{}` runs `search_jobs` for `python developer` on Hirist, 10 jobs.

### FAQ

**Which account pays for the board runs?** Yours. The MCP server runs in your Apify account with your token, and the board Actors it starts run there too, so you can open every run in the Console from `boardRuns[].runId`.

**Is LinkedIn or Indeed included?** No. The ten boards above are the Indian boards Daemon Data maintains Actors for.

**How does `new_jobs_since` remember what it returned?** Each board Actor keeps a small record per `stateName` in your account's storage. The same name continues the watch; a new name starts fresh.

**Is it legal to collect this data?** The boards' public job listings are read without logging in, and no personal data of candidates is collected. Check the terms that apply to your use.

**Something wrong or a board missing?** Open an issue on the **Issues** tab with the tool call that produced it.

### Related Actors

- [India Jobs Feed](https://apify.com/data_daemon/india-jobs-feed): the same ten boards as a batch Actor for scheduled feeds and exports.
- [IIMJobs Scraper](https://apify.com/data_daemon/iimjobs-jobs-scraper), [Naukri Jobs Scraper](https://apify.com/data_daemon/naukri-jobs-scraper), [Hirist Jobs Scraper](https://apify.com/data_daemon/hirist-jobs-scraper): single-board Actors with every field and full descriptions.
- [All Daemon Data Actors](https://apify.com/data_daemon)

# Actor input Schema

## `tool` (type: `string`):

What a normal run does. `search_jobs`: one board. `search_all_boards`: several boards, merged. `new_jobs_since`: only jobs not returned before under the same `stateName`. `list_boards`: boards and live prices (starts no board run). `get_results`: read board runs by ID.

## `board` (type: `string`):

The board for `search_jobs`. Each board is read by its own Daemon Data Actor in your account at its per-job price.

## `keywords` (type: `string`):

Comma-separated, up to 5, e.g. `data analyst, business analyst`. Empty = the newest jobs on each board in the posting window.

## `city` (type: `string`):

Comma-separated, up to 5, e.g. `Bangalore, Pune`. Empty = all of India.

## `postedWithinDays` (type: `integer`):

1-30. Apna uses its nearest window (1, 3 or 7 days).

## `max` (type: `integer`):

Jobs to return from the board, 1-100. Also caps the cost.

## `boards` (type: `array`):

Boards to search. Empty = all ten.

## `maxPerBoard` (type: `integer`):

1-50 for search_all_boards (default 10), 1-100 for new_jobs_since (default 20).

## `stateName` (type: `string`):

Name of the saved search, e.g. `pm-bangalore`. Letters, digits, dashes; up to 40 characters. The same name returns only jobs not returned before.

## `minExperience` (type: `integer`):

0-30. Used by Naukri, IIMJobs, Hirist, foundit, Instahyre and Cutshort.

## `maxExperience` (type: `integer`):

0-30. Used by IIMJobs, Hirist, foundit, Instahyre and Cutshort.

## `includeDescription` (type: `boolean`):

Adds the description, cut to 1,500 characters.

## `runIds` (type: `array`):

Run IDs from `pendingRunIds` of an earlier search.

## Actor input object example

```json
{
  "tool": "search_jobs",
  "board": "hirist",
  "keywords": "python developer",
  "postedWithinDays": 7,
  "max": 10,
  "includeDescription": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Jobs from the board runs, newest first (or the board list for list_boards).

## `output` (type: `string`):

OUTPUT record: the full tool answer, with each board run's ID and status.

# 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 = {
    "tool": "search_jobs",
    "board": "hirist",
    "keywords": "python developer"
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_daemon/india-jobs-mcp").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 = {
    "tool": "search_jobs",
    "board": "hirist",
    "keywords": "python developer",
}

# Run the Actor and wait for it to finish
run = client.actor("data_daemon/india-jobs-mcp").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 '{
  "tool": "search_jobs",
  "board": "hirist",
  "keywords": "python developer"
}' |
apify call data_daemon/india-jobs-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_daemon/india-jobs-mcp"
        }
    }
}
```

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/0mCza1qIWqj6fu3uj/builds/qXftcxd30UDDMLMWM/openapi.json
