# Internshala Scraper 🎓 (internships & fresher jobs, India) (`tagadanar/internshala-scraper`) Actor

Every internship and fresher job on Internshala for your filters: stipend or CTC in rupees, duration, skills, company, city, work-from-home and part-time flags. Search by keyword, category or city, or paste any Internshala search URL. Optional full details. No API key, no login.

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

## Pricing

from $0.28 / 1,000 listings

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 fresher jobs in India, with stipend, duration and skills

Get every internship and fresher job on Internshala for your filters, as clean rows: title, company, city, stipend or CTC (already parsed into rupees per month and lakhs per annum), duration, skills, work-from-home and part-time flags, and how fresh the listing is. Search by keyword, category or city, or paste any Internshala search page and take its results as they are.

Turn on **full details** and every row also carries the full description, who can apply, perks, number of openings, applicants so far, start date, apply-by date and the company page.

$0.40 per 1,000 listings (Free plan; less on paid plans), platform usage included. No API key, no login.

### What you get

One row per internship or job:

| Field | Description |
| --- | --- |
| `type` | `internship` or `job` |
| `id`, `url` | Internshala's listing ID and the listing page |
| `title`, `company`, `companyLogoUrl` | What the listing says |
| `locations` | Cities as listed (`["Work from home"]` for remote). Multi-city listings keep every city |
| `isWorkFromHome`, `isHybrid`, `isPartTime`, `isFresherJob`, `isInternational` | Flags from the card |
| `stipend` | Internship stipend as printed, e.g. `₹ 10,000 /month`, `₹ 1,501 - 15,001 lump sum`, `Unpaid` |
| `stipendMinInrMonthly`, `stipendMaxInrMonthly` | Rupees per month, only when the stipend is a rupee amount per month or per week (weekly is converted at 52/12). Null for lump sums, unpaid and non-rupee stipends |
| `stipendPeriod`, `stipendCurrency` | `month`, `week`, `lump sum` or `unpaid`; `INR` or `USD` |
| `salary`, `salaryMinLpa`, `salaryMaxLpa` | Job CTC as printed and in lakhs per annum (`Competitive salary` stays text only) |
| `experience` | Jobs: `No experience required`, `1 year(s)`, ... |
| `duration` | Internship length, e.g. `6 Months` |
| `postedText`, `postedAtApprox` | Posting age as shown (`3 days ago`) and an estimated date |
| `skills`, `moreSkillsCount` | Skills on the card; `moreSkillsCount` says how many the card hides (turn on full details to get them all) |
| `jobOfferAfterInternship` | The "job offer after internship" promise, when the listing makes one |
| `isActivelyHiring`, `descriptionSnippet` | Badge and the first line of the description |
| `search`, `capturedAt` | Which of your searches found it, and when |

With **Include full details** on, these are filled in too (null otherwise): `companyUrl`, `description`, `whoCanApply`, `startDate`, `applyBy`, `postedAt` (exact), `applicantsCount` / `applicantsText` (`1000+ applicants` is shown as 1000 plus the text; new listings show no count), `openings`, `perks`, `companyAbout`, `companyIndustry`, `companyHiringSince`, `companyOpportunitiesPosted`, `companyCandidatesHired`.

#### Example row (real, from a run on 2026-10-15 (UTC))

```json
{
  "type": "internship",
  "id": "3264750",
  "url": "https://internshala.com/internship/detail/work-from-home-content-creator-for-java-python-mysql-cyber-security-using-canva-internship-at-greylearn1788176250",
  "title": "Content Creator For Java, Python, MySql, Cyber Security Using Canva",
  "company": "GreyLearn",
  "companyUrl": "https://internshala.com/company/greylearn-1714373787",
  "companyLogoUrl": "https://internshala-uploads.internshala.com/logo%2F958kdo08ahr-79659.png.webp",
  "locations": [
    "Work from home"
  ],
  "isWorkFromHome": true,
  "isHybrid": false,
  "isPartTime": true,
  "isFresherJob": false,
  "isInternational": false,
  "stipend": "₹ 6,000 - 8,000 /month",
  "stipendMinInrMonthly": 6000,
  "stipendMaxInrMonthly": 8000,
  "stipendPeriod": "month",
  "stipendCurrency": "INR",
  "salary": null,
  "salaryMinLpa": null,
  "salaryMaxLpa": null,
  "experience": null,
  "duration": "3 Months",
  "startDate": "Immediately",
  "applyBy": "2026-11-13",
  "postedText": "3 weeks ago",
  "postedAtApprox": "2026-09-24",
  "postedAt": "2026-08-31",
  "applicantsCount": 209,
  "applicantsText": "209 applicants",
  "openings": 4,
  "skills": [
    "Canva",
    "Video Marketing"
  ],
  "moreSkillsCount": 0,
  "perks": [
    "Certificate",
    "Letter of recommendation",
    "Flexible work hours"
  ],
  "jobOfferAfterInternship": null,
  "isActivelyHiring": true,
  "descriptionSnippet": "As a content creator intern at GreyLearn, you will have the exciting opportunity to showcase y",
  "description": "About the internship:\nAs a content creator intern at GreyLearn, you will have the exciting opportunity to showcase your expertise in Java, Python, MySQL, and cybersecurity while utilizing the design platform Canva and creating Reels. Your creativity will be put to the test as you develop engaging and informative video content that will captivate our audience and enhance their learning experience.\n…",
  "whoCanApply": "Only those candidates can apply who: 1. are available for the work from home job/internship 2. can start the work from home job/internship between 31st Aug'26 and 13th Nov'26 3. are available for dura…",
  "companyAbout": "Transform your tech career with GreyLearn. GreyLearn is revolutionizing online education by making learning accessible, engaging, and impactful for individuals …",
  "companyIndustry": "Computer Services , Education",
  "companyHiringSince": "April 2024",
  "companyOpportunitiesPosted": 16,
  "companyCandidatesHired": null,
  "search": "internships / web-development",
  "capturedAt": "2026-10-15T23:31:08.855Z"
}
```

### Who uses this

- **Campus placement cells and student career platforms.** Show students every open internship in their field and city, with the stipend sorted out for them.
- **Edtech and job aggregators.** Keep a live feed of Indian entry-level openings next to your own listings.
- **Recruiters and HR analysts.** See which companies hire interns and freshers, for what stipend or CTC, and how many applicants each listing has pulled.
- **Researchers and journalists.** Track stipends, unpaid roles and work-from-home share by category and city over time.

### Input

| Field | What it does |
| --- | --- |
| `listingType` | Internships (default), fresher jobs, all jobs, or internships + fresher jobs |
| `keywords` | Free-text searches, one per line (`web development`, `data entry`, `React`). Each keyword is its own search |
| `categories` | Internshala categories, spelled as in its URLs: `web-development`, `marketing`, `data-science`, `graphic-design`, `content-writing`, `finance`, `human-resources`, `mba`... |
| `locations` | Indian cities, one per line. Nearby towns are grouped by the site (Delhi includes Gurgaon and Noida) |
| `workFromHome`, `partTime` | Remote only, part-time only |
| `minStipend` | Internships: minimum rupees per month (the top of the stated range counts). Unpaid, lump-sum and non-rupee stipends are left out when set |
| `maxResults` | Per search (default 100, prefill 30, up to 5,000). You pay only for listings delivered |
| `includeDetails` | Open each listing for the fields listed above. Same price, slower |
| `startUrls` | Any Internshala search URL (`/internships/...`, `/jobs/...`, `/fresher-jobs/...`, the "for women" pages) |

Keywords, categories and cities combine: two keywords and three cities make six searches, and a listing found twice is delivered once. With nothing set, you get the newest listings overall.

#### Examples

Web development internships in Bangalore and Pune, with full details:

```json
{ "listingType": "internships", "categories": ["web-development"], "locations": ["Bangalore", "Pune"], "maxResults": 200, "includeDetails": true }
```

Work-from-home marketing internships paying at least ₹10,000 a month:

```json
{ "listingType": "internships", "categories": ["marketing"], "workFromHome": true, "minStipend": 10000, "maxResults": 300 }
```

Fresher jobs for data science, plus a pasted search page:

```json
{ "listingType": "fresher-jobs", "categories": ["data-science"], "startUrls": [{ "url": "https://internshala.com/fresher-jobs/data-science-jobs-in-bangalore/" }] }
```

### Pricing

**$0.40 per 1,000 listings** on the Free plan, billed per listing delivered ($0.0004 each):

| Plan | Per 1,000 listings |
| --- | --- |
| Free | $0.40 |
| Bronze | $0.36 |
| Silver | $0.32 |
| Gold | $0.28 |

Plus $0.001 per run to start. Platform usage (compute, proxies, storage) is included in these prices. Full details cost nothing extra. A search with no listings costs nothing beyond the run start, and you can cap spend with Apify's maximum-charge setting: the run stops cleanly when it is reached.

### FAQ

**Do I need an Internshala account or API key?** No. The actor reads the public listing pages.

**How many listings can one search return?** As many as Internshala shows for it, up to your `maxResults`. A whole category runs to a few hundred; the full site is several thousand. When a list ends before your limit, the run status says so.

**What if I type a category or city Internshala does not know?** The site then shows an unfiltered list, so the actor drops it and says so in the run status instead of handing you the wrong rows. Use a keyword for free text, or paste the search URL from the site.

**Why did Work from home ignore my city?** Remote listings have no city, so the city is not applied when work from home is on.

**Is the stipend per month?** The text is exactly as printed. The `...InrMonthly` numbers are only filled for rupee stipends quoted per month or per week; lump sums and unpaid roles stay null so nothing is guessed.

**Why do some rows have no applicant count?** New listings show "Be an early applicant" instead of a number, and very popular ones show "1000+".

**Can I run it on a schedule?** Yes. Schedule the same input daily and compare `id`s between runs to see what is new.

### Related actors

- [Naukri Jobs Scraper](https://apify.com/tagadanar/naukri-scraper): experienced-hire jobs across India with salaries and skills.
- [LinkedIn Jobs Scraper](https://apify.com/tagadanar/linkedin-jobs-scraper): hiring signals from LinkedIn job posts.
- [Glassdoor Jobs Scraper](https://apify.com/tagadanar/glassdoor-jobs-scraper): jobs with the employer's rating on every row.
- [ATS Jobs Scraper](https://apify.com/tagadanar/ats-jobs-aggregator): open roles straight from company career boards.

# Changelog

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

# Actor input Schema

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

Internships, fresher jobs (entry-level jobs open to people with no experience), all jobs, or internships plus fresher jobs in one run.

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

Free-text searches as you would type them into Internshala's search box, one per line (for example web development, data entry, graphic design, React). Each keyword is a separate search. Leave keywords, categories and cities empty to collect the newest listings overall.

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

Internshala's own categories, one per line, spelled the way they appear in its URLs (for example web-development, marketing, data-science, graphic-design, finance, content-writing, human-resources, mba, engineering). Narrower than a keyword. A name the site does not know is reported in the run status and skipped; use a keyword for those.

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

Indian cities, one per line (for example Delhi, Mumbai, Bangalore, Pune, Hyderabad). Internshala groups nearby towns (Delhi includes Gurgaon and Noida). Ignored when Work from home is on.

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

Only remote listings.

## `partTime` (type: `boolean`):

Only part-time listings.

## `minStipend` (type: `integer`):

Keep internships whose monthly stipend reaches at least this many rupees (the top of the stated range counts). Unpaid, lump-sum and non-rupee stipends are left out when this is set. Does not apply to jobs. 0 = no minimum.

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

Stop each search (each keyword, category, city or pasted URL) after this many listings. You only pay for listings delivered.

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

Open every listing for its full description, who can apply, perks, number of openings, applicants so far, start date, apply-by date and the company page. Slower; same price per listing.

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

Paste any Internshala search page, for example https://internshala.com/internships/work-from-home-marketing-internships/ or https://internshala.com/fresher-jobs/data-science-jobs-in-bangalore/. Filters already in the URL are kept. Works together with the fields above.

## Actor input object example

```json
{
  "listingType": "internships",
  "keywords": [
    "web development"
  ],
  "workFromHome": false,
  "partTime": false,
  "minStipend": 0,
  "maxResults": 30,
  "includeDetails": false
}
```

# Actor output Schema

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

One item per internship or job in the default dataset.

# 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": [
        "web development"
    ],
    "maxResults": 30
};

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

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

```

## MCP server setup

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