# iimjobs Scraper — Jobs with Full JD, Salary & Recruiter (`memo23/iimjobs-scraper`) Actor

Search iimjobs.com — India's management & executive jobs board — by keyword and city. Each row: title, company, full job description text, salary (when disclosed), experience range, skills, locations, apply count, views, recruiter, and job URL. Pure HTTP, no browser, no login.

- **URL**: https://apify.com/memo23/iimjobs-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Jobs
- **Stats:** 27 total users, 24 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 jobs

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## iimjobs Scraper — Jobs with Full JD, Salary & Recruiter Data

**Search iimjobs.com — India's leading management and executive jobs board — and get one clean JSON row per job: title, company, the complete job description, salary and experience ranges, skills, locations, apply counts, and recruiter details.**

Pure HTTP against iimjobs' own job API. No browser, no login, no cookie, 512 MB of memory — runs are fast and cheap, and the output goes far beyond the listing card.

### What you get per job

| Field | Description |
| --- | --- |
| `title`, `designation`, `companyName`, `confidential` | The role and who's hiring (confidential postings flagged) |
| `descriptionHtml`, `descriptionText` | The **full job description**, as HTML and as clean plain text |
| `experienceMinYears`, `experienceMaxYears` | Required experience range |
| `salaryMin`, `salaryMax`, `salaryHidden` | Salary as listed (INR lakh per annum); `salaryHidden: true` when the poster hides it |
| `locations`, `workFromHome`, `address` | Cities, remote flag, and street address where given |
| `skills`, `mandatorySkills` | Skill tags, with the must-haves split out |
| `applyCount`, `views` | Demand signals: how many applied, how many viewed |
| `postedAt` | ISO posting date |
| `recruiterName`, `recruiterId` | Who posted it |
| `jobUrl`, `jobId`, `companyLogo`, `premium` | Canonical URL and extras |
| `searchTerm`, `page` | Which input produced the row |

Rows are deduplicated across pages and terms by `jobId`.

### Example input

```json
{
    "searchQueries": ["product manager", "data science"],
    "location": "bangalore",
    "maxPages": 2,
    "maxItems": 100
}
```

The `location` string is resolved through iimjobs' own location mapper — when a city can't be resolved, the search runs country-wide with a warning instead of failing.

### Why the full job description matters

Most job scrapers stop at the listing card: title, company, a location string. That's not enough to match candidates, run skills analytics, or feed an LLM. This actor fetches every job's detail record, so each row carries the complete JD text plus the fields only the detail page has (address, company logo). If you only need the cards, switch `fetchDetails` off for faster listing-only runs.

### Use cases

Recruiting intelligence is the obvious one: track which companies hire for which roles at which experience bands, with real apply-count demand signals. Salary benchmarking works on the subset of postings that disclose pay. The `skills`/`mandatorySkills` split feeds skills-gap analyses, and the full JD text is ready for embedding pipelines and match models. iimjobs skews senior — management, consulting, finance, product — so the data reads on India's white-collar executive market specifically.

### FAQ

**Do I need an iimjobs account?** No. Search and job details are collected without any login.

**Why is salary null on many rows?** Most iimjobs postings hide compensation; `salaryHidden: true` tells you it was withheld rather than missing. Where disclosed, values are as listed — INR lakh per annum.

**How many jobs can one term return?** Searches report `totalJobs` in the log (often thousands); pages carry ~50 jobs each, up to 100 pages per term.

**Do I need a proxy?** Usually no — the default direct connection works. If runs start failing with blocks, switch the proxy input to Apify Proxy.

### Explore more scrapers

- [Naukri Scraper](https://apify.com/memo23/naukri-scraper) — India's biggest general jobs board
- [Instahyre Jobs Scraper](https://apify.com/memo23/instahyre-jobs-scraper) — India tech hiring
- [LinkedIn Jobs Scraper](https://apify.com/memo23/linkedin-jobs-scraper) — global postings from $0.25/1k

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/iimjobs-scraper`).

**Purpose:** Keyword-searches iimjobs.com (India management/executive jobs) and returns one JSON row per job including the complete job description text.

**Minimal input:**

```json
{
  "searchQueries": ["product manager"],
  "location": "bangalore",
  "maxPages": 1,
  "maxItems": 25
}
```

**Output:** one dataset row per job; key fields: jobId, title, designation, companyName, confidential, descriptionHtml, descriptionText, experienceMinYears, experienceMaxYears, salaryMin, salaryMax, salaryHidden, locations, workFromHome, skills, mandatorySkills, applyCount, views, postedAt, recruiterName, jobUrl.

**Behaviors an agent should know:**

- Always set `maxItems` (and/or `maxPages`, ~50 jobs per page) to cap output; each term in `searchQueries` runs its own search.
- `location` accepts a plain city name ("bangalore", "mumbai"); unresolvable cities degrade to a country-wide search with a logged warning, never a failure.
- `fetchDetails: false` skips the per-job detail call for faster listing-only rows (no descriptionHtml/descriptionText/address).
- Salary fields are null with `salaryHidden: true` when the poster withholds pay — branch on the flag, not the nulls.
- No login or proxy required by default. Billing: pay-per-event — see the Pricing tab on the actor page.

### ⚠️ Disclaimer

This actor collects publicly displayed job-listing data from iimjobs.com for legitimate recruiting research, market analysis, and job aggregation. You are responsible for complying with applicable laws and iimjobs' terms. Do not use collected data for spam.

### SEO Keywords

iimjobs scraper, iimjobs api, scrape iimjobs, india management jobs data, india executive jobs scraper, iimjobs job description scraper, india jobs api, iimjobs salary data, india recruitment data, management jobs india json, iimjobs export csv, india hiring trends data

# Actor input Schema

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

Job searches to run on iimjobs.com, e.g. 'product manager', 'cfo', 'data science'. One search per term, ~50 jobs per page.

## `location` (type: `string`):

Filter results to one Indian city, e.g. 'bangalore', 'mumbai', 'delhi', 'pune'. Resolved through iimjobs' own location mapper; when a city can't be resolved the search runs country-wide with a warning instead of failing.

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

When on (default), each job's detail page is fetched too, adding the complete job description (HTML + plain text), company logo, and address. Turn off for faster, listing-only rows.

## `maxPages` (type: `integer`):

Search pages to fetch per term (~50 jobs per page). Default 1.

## `maxItems` (type: `integer`):

Hard cap on total dataset rows across all terms. Leave empty for no cap.

## `proxy` (type: `object`):

Optional proxy. The default (no proxy) works — iimjobs' job API is open. Set Apify Proxy here only if runs start failing with blocks.

## Actor input object example

```json
{
  "searchQueries": [
    "product manager"
  ],
  "fetchDetails": true,
  "maxPages": 1,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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("memo23/iimjobs-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("memo23/iimjobs-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 memo23/iimjobs-scraper --silent --output-dataset

```

## MCP server setup

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