# Internshala Scraper - Internships & Fresher Jobs in India (`thirdwatch/internshala-scraper`) Actor

Export Internshala internships and fresher jobs: title, company, stipend or salary, duration, skills, perks, openings, applicant count, apply-by date and full description. Search by keyword and city, or work from home.

- **URL**: https://apify.com/thirdwatch/internshala-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Jobs, Education
- **Stats:** 2 total users, 1 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

> Export Internshala internships and fresher jobs — stipend or salary, duration, skills, perks, openings, applicant count, apply-by date and the full description — by keyword, city or work from home.

### What you get

Internshala is India's largest internship board and one of the biggest sources of fresher and early-career jobs. This Actor turns any Internshala search — a skill, a city, remote only, or the exact filter page you built in the browser — into clean dataset rows.

Each row has the search card fields: title, company, location, stipend or salary, duration or experience, skills, posted date, and the part-time and job-offer labels. With full details on, which is the default, it also opens every listing and adds the complete description, who can apply, perks, start date, apply-by date, number of openings, applicant count, and the company's profile and hiring track record. Pay is parsed into numbers, with a currency and a period, so you can sort and filter it straight away.

### Scrape Internshala internships without an account

No Internshala login or API key is needed. Everything the Actor reads is public.

### Output fields

| Field | Description |
|---|---|
| `id`, `listing_type`, `title`, `url` | Internshala listing id, `internship` or `job`, title and link |
| `company_name`, `company_logo_url` | Hiring company |
| `location`, `locations`, `is_remote`, `cities` | Where the role is based; `is_remote` is true for work from home |
| `salary_raw`, `salary_min`, `salary_max`, `salary_currency`, `salary_period` | Stipend or salary as shown, plus parsed numbers (`month` or `year`) |
| `is_unpaid`, `has_incentives` | Unpaid listings, and pay that adds incentives on top |
| `duration` | Internship length, such as `3 Months` |
| `experience`, `experience_min_years` | Experience asked for on jobs |
| `skills` | Skills required |
| `labels`, `is_part_time`, `has_job_offer` | Card labels, including part time and job offer after the internship |
| `actively_hiring` | Internshala's actively hiring badge |
| `posted_ago`, `posted_date`, `posted_date_is_estimate` | When the listing went up; `posted_date` is an ISO date |
| `start_date`, `apply_by`, `apply_by_date`, `valid_through` | Start date and application deadline, as shown and as an ISO date |
| `description`, `who_can_apply`, `summary` | Full role description, eligibility, and the card's one-line summary |
| `perks`, `openings`, `applicant_count` | Perks, number of openings and how many people have applied |
| `employment_types`, `industry`, `category` | Listing type flags, company industry and role category |
| `about_company`, `company_website` | Company profile |
| `company_hiring_since`, `company_opportunities_posted`, `company_candidates_hired` | The company's track record on Internshala |
| `stipend_detail`, `ld_salary` | Pay as shown on the listing page, and its structured form |
| `detail_status` | `ok`, `removed` if the listing was taken down mid-run, or `unavailable` |
| `search_keyword`, `search_location`, `search_url` | The search that produced the row |
| `scraped_at`, `source` | Collection time and source |

Detail fields are only filled when `includeDetails` is on.

### Example output

```json
{
  "id": "3281884",
  "listing_type": "internship",
  "title": "Software Development",
  "company_name": "Salesforce",
  "url": "https://internshala.com/internship/detail/part-time-software-development-internship-in-bangalore-at-salesforce1789133363",
  "location": "Bangalore",
  "is_remote": false,
  "salary_raw": "₹ 1,00,000 - 1,50,000 /month",
  "salary_min": 100000,
  "salary_max": 150000,
  "salary_currency": "INR",
  "salary_period": "month",
  "duration": "6 Months",
  "skills": [".NET", "C++ Programming", "CSS", "HTML", "Java", "JavaScript", "MySQL", "Node.js", "Python", "React"],
  "is_part_time": true,
  "posted_date": "2026-09-11",
  "start_date": "Immediately",
  "apply_by": "1 Nov' 26",
  "apply_by_date": "2026-11-01",
  "perks": ["Certificate", "Letter of recommendation", "Free snacks & beverages"],
  "openings": 10,
  "applicant_count": 1000,
  "industry": "Computer Services",
  "company_website": "http://salesforce.com",
  "search_keyword": "python",
  "search_location": "Bengaluru",
  "source": "Internshala"
}
```

### Input parameters

| Parameter | Required | Description |
|---|---|---|
| `listingType` | No | `internships` (default) or `jobs` |
| `keywords` | No | Skills, profiles or roles, such as `python` or `marketing`; each runs as its own search |
| `locations` | No | Cities, such as `Bangalore` or `Mumbai`; combined with each keyword. Leave empty for all of India |
| `workFromHome` | No | Only remote listings; the cities list is ignored when on |
| `startUrls` | No | Any Internshala internship or job search page, to reuse filters such as minimum stipend |
| `includeDetails` | No | Open every listing for the full description, perks, openings and applicants. Defaults to on |
| `maxResults` | No | Listings saved per keyword and city combination; defaults to 10 |

Common spellings like Bengaluru, Gurugram and New Delhi are matched to the city pages where Internshala files most of its listings.

### Internshala data export use cases

- **Students and career apps** can build a daily feed of new internships for a skill and city, with stipend and deadline.
- **Placement cells and colleges** can track which companies hire interns from their city, and at what stipend.
- **Recruiters and HR tech products** can benchmark stipends and fresher salaries by role, skill and location.
- **Researchers and analysts** can measure the internship market — remote share, unpaid share, most-asked skills — over time.

### Limitations

Internshala shows applicant counts above 1,000 as "1000+", so `applicant_count` stops at 1000. A few listings say "Competitive salary" rather than a figure; those keep `salary_raw` and leave the numbers empty. `company_website` is filled only when the company lists one, which is a minority of listings. Keyword searches follow Internshala's own matching, so a very broad keyword can bring in related profiles. Each search can be paged as deep as Internshala allows; to collect more, split by city or keyword. Jobs posted for several cities at once carry less structured data on Internshala, so for those listings `posted_date` is worked out from the "6 days ago" label and `posted_date_is_estimate` is true; `industry` and `category` stay empty. The jobs section has no total count on the page, so the log only shows progress, not the expected total. The listing detail page is the source for the description, perks, openings and applicants; with `includeDetails` off those fields are left out and runs are several times faster.

### Compared to alternatives

Several Internshala Actors return the search card only. This one also reads each listing page by default, so a row arrives with the full description, perks, openings, applicant count, start and apply-by dates and the company's hiring record, and it parses Indian-format pay such as `₹ 4,00,000 - 5,00,000 /year` into numbers with a period. It covers both the internships and the jobs sections, accepts any search URL you paste, and treats an empty search as an empty result rather than a failed run.

### Related Actors

- [Unstop Scraper](https://apify.com/thirdwatch/unstop-scraper) — hackathons, competitions, internships and campus hiring from Unstop
- [Naukri Jobs Scraper](https://apify.com/thirdwatch/naukri-jobs-scraper) — experienced-hire jobs from India's largest job board
- [CutShort Jobs Scraper](https://apify.com/thirdwatch/cutshort-jobs-scraper) — India tech jobs with salary ranges and skills

### FAQ

#### Do I need an Internshala account?

No. The Actor reads only public listing pages.

#### How do I filter by minimum stipend or part time?

Set the filters on internshala.com, copy the address of the results page and paste it into `startUrls`.

#### Can I get only remote internships?

Yes. Turn on `workFromHome`, or add `Work from home` to the cities list.

#### Why are some detail fields empty?

Detail fields are filled only when `includeDetails` is on. If a listing was removed while the run was in progress, `detail_status` is `removed` and the row keeps its search card fields.

Last verified: 2026-10

More scrapers at [thirdwatch.dev](https://thirdwatch.dev).

# Actor input Schema

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

Internships or jobs. Internshala's jobs section is mostly fresher and early-career roles.

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

Profiles, skills or roles to search, such as python, marketing or data science. Each keyword runs as its own search. Leave empty to list everything.

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

Cities to search, such as Bangalore, Mumbai or Delhi. Each city is combined with each keyword. Leave empty to search all of India. Enter Work from home for remote listings.

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

Only return remote listings. When on, the cities list is ignored.

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

Paste any Internshala internship or job search page to reuse the exact filters you set in the browser, for example https://internshala.com/internships/marketing-internship/stipend-10000/

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

Open every listing to add the full description, perks, start date, apply-by date, number of openings, applicant count and company profile. Turn off for a faster run with the search-card fields only.

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

Upper limit of listings saved for each keyword and city combination.

## Actor input object example

```json
{
  "listingType": "internships",
  "keywords": [
    "python"
  ],
  "locations": [],
  "workFromHome": false,
  "startUrls": [],
  "includeDetails": true,
  "maxResults": 10
}
```

# 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"
    ],
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/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"],
    "maxResults": 10,
}

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

```

## MCP server setup

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