# Internshala Scraper (`unfenced-group/internshala-scraper`) Actor

Extract internships and jobs from Internshala.com — India's #1 career platform. Filter by category, city, work-from-home, part-time, or minimum stipend. 21 output fields including stipend\_min\_inr, is\_early\_applicant, is\_part\_time, and PPO offer. Cheapest on the market.

- **URL**: https://apify.com/unfenced-group/internshala-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Jobs
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

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

## Internshala Scraper

![Internshala Scraper](https://api.apify.com/v2/key-value-stores/lJlifu6C8YQfZMPKE/records/internshala-scraper)

![Internshala Scraper](https://i.imgur.com/shMkmjD.png)

## Internshala Scraper

Extract internships and jobs from [Internshala.com](https://internshala.com) — India's largest internship platform. Filter by category, city, or work-from-home. Fast, reliable, and simple.

### What you get

| Field | Type | Example |
|---|---|---|
| `id` | string | `3134259` |
| `listing_type` | string | `internship` / `job` |
| `title` | string | `Equity Analyst` |
| `company` | string | `Folok Dutta` |
| `url` | string | `https://internshala.com/internship/detail/...` |
| `location` | string\|null | `Work from home` / `Delhi, Mumbai` |
| `is_work_from_home` | boolean | `true` |
| `stipend_or_salary` | string\|null | `₹ 10,000 - 15,000 /month` |
| `stipend_min_inr` | number\|null | `10000` |
| `stipend_max_inr` | number\|null | `15000` |
| `stipend_unit` | string\|null | `monthly` / `weekly` / `lump sum` / `fixed` / `annual` |
| `duration` | string\|null | `6 Months` *(internships only)* |
| `experience_required` | string\|null | `1 year(s)` / `No experience required` *(jobs only)* |
| `posted_ago` | string\|null | `2 days ago` |
| `actively_hiring` | boolean | `true` |
| `is_early_applicant` | boolean | `true` |
| `is_part_time` | boolean | `false` |
| `ppo_offer` | string\|null | `Job offer upto ₹ 4LPA post internship` |
| `skills` | string[] | `["Python", "Machine Learning"]` |
| `description_snippet` | string\|null | Full internship description text |
| `scraped_at` | string | ISO 8601 timestamp |

> **`experience_required`** is a new field (v2.0) populated for job listings only. `stipend_unit: "annual"` is also new — used for job salaries quoted per year.

### Use cases

- **Recruitment analytics** — Track which companies are actively hiring interns in India
- **Market research** — Monitor stipend trends by category or city
- **Job board aggregation** — Feed Internshala listings into your own platform
- **Student matching** — Match student skills to open positions
- **Competitive intelligence** — Track competitor hiring patterns

### Input

```json
{
  "listingType": "internship",
  "categories": ["computer science", "marketing"],
  "locations": ["delhi", "mumbai"],
  "workFromHome": false,
  "maxResults": 500,
  "requestsPerSecond": 5
}
````

#### Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `listingType` | `internship` / `job` / `both` | `internship` | What type of listing to scrape |
| `categories` | `string[]` | `[]` | Filter by profile (e.g. `"computer science"`, `"marketing"`, `"finance"`) |
| `locations` | `string[]` | `[]` | Filter by city (e.g. `"delhi"`, `"bangalore"`, `"mumbai"`) |
| `workFromHome` | `boolean` | `false` | Limits to WFH/remote internships when no categories/locations are set |
| `partTimeOnly` | `boolean` | `false` | Limits to part-time internships |
| `minStipendInr` | `integer` | — | Skip listings with a stipend below this value (INR/month) |
| `maxResults` | `integer` | `1000` | Hard cap on results |
| `requestsPerSecond` | `integer` | `5` | Rate limit — 5 is safe without proxies |
| `startUrls` | `RequestSource[]` | `[]` | Override: scrape specific Internshala listing pages directly |

#### URL filtering examples

Internshala uses semantic URL paths for all filtering. The actor builds them automatically and targets the JSON API endpoint:

| Input config | Generated API URL |
|---|---|
| `{ listingType: "internship" }` | `/internships_ajax/` |
| `{ categories: ["marketing"] }` | `/internships_ajax/marketing-internship/` |
| `{ categories: ["data science"], locations: ["delhi"] }` | `/internships_ajax/data-science-internship-in-delhi/` |
| `{ workFromHome: true }` | `/internships_ajax/work-from-home-internships/` |
| `{ workFromHome: true, categories: ["finance"] }` | `/internships_ajax/work-from-home-finance-internship/` |
| `{ partTimeOnly: true }` | `/internships_ajax/part-time-jobs/` |
| `{ listingType: "job", categories: ["finance"] }` | `/jobs_ajax/finance-jobs/` |
| `{ listingType: "job", locations: ["bangalore"] }` | `/jobs_ajax/jobs-in-bangalore/` |

#### Custom start URLs

For maximum control, pass any valid Internshala listing URL directly. The actor automatically converts it to the JSON API form:

```json
{
  "startUrls": [
    { "url": "https://internshala.com/internships/mba-internship-in-bangalore/" },
    { "url": "https://internshala.com/internships/part-time-jobs/" }
  ]
}
```

### Cost & performance

| Metric | Value |
|---|---|
| Actor RAM | 256 MB |
| Avg per-page time | ~1s |
| Listings per page | 40–50 |
| CU per 1,000 results | ~0.0014 |
| **Apify cost per 1,000** | **≈ $0.0004** |
| **Listed price** | **$1.99 / 1,000 results** |

The actor uses pure HTTP (`got`) + the Internshala JSON endpoint — no headless browser, no rendering overhead.

### How it works

v2.0 targets Internshala's internal AJAX JSON API (`/internships_ajax/`, `/jobs_ajax/`) instead of scraping full HTML pages. Each response is a JSON object containing:

- `internship_list_html` — rendered card HTML, parsed with Cheerio
- `is_last_page` — clean pagination termination signal
- `next_page_number` — exact next page index
- `currentPageCount` — items returned on this page

Pagination stops automatically when `is_last_page: true` is received or `maxResults` is reached.

### Popular category slugs

`computer-science` · `marketing` · `finance` · `data-science` · `graphic-design` · `content-writing` · `human-resources` · `operations` · `web-development` · `product-management` · `mechanical-engineering` · `civil-engineering` · `electrical-engineering` · `mba`

### Popular location slugs

`delhi` · `mumbai` · `bangalore` · `hyderabad` · `pune` · `chennai` · `kolkata` · `noida` · `gurgaon` · `ahmedabad`

### Output example

```json
{
  "id": "3134259",
  "listing_type": "internship",
  "title": "Equity Analyst",
  "company": "Folok Dutta",
  "url": "https://internshala.com/internship/detail/...",
  "location": "Work from home",
  "is_work_from_home": true,
  "stipend_or_salary": "₹ 10,000 - 15,000 /month",
  "stipend_min_inr": 10000,
  "stipend_max_inr": 15000,
  "stipend_unit": "monthly",
  "duration": "6 Months",
  "experience_required": null,
  "posted_ago": "2 days ago",
  "actively_hiring": true,
  "is_early_applicant": false,
  "is_part_time": false,
  "ppo_offer": null,
  "skills": ["Accounting", "Financial Analysis", "Business Research"],
  "description_snippet": "This apprenticeship is built for...",
  "scraped_at": "2026-05-06T10:00:00.000Z"
}
```

### Changelog

#### v2.0

- **JSON-HTML approach**: switched from full HTML page scraping to `/internships_ajax/` and `/jobs_ajax/` JSON endpoints — more reliable, cleaner pagination
- **`experience_required`** field added (jobs only, e.g. `"1 year(s)"` or `"No experience required"`)
- **`stipend_unit: "annual"`** added for job salary ranges
- WFH detection now uses the `ic-16-home` icon directly (was inferred from location text)
- Job salary extraction uses `.desktop` span to avoid the `/year` suffix
- Pagination uses `is_last_page` from JSON response (was parsing `<a href="page-N">` links)

#### v1.1

- Initial release with full HTML + Cheerio parsing

### Legal

This actor scrapes publicly available data from Internshala.com listing pages. It does not scrape personal user data, bypass authentication, or circumvent paywalls. Always use scraped data in compliance with applicable laws and Internshala's Terms of Service.

***

Built by [Unfenced Group](https://apify.com/unfenced-group) · Part of the India Jobs & Internships collection

# Actor input Schema

## `listingType` (type: `string`):

What to scrape: internships, jobs, or both.

## `categories` (type: `array`):

Filter by profile (e.g. 'computer science', 'marketing', 'data science'). Leave empty for all.

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

Filter by city (e.g. 'delhi', 'mumbai', 'bangalore'). Leave empty for all locations.

## `workFromHome` (type: `boolean`):

Scrape only work-from-home internships.

## `partTimeOnly` (type: `boolean`):

Filter results to part-time internships only.

## `minStipendInr` (type: `integer`):

Skip listings where the minimum stipend is below this value (in INR per month). Listings without a parsed stipend are always included.

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

Maximum number of listings to return.

## `requestsPerSecond` (type: `integer`):

Rate limit. Default 5 is reliable without proxies.

## `startUrls` (type: `array`):

Scrape specific Internshala listing pages directly. Overrides all other filters.

## Actor input object example

```json
{
  "listingType": "internship",
  "categories": [],
  "locations": [],
  "workFromHome": false,
  "partTimeOnly": false,
  "maxResults": 5,
  "requestsPerSecond": 5,
  "startUrls": []
}
```

# Actor output Schema

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

All internship/job listings scraped from Internshala.

## `outputSummary` (type: `string`):

Run summary including totalJobs count and dataset URL.

# 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 = {
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/internshala-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 = { "maxResults": 5 }

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Internshala Scraper",
        "description": "Extract internships and jobs from Internshala.com — India's #1 career platform. Filter by category, city, work-from-home, part-time, or minimum stipend. 21 output fields including stipend_min_inr, is_early_applicant, is_part_time, and PPO offer. Cheapest on the market.",
        "version": "0.0",
        "x-build-id": "wmGNt3CTndQR0Kxy4"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/unfenced-group~internshala-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-unfenced-group-internshala-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/unfenced-group~internshala-scraper/runs": {
            "post": {
                "operationId": "runs-sync-unfenced-group-internshala-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/unfenced-group~internshala-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-unfenced-group-internshala-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",
                "properties": {
                    "listingType": {
                        "title": "Listing Type",
                        "enum": [
                            "internship",
                            "job",
                            "both"
                        ],
                        "type": "string",
                        "description": "What to scrape: internships, jobs, or both.",
                        "default": "internship"
                    },
                    "categories": {
                        "title": "Categories / Profiles",
                        "type": "array",
                        "description": "Filter by profile (e.g. 'computer science', 'marketing', 'data science'). Leave empty for all.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Filter by city (e.g. 'delhi', 'mumbai', 'bangalore'). Leave empty for all locations.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "workFromHome": {
                        "title": "Work From Home Only",
                        "type": "boolean",
                        "description": "Scrape only work-from-home internships.",
                        "default": false
                    },
                    "partTimeOnly": {
                        "title": "Part-Time Only",
                        "type": "boolean",
                        "description": "Filter results to part-time internships only.",
                        "default": false
                    },
                    "minStipendInr": {
                        "title": "Minimum Stipend (₹/month)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip listings where the minimum stipend is below this value (in INR per month). Listings without a parsed stipend are always included."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of listings to return.",
                        "default": 1000
                    },
                    "requestsPerSecond": {
                        "title": "Requests Per Second",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Rate limit. Default 5 is reliable without proxies.",
                        "default": 5
                    },
                    "startUrls": {
                        "title": "Custom Start URLs",
                        "type": "array",
                        "description": "Scrape specific Internshala listing pages directly. Overrides all other filters.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "Url",
                                    "description": "Url"
                                }
                            }
                        },
                        "default": []
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
