# India Jobs Feed | Naukri + 9 Indian Job Boards in One API (`data_daemon/india-jobs-feed`) Actor

One search across Naukri, IIMJobs, Hirist, foundit, Instahyre, Shine, Cutshort, Apna, WorkIndia and Unstop. One schema: company, city, remote/onsite, experience, salary in LPA, skills, posting date. Cross-board duplicates folded. Only-new mode for daily feeds. No login.

- **URL**: https://apify.com/data_daemon/india-jobs-feed.md
- **Developed by:** [Daemon Data](https://apify.com/data_daemon) (community)
- **Categories:** Jobs, Lead generation, 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 Feed** runs **one job search across ten Indian job boards** (Naukri, IIMJobs, Hirist, foundit, Instahyre, Shine, Cutshort, Apna, WorkIndia and Unstop) and returns the results **in one schema**: job title, company, city, remote/onsite, experience range, **salary in LPA** (monthly pay converted, odd units flagged), skills, posting date, job link and, optionally, the full description. The same job posted on two boards is kept once and the other listing goes into `alsoListedOn`. An **only-new mode** turns it into a daily feed of new jobs from all ten boards. No login, no subscription: you pay only each board's own per-job price.

### What can you do with an India jobs feed?

| Who | What they get | Typical input |
|---|---|---|
| Job boards, alert apps and aggregators | Every new job from ten boards each morning, deduplicated, in one schema, ready to load | `keywords: []`, `onlyNewSinceLastRun: true`, `maxJobsPerBoard: 5000`, daily schedule |
| Recruiters and staffing agencies | All new "data analyst" or "telecaller" openings in their city, from tech, management and blue-collar boards at once | `keywords`, `locations`, `postedWithinDays: 1` |
| Salary and labour-market analysts | Advertised pay by role and city across boards, already in LPA | `keywords`, `includeDescription: false`, export to Sheets/BigQuery |
| Sales teams (HR tech, background checks, staffing) | Companies hiring for a role right now, across boards | `keywords: ["sales manager"]`, `postedWithinDays: 7` |
| Job seekers and career tools | One list instead of ten tabs, newest first, with experience bands | `keywords`, `minExperience`, `maxExperience` |

### How to search all Indian job boards at once

1. Open the **Input** tab, type job titles or skills under **Job titles or skills** (e.g. `data analyst`, `product manager`, `telecaller`) and, optionally, cities.
2. Pick the boards (all ten by default) and the posting window (7 days by default).
3. Click **Start**. The merged jobs appear in the **Output** tab, newest first; download them as JSON, CSV, Excel or HTML, or read them through the API.
4. For a daily feed, turn on **Only new jobs since the last run** and add a schedule. Each board then delivers (and charges) a job once.

An empty input `{}` searches `data analyst` jobs from the last 7 days on all ten boards, up to 20 per board.

### Which boards are included?

| Board | Strong for | Read by |
|---|---|---|
| [Naukri](https://www.naukri.com) | India's largest board, all sectors, about 12,000 new jobs a day | [Naukri Jobs Scraper](https://apify.com/data_daemon/naukri-jobs-scraper) |
| [IIMJobs](https://www.iimjobs.com) | management, finance, consulting, MBA roles | [IIMJobs Scraper](https://apify.com/data_daemon/iimjobs-jobs-scraper) |
| [Hirist](https://www.hirist.tech) | software and tech roles | [Hirist Jobs Scraper](https://apify.com/data_daemon/hirist-jobs-scraper) |
| [foundit](https://www.foundit.in) (Monster India) | all sectors, large volume | [foundit Jobs Scraper](https://apify.com/data_daemon/foundit-jobs-scraper) |
| [Instahyre](https://www.instahyre.com) | tech jobs at startups and product companies | [Instahyre Jobs Scraper](https://apify.com/data_daemon/instahyre-jobs-scraper) |
| [Shine](https://www.shine.com) | all sectors | [Shine Jobs Scraper](https://apify.com/data_daemon/shine-jobs-scraper) |
| [Cutshort](https://cutshort.io) | startup and tech roles, shown salary bands | [Cutshort Jobs Scraper](https://apify.com/data_daemon/cutshort-jobs-scraper) |
| [Apna](https://apna.co) | entry-level, sales, telecalling, delivery, field jobs | [Apna Jobs Scraper](https://apify.com/data_daemon/apna-jobs-scraper) |
| [WorkIndia](https://www.workindia.in) | blue-collar jobs with monthly pay | [WorkIndia Jobs Scraper](https://apify.com/data_daemon/workindia-jobs-scraper) |
| [Unstop](https://unstop.com) | fresher jobs | [Unstop Scraper](https://apify.com/data_daemon/unstop-scraper) |

Each board is read by its own Actor, which runs in your Apify account. India Jobs Feed plans the searches, waits for them, converts every row to one schema and folds duplicates. You can open each board's run from `sourceRunId` or the `RUN-SUMMARY` record.

### Input

| Field | What it does |
|---|---|
| `keywords` | Job titles or skills, searched on every selected board. Empty (or `*`) = every new job on each board in the window (whole-board mode). |
| `boards` | Any of `naukri`, `iimjobs`, `hirist`, `foundit`, `instahyre`, `shine`, `cutshort`, `apna`, `workindia`, `unstop`. Default: all ten. |
| `locations` | Cities (`Bangalore`, `Mumbai`, `Delhi NCR`, `Pune`...). Empty = all of India. |
| `postedWithinDays` | Posting window in days (default 7). Apna uses its nearest window (1, 3 or 7 days). |
| `minExperience`, `maxExperience` | Experience in years, on the boards that support a range (IIMJobs, Hirist, foundit, Instahyre, Cutshort; up to 30). Shine, Apna, WorkIndia and Unstop are not filtered by experience. |
| `maxJobsPerBoard` | Cap per board and run (default 20). Also caps your cost. |
| `includeDescription` | Adds the full job description text. |
| `dedupeAcrossBoards` | Keep a job posted on two boards once (default on). |
| `onlyNewSinceLastRun`, `stateName` | Daily-feed mode: each board remembers what it delivered for this search and skips it next time (not charged). |
| `maxCostPerBoardUsd` | Spending cap for each board's run (default $1). |
| `maxConcurrentBoards` | Board runs in parallel (default 3; each uses 512 MB of your account's memory). |

```json
{
    "keywords": ["data analyst", "business analyst"],
    "locations": ["Bangalore"],
    "postedWithinDays": 3,
    "maxJobsPerBoard": 50,
    "onlyNewSinceLastRun": true
}
```

### Output

One row per job, newest first. You can download the dataset as JSON, CSV, Excel, XML or HTML.

```json
{
    "id": "cutshort:6adf1ee5930b55361c963e6b",
    "board": "cutshort",
    "boardName": "Cutshort",
    "url": "https://cutshort.io/job/Data-Engineer-Kochi-Cochin-Thiruvananthapuram-...",
    "applyUrl": "https://cutshort.io/job/Data-Engineer-Kochi-Cochin-Thiruvananthapuram-...",
    "title": "Data Engineer",
    "company": "Thomasmount Consulting",
    "locations": ["Kochi (Cochin)", "Thiruvananthapuram"],
    "workMode": "onsite",
    "employmentType": "full_time",
    "experienceMinYears": 5,
    "experienceMaxYears": 9,
    "salaryMinInrPerYear": 1000000,
    "salaryMaxInrPerYear": 2000000,
    "salaryMinLpa": 10,
    "salaryMaxLpa": 20,
    "salarySourcePeriod": "year",
    "salaryText": "₹10L - ₹20L / yr",
    "salaryNote": null,
    "skills": ["Amazon Web Services (AWS)", "Python", "PySpark"],
    "postedAt": "2026-10-26T09:35:33.829Z",
    "alsoListedOn": [],
    "sourceRunId": "…",
    "scrapedAt": "2026-10-31T18:37:54.653Z"
}
```

#### Data fields

| Field | Description |
|---|---|
| `id`, `board`, `boardName`, `boardJobId` | Stable feed id (`board:jobId`) and where the job came from |
| `url`, `applyUrl` | Job page and apply link |
| `title`, `company`, `companyUrl` | Job and hiring company (`(confidential)` when the board hides it) |
| `locations`, `workMode` | Cities; `remote`, `hybrid`, `onsite` or `field` when the board says |
| `employmentType` | Full time, internship, part time... as the board words it |
| `experienceMinYears`, `experienceMaxYears` | Experience range asked |
| `salaryMinInrPerYear`, `salaryMaxInrPerYear`, `salaryMinLpa`, `salaryMaxLpa` | Pay converted to rupees per year and LPA (monthly pay × 12) |
| `salarySourcePeriod`, `salaryText`, `salaryNote` | The board's unit and wording, and why a figure was left unconverted |
| `skills` | Skills or tags |
| `postedAt` | Posting date (Apna's can be the employer's refresh date) |
| `description` | Full description (only with `includeDescription`) |
| `alsoListedOn` | The same job on other boards |
| `sourceRunId`, `scrapedAt` | The board run the row came from, and when it was read |

### How much does it cost to scrape Indian job boards?

India Jobs Feed adds **no fee of its own**: it uses a little platform compute (512 MB while it waits, about $0.006 for the default run) and each board's Actor charges its usual per-job price in your account:

| Board | Price per 1,000 jobs | Per board run |
|---|---|---|
| Naukri, foundit, Instahyre, Shine, Cutshort, Apna, WorkIndia | $0.80 | + $0.001 start |
| Unstop | $1.50 | + $0.001 start |
| IIMJobs, Hirist (description included) | $2.00 | + $0.001 start |

The default `{}` run (20 jobs per board, ten boards) costs at most about **$0.24**. A daily feed of 1,000 new jobs a day spread over the $0.80 boards costs about $0.80 a day. Set `maxJobsPerBoard` and `maxCostPerBoardUsd` to cap any run; with only-new mode, jobs already delivered are not charged again. Apify's free plan includes $5 of monthly credit.

### Tips

- **Daily feed:** empty `keywords`, `onlyNewSinceLastRun: true`, `postedWithinDays: 2`, a high `maxJobsPerBoard`, and a daily schedule. Load the dataset into Sheets, BigQuery or your database through an integration or the API.
- **Whole-board mode per board:** with empty keywords IIMJobs, Hirist, foundit, Instahyre, Apna, Cutshort, WorkIndia and Unstop list their newest jobs; Shine's empty search is not sorted by date, so it returns only the few recent jobs on its first page (add keywords for Shine). Apna's 24-hour window also includes older jobs the employer refreshed (`postedAt` keeps the original date).
- **Pick boards by audience:** tech hiring = Hirist, Instahyre, Cutshort, foundit; management = IIMJobs; mass and entry-level hiring = Apna, WorkIndia, Shine; freshers = Unstop.
- **Faster runs:** raise `maxConcurrentBoards` (up to 9) if your account has memory to spare. A board run that cannot start (no free memory) or runs past its time is stopped by the feed, and the jobs it already saved are kept.
- **Stopping a run:** a graceful abort also stops the board runs; a hard abort leaves them to finish, each within its `maxCostPerBoardUsd` cap.
- **Board-specific filters** (salary floor, department, company size, shifts) live in each board's own Actor; use it directly when you need them.

### FAQ

#### Is there an API for Indian job boards like IIMJobs, foundit or Apna?

We found no documented public API for reading job listings on these boards (checked November 2026). India Jobs Feed gives you one REST API over ten of them: start a run with `POST https://api.apify.com/v2/acts/data_daemon~india-jobs-feed/runs` and read the dataset items, or use the Apify Python/JavaScript clients, Make, Zapier, n8n or the Apify MCP server.

#### How is a job posted on two boards handled?

When the title and the named company match on two boards and the job is in at least one of the same cities (Bangalore and Bengaluru count as one), the job is kept once, from the board listed first in `boards`, and the other listing (board, link, id) goes into `alsoListedOn`. Jobs from a hidden or "confidential" employer are never folded, and the same title from one employer in different cities stays as separate rows.

#### Why is the salary empty for some jobs?

Many employers hide pay (common on IIMJobs, Hirist and Instahyre). Pay quoted per hour, per task or in another currency is kept in `salaryText` but not converted. Apna shows what the employer typed; when an Apna "monthly" figure looks yearly (₹1.5 lakh or more a month for an entry-level job), it is left unconverted with a `salaryNote`.

#### Why does a board show fewer jobs than I expected?

Each board has its own search; a keyword that suits Hirist (`kubernetes`) may find nothing on WorkIndia. The status message and `RUN-SUMMARY` list jobs per board. Naukri, LinkedIn and Indeed are not included.

#### Is it legal to scrape job listings?

The feed reads publicly visible job listings, the same information any visitor sees, without logging in; it does not collect recruiter contact details. Check that your use complies with the laws that apply to you.

#### Something is wrong or missing?

Open an issue on the **Issues** tab with your input and the run link, and it will be looked at. Custom fields or another Indian board can be discussed there too.

### Related Actors

- [IIMJobs Scraper](https://apify.com/data_daemon/iimjobs-jobs-scraper): management and finance jobs with full filters
- [Hirist Jobs Scraper](https://apify.com/data_daemon/hirist-jobs-scraper): tech jobs, whole-board feed
- [foundit Jobs Scraper](https://apify.com/data_daemon/foundit-jobs-scraper): Monster India jobs with salary filters
- [Apna Jobs Scraper](https://apify.com/data_daemon/apna-jobs-scraper): entry-level and blue-collar jobs by department
- [India New Company Registrations](https://apify.com/data_daemon/india-new-company-registrations): companies incorporated each day
- [All Daemon Data Actors](https://apify.com/data_daemon)

# Actor input Schema

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

What to search on every board, e.g. `data analyst`, `product manager`, `telecaller`. Each keyword is searched on each selected board. Leave empty (or use `*`) for every new job on each board in the posting window.

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

Boards to search. Each board is read by its own Daemon Data Actor in your account at that Actor's per-job price (see Pricing in the README). Default: all ten.

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

Cities, e.g. `Bangalore`, `Mumbai`, `Delhi NCR`. Leave empty for all of India. Each board matches city names its own way (Bangalore and Bengaluru both work on most).

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

Only jobs posted in this window. Apna offers 1, 3 or 7 days (or any), so it uses the nearest window that covers yours.

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

Jobs that accept at least this many years of experience (IIMJobs, Hirist, foundit, Instahyre, Cutshort; values above 30 count as 30). Shine, Apna, WorkIndia and Unstop are not filtered by experience.

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

Upper bound of experience (IIMJobs, Hirist, foundit, Instahyre, Cutshort).

## `maxJobsPerBoard` (type: `integer`):

Cap on jobs saved from each board in one run. The board Actors charge per job, so this caps your cost too. Raise it (e.g. 5000) with empty keywords for a whole-board daily feed.

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

Add the full job description text to each row. Same price; runs take a little longer.

## `dedupeAcrossBoards` (type: `boolean`):

A job with the same title, the same named company and a city in common on two boards is kept once (from the board listed first in Job boards); the other listings go into `alsoListedOn`.

## `onlyNewSinceLastRun` (type: `boolean`):

For scheduled daily feeds: each board remembers the jobs it already delivered for this same search and skips (and does not charge) them next time.

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

With only-new mode, a name for this feed's memory, e.g. `daily-analyst-feed`. Leave empty to derive it from the search, so the same search shares one memory.

## `maxCostPerBoardUsd` (type: `number`):

Spending cap passed to each board's run. A board stops (keeping what it saved) when it reaches this.

## `maxConcurrentBoards` (type: `integer`):

How many board runs go in parallel (each uses 512 MB of your account's memory).

## Actor input object example

```json
{
  "keywords": [
    "data analyst"
  ],
  "boards": [
    "naukri",
    "iimjobs",
    "hirist",
    "foundit",
    "instahyre",
    "shine",
    "cutshort",
    "apna",
    "workindia",
    "unstop"
  ],
  "locations": [],
  "postedWithinDays": 7,
  "maxJobsPerBoard": 20,
  "includeDescription": false,
  "dedupeAcrossBoards": true,
  "onlyNewSinceLastRun": false,
  "maxCostPerBoardUsd": 1,
  "maxConcurrentBoards": 3
}
```

# Actor output Schema

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

Merged jobs from all boards as JSON items (also CSV, Excel, XML).

## `runSummary` (type: `string`):

RUN-SUMMARY record: each board's run id, status, jobs and usage, plus duplicates folded.

# 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 = {
    "keywords": [
        "data analyst"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_daemon/india-jobs-feed").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 = { "keywords": ["data analyst"] }

# Run the Actor and wait for it to finish
run = client.actor("data_daemon/india-jobs-feed").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 '{
  "keywords": [
    "data analyst"
  ]
}' |
apify call data_daemon/india-jobs-feed --silent --output-dataset

```

## MCP server setup

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

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/4i5PwMsrMLQ4GCFxH/builds/pMY1xa2gFElaDXals/openapi.json
