# iimjobs Jobs Scraper: MBA and Management Jobs in India (`nanoscrape/iimjobs-jobs-scraper`) Actor

Scrape management and MBA job postings from iimjobs.com, India's job board for experienced professionals. Returns title, company, locations, experience, salary, tags, full description, recruiter and applicant counts. Pay per result.

- **URL**: https://apify.com/nanoscrape/iimjobs-jobs-scraper.md
- **Developed by:** [NanoScrape](https://apify.com/nanoscrape) (community)
- **Categories:** Jobs, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

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

## iimjobs Jobs Scraper: MBA and Management Jobs in India

Get job postings from [iimjobs.com](https://www.iimjobs.com/), India's job board for MBAs and experienced professionals, as clean dataset rows. Search by keyword and get the title, company, locations, experience range, salary when shown, tags, the full description, the company profile and the recruiter.

### What you can do with it

- Build a list of companies that hire for a management function (product, finance, consulting, marketing, operations) in India.
- Track the market over time: run it on a schedule and watch new postings, locations, experience bands and applicant counts.
- Feed a job board, alert service or salary research with current postings.
- Find recruiters and agencies that post for several companies.

### What you get

One dataset row per job. A job found by several keywords or on overlapping pages is returned once, and duplicates are removed before anything is charged, so the number of rows is the number of results you pay for.

| Field | Description |
|-------|-------------|
| `id`, `title`, `designation` | Job id (the dedup key), title and role designation |
| `job_url`, `apply_url`, `apply_external` | Job page on iimjobs.com and the link to apply. `apply_external` is `true` when `apply_url` is an external apply link from the employer. Most jobs on iimjobs are applied for on the site itself; apply_url then points to the job page and apply_external is false. |
| `company`, `company_name`, `company_id`, `company_logo_url`, `company_domain`, `job_company_id`, `company_career_slug` | The hiring company. `company_name` has the same value as `company`. `job_company_id` is set when an agency posts for another company |
| `company_rating`, `company_review_count`, `company_ambitionbox_url` | Employee rating and number of reviews on AmbitionBox |
| `company_about`, `company_founded_year`, `company_employees`, `company_type`, `company_primary_industry`, `company_nature_of_business`, `company_hq`, `company_office_locations`, `company_benefits`, `company_clusters`, `company_sub_clusters` | Company profile |
| `location`, `locations`, `location_group` | Job locations as text and as a list, and the location label iimjobs shows |
| `experience_min`, `experience_max` | Years of experience asked |
| `salary_min`, `salary_max`, `salary_currency`, `salary_period`, `salary_hidden` | Salary, only when the poster shows it. Amounts are in lakh INR per year (LPA) as iimjobs lists them. `salary_hidden` is true when the poster hides the salary. Nothing is estimated |
| `tags`, `industry_ids`, `preferred_industries`, `functional_area_id`, `category_id` | Skill and function tags, and the iimjobs ids for industry, function and category |
| `work_from_home`, `female_candidates`, `differently_abled`, `ex_defence`, `female_returners` | Flags the poster sets: remote work and open to women, differently abled, ex-defence or women returning to work |
| `confidential`, `premium`, `branded_jd`, `star`, `is_active`, `is_expired` | Posting flags |
| `applicants`, `views`, `recruiter_actions` | Counts the site shows |
| `recruiter_id`, `recruiter_name`, `recruiter_designation`, `recruiter_profile_pic_url`, `recruiter_first_response_time` | The recruiter as shown on the posting. A value iimjobs masks is null |
| `description`, `description_text` | Full description as HTML and as plain text |
| `posted_at`, `posted_date` | Posting time (ISO 8601, UTC) and posting date in India |
| `ref_code` | Reference code of the search result |
| `details_fetched` | `true` when the detail record was read for the row |
| `search_query`, `source`, `scraped_at` | Keyword that found the job, site, scrape time (UTC) |

Fields marked "needs the detail record" in the dataset view (description, company profile, `company_career_slug`, `is_active`, `is_expired`, `recruiter_first_response_time`) are empty when `includeDetails` is off. Company profile fields are also empty for companies that have no AmbitionBox profile. Arrays are always arrays (`[]` when empty). Fields the site never filled in the sampled postings are not part of the output.

### Input

| Field | Type | Description |
|---|---|---|
| `searchQueries` | string\[] | Keywords, one search each (default `product manager`) |
| `includeDetails` | boolean | Read the detail record of each job for the description, company profile and recruiter (default `true`) |
| `maxResultsPerQuery` | integer | Cap per keyword, 1 to 1000 (default 50) |
| `maxResults` | integer | Total cap across all keywords (0 = no limit) |

Without any keyword the actor runs the sample search for 20 rows.

#### Example

```json
{"searchQueries": ["product manager"], "includeDetails": true, "maxResults": 20}
```

### Sample output

```json
{
  "id": "1742187",
  "title": "Paytm - Product Manager",
  "designation": "Product Manager",
  "job_url": "https://www.iimjobs.com/j/paytm-product-manager-1742187",
  "apply_url": "https://www.iimjobs.com/j/paytm-product-manager-1742187",
  "apply_external": false,
  "company": "Paytm",
  "company_name": "Paytm",
  "company_id": 357,
  "company_logo_url": "https://rec-assets.iimjobs.com/CompanyLogos/centralised-79.webp",
  "company_domain": "paytm.com",
  "job_company_id": null,
  "company_career_slug": "paytm",
  "company_rating": 3.2,
  "company_review_count": 10458,
  "company_ambitionbox_url": "https://www.ambitionbox.com/reviews/paytm-reviews",
  "company_about": "<p>Paytm started the Digital Revolution in India.</p><p>And we went on to become India’s leading Payments App. Today, mo...",
  "company_founded_year": "2010",
  "company_employees": "10001-50000",
  "company_type": "Indian MNC",
  "company_primary_industry": "FinTech",
  "company_nature_of_business": [
    "Product",
    "Service",
    "B2C"
  ],
  "company_hq": "Noida",
  "company_office_locations": [
    "Noida, Uttar Pradesh",
    "Mumbai, Maharashtra"
  ],
  "company_benefits": [
    "Health Insurance",
    "Learning & Development Support"
  ],
  "company_clusters": [
    "Financial Services Companies"
  ],
  "company_sub_clusters": [
    "Top Financial Service Companies",
    "Fintech Companies"
  ],
  "location": "Bangalore",
  "locations": [
    "Bangalore"
  ],
  "location_group": "Bangalore",
  "experience_min": 3,
  "experience_max": 7,
  "salary_min": null,
  "salary_max": null,
  "salary_currency": null,
  "salary_period": null,
  "salary_hidden": true,
  "tags": [
    "IT Product Management",
    "Online Product Management",
    "Consumer Internet"
  ],
  "industry_ids": [
    33
  ],
  "preferred_industries": [],
  "functional_area_id": 37,
  "category_id": 15,
  "work_from_home": false,
  "female_candidates": false,
  "differently_abled": false,
  "ex_defence": false,
  "female_returners": false,
  "confidential": false,
  "premium": true,
  "branded_jd": false,
  "star": false,
  "is_active": true,
  "is_expired": false,
  "applicants": 814,
  "views": 1319,
  "recruiter_actions": 0,
  "recruiter_id": 292499,
  "recruiter_name": "[removed]",
  "recruiter_designation": null,
  "recruiter_profile_pic_url": null,
  "recruiter_first_response_time": 12,
  "description": "<p></p><p>Job Description:</p><p><br/></p><p>- 3-5 years of core Product Management experience, specifically within high-growth consumer or partner-facing produ...",
  "description_text": "Job Description:\n\n- 3-5 years of core Product Management experience, specifically within high-growth consumer or partner-facing product charters.\n\n- Proven trac...",
  "posted_at": "2026-10-27T08:35:02.862Z",
  "posted_date": "2026-10-27",
  "ref_code": "sp_br_prm",
  "details_fetched": true,
  "search_query": "product manager",
  "source": "iimjobs.com",
  "scraped_at": "2026-11-06T09:00:00Z"
}
```

The sample is shortened. Every row has all fields listed above. The recruiter name is replaced by "\[removed]" here.

Recruiter names are personal data. You are responsible for using the data lawfully, including India's Digital Personal Data Protection Act, the GDPR where it applies, and the terms of the site.

### Pricing (Pay-per-event)

Price: $0.001 start fee per run, then $0.0018 per job result ($1.80 per 1,000 jobs).

| Event | Description | When it fires |
|---|---|---|
| `apify-actor-start` | Run start fee | Once per run |
| `job-result` | One job row in the dataset | Once per row pushed |

Duplicates are never charged. Set a maximum total charge on the run to stop at a budget: the run ends cleanly when it is reached, and the status message says how many jobs were delivered. The pricing box on the actor page always shows the current rates.

### FAQ

**How many jobs can one keyword return?**
Up to 1000 per keyword (`maxResultsPerQuery`). Results come 20 at a time, in the order the site returns them. For larger sets split the work into narrower keywords.

**Why does a row have no description?**
The description comes from the detail record. Turn `includeDetails` on (default). If a single detail record cannot be read, the row is still delivered with the search fields and `details_fetched` is `false`.

**Why is the salary empty?**
Most posters hide the salary on iimjobs. `salary_hidden` tells you; the amount is only set when the poster shows it.

**Why do the same ids sometimes show up on two pages?**
The site shifts its list while new jobs arrive. The actor removes these repeats before saving and before charging.

**What does the run status say when nothing is found?**
A keyword with no matching job ends cleanly with "0 jobs found for ...". If the site refuses the requests, the run fails with a clear message and only the start fee is charged.

### Limits

- India focused: the board lists jobs for experienced professionals, mostly 3 or more years.
- Up to 1000 jobs per keyword.
- Searches use the keyword only. Other filters of the site (location, experience, function) are not applied; use more specific keywords.

### Support

- **Questions or issues?** Email contact@nanoscrape.com or open a ticket in the Issues tab on the actor page.
- **Need a scraper for a job board we don't cover yet?** Email contact@nanoscrape.com with the target site and your rough usage volume.

***

*Built by [NanoScrape](https://apify.com/nanoscrape). No affiliation with iimjobs.com.*

# Changelog

This Actor's version history is a separate document: https://apify.com/nanoscrape/iimjobs-jobs-scraper/changelog.md

# Actor input Schema

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

Keywords to search on iimjobs.com, for example product manager, investment banking or supply chain. Each keyword runs as its own search; jobs found by several searches are returned once.

## `includeDetails` (type: `boolean`):

Read the detail record of each job for the full description, company profile, recruiter info and counts. Turn off for a faster run with the search result fields only.

## `maxResultsPerQuery` (type: `integer`):

Maximum number of jobs per keyword (1 to 1000).

## `maxResults` (type: `integer`):

Maximum number of jobs in the dataset across all keywords. 0 = no limit.

## Actor input object example

```json
{
  "searchQueries": [
    "product manager"
  ],
  "includeDetails": true,
  "maxResultsPerQuery": 50,
  "maxResults": 0
}
```

# Actor output Schema

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

Dataset with the scraped iimjobs.com job postings.

# 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": [
        "product manager"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nanoscrape/iimjobs-jobs-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": ["product manager"] }

# Run the Actor and wait for it to finish
run = client.actor("nanoscrape/iimjobs-jobs-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": [
    "product manager"
  ]
}' |
apify call nanoscrape/iimjobs-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nanoscrape/iimjobs-jobs-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/ZuPM2tpnMrlJ33o6d/builds/3YzRrGVyqR4BdyD9m/openapi.json
