# Internshala Scraper - Internships & Jobs in India, No Login (`benthepythondev/internshala-scraper`) Actor

Internshala internships and jobs as rows: title, company, stipend or salary (parsed to numbers), locations, work from home, duration, skills, posted date. Optional full description, start and apply-by dates. Search by keyword, city or listing link. No login, no cookies.

- **URL**: https://apify.com/benthepythondev/internshala-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** Jobs, Lead generation, Business
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 🎓 Internshala Scraper - Internships and Jobs in India, No Login

Collect internships and entry-level jobs from [Internshala](https://internshala.com) as clean rows: title, company, stipend or salary (also as numbers), locations, work from home, duration, skills and how long ago it was posted. Turn on full details to add the whole description, start date, apply-by date and openings. No Internshala account, cookies or proxy needed. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### 💰 What a run costs

| Event | Free plan | Gold and up |
|---|---|---|
| Listing (one internship or job) | $0.0005 | $0.0004 |
| Listing details (only with *Include full details*) | $0.001 | $0.0008 |
| Actor start | $0.00005 | $0.00004 |

Searches without results and listings whose detail page could not be read are not charged for the details. 1,000 listings cost $0.50 on the Free plan, $1.50 with full details.

### 🔎 What does it extract?

- **Role:** title, company, logo, type (internship or job), link and Internshala id
- **Pay:** the text as shown, plus `pay.min`, `pay.max` and `pay.period` in rupees (empty for unpaid or performance-based roles)
- **Where and how long:** locations, work from home flag, duration (internships), experience asked (jobs)
- **Fit:** skills, first line of the description, labels such as *Part time* or *Job offer after internship*, actively hiring badge, posting age
- **With full details:** full description, posting date, apply-by date, start date, openings, industry, category, city and state, company site

### ⬇️ Input

| Field | What it does |
|---|---|
| `keywords` | Skills or roles, one search each (`python`, `marketing`, `data science`) |
| `kind` | `internships`, `jobs` or `both` |
| `location` | Optional city (see limits) |
| `startUrls` | Any Internshala listing link, for example `https://internshala.com/jobs/` |
| `workFromHomeOnly` | Keep only work-from-home listings |
| `includeDetails` | Read every listing page for the full record |
| `maxResults` | Total cap across all searches (default 20) |

```json
{ "keywords": ["python", "data science"], "kind": "internships", "maxResults": 100, "includeDetails": true }
```

### ⬆️ Output

```json
{
  "id": "3323675",
  "type": "internship",
  "title": "Software Development",
  "company": "She Can Foundation",
  "locations": ["Work from home"],
  "workFromHome": true,
  "stipendOrSalary": "₹ 2,000 /month",
  "pay": { "min": 2000, "max": 2000, "period": "month" },
  "duration": "1 Month",
  "skills": ["Java", "MySQL", "Python"],
  "postedAgo": "3 weeks ago",
  "url": "https://internshala.com/internship/detail/..."
}
```

### 📏 Speed and limits

- A listing page holds 40 cards. Reading 30 pages (1,210 listings) took 32 seconds from one address.
- Full details are read three at a time, about 0.7 seconds each. Forty at once are sent to Internshala's rate-limit page, which is why the Actor does not do that.
- A keyword search ends where Internshala's list ends (for example 272 internships for `python`).
- A **city** search shows a logged-out visitor only its first page (22 jobs for Python in Bangalore, although Internshala counts 130). For more listings, search by keyword without a city and filter the `locations` field.
- Internshala shows no applicant counts or recruiter contacts to visitors, so the Actor returns none.
- A link whose filter Internshala does not know is redirected to the full list; the Actor skips it and says so in the run's status message.

### 💡 Use cases

- 🧑‍🎓 Job boards and newsletters that list internships by skill or city
- 📊 Hiring-trend and stipend research for India (pay as numbers, by skill)
- 🏢 Recruiters and training firms tracking which companies are actively hiring
- 🔔 Daily scheduled runs with *Maximum listings* set to catch new postings

### ❓ FAQ

**Do I need an Internshala account?** No. The Actor reads the public listing pages a logged-out visitor sees.

**Why is a stipend empty?** Unpaid roles and performance-based pay have no number; `stipendOrSalary` still holds Internshala's text.

**Can I search several keywords?** Yes. A listing found by several searches is saved and charged once.

**Is it legal?** The Actor reads public pages only. You are responsible for using the data in line with Internshala's terms and local law, including data protection rules for any personal data.

**How do I stop a run at a budget?** Set a maximum charge per run; the Actor stops cleanly at the limit and keeps the rows saved.

### 🔗 You might also like

Other job-board Actors by this developer: [Naukri Jobs Scraper](https://apify.com/benthepythondev/naukri-jobs-scraper), [Indeed Jobs Scraper](https://apify.com/benthepythondev/indeed-jobs-scraper), [Foundit Jobs Scraper](https://apify.com/benthepythondev/foundit-jobs-scraper).

**Keywords:** Internshala scraper, Internshala internships API, India internships dataset, Internshala jobs scraper, internship stipend data, work from home internships India, fresher jobs India, student jobs scraper, Internshala to CSV

# Actor input Schema

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

Skills or roles to search on Internshala, one per line, for example python, marketing, data science. Each keyword is its own search. An empty input with no links searches the sample keyword.

## `kind` (type: `string`):

Which part of Internshala to search for every keyword.

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

Optional. A city such as Bangalore or Mumbai. Internshala shows a logged-out visitor only the first page (about 20 listings) of a city search; for more, leave the city empty and search by keyword.

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

Optional. Internshala listing pages to read, for example https://internshala.com/internships/keywords-python/ or https://internshala.com/jobs/. Pages past the first are followed until the end.

## `workFromHomeOnly` (type: `boolean`):

Keep only listings whose location is Work from home.

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

Open every listing's page for the full description, start and apply-by dates, openings and industry. Charged as a second event per listing.

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

The run stops after this many listings across all searches. Each listing is charged once, even when several searches find it.

## Actor input object example

```json
{
  "keywords": [
    "python"
  ],
  "kind": "internships",
  "workFromHomeOnly": false,
  "includeDetails": false,
  "maxResults": 20
}
```

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

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/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 = { "keywords": ["python"] }

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

```

## MCP server setup

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