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

Scrape internships and fresher jobs from Internshala with stipend, duration, required skills, company, openings and full descriptions. Filter by keyword, category, city, work-from-home and minimum stipend. No login needed.

- **URL**: https://apify.com/scrapesage/internshala-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Jobs, Lead generation, Agents
- **Stats:** 4 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 listing scrapeds

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

## Internshala Scraper - India Internships & Fresher Jobs

**India's biggest internship board, as a clean dataset.** Search by keyword, category, city, work-from-home or minimum stipend, and get back every listing with the stipend parsed into numbers, the required skills as a list, the duration, the company, the number of openings and the full description.

No login, no cookies, no API key.

### Why this one

- **Stipend you can actually filter on.** `₹ 8,000 - 14,000 /month` is also returned as `stipendMin: 8000`, `stipendMax: 14000`, `stipendPeriod: "month"`, `stipendIsPaid: true` - so you can sort, threshold and chart it without writing a parser.
- **Skills as a real array**, not a sentence: `["MS-Office", "Counseling", "Effective Communication"]`.
- **Internships and fresher jobs in one actor.** Set `listingType` to `internships`, `jobs`, or `both`.
- **Filters compose.** Keywords x categories x cities are expanded into separate searches, so `["marketing","finance"] x ["mumbai","delhi"]` runs all four and dedupes the results for you.

### Input

| Field | What it does |
|---|---|
| `listingType` | `internships`, `jobs`, or `both` |
| `keywords` | Free-text search terms, each searched separately |
| `categories` | Internshala category slugs, e.g. `web-development`, `human-resources` |
| `locations` | Indian cities, e.g. `pune`, `bangalore` |
| `workFromHome` | Remote listings only |
| `minStipend` | Minimum INR per month |
| `postedWithinDays` | Only recent listings |
| `fetchDetails` | Open each listing for skills, responsibilities, openings and exact dates (default on) |
| `maxPages` / `maxResults` | Depth per search, and the total cap |
| `startUrls` | Paste an Internshala URL you built in the browser |

### Output

One row per listing:

```json
{
  "type": "listing",
  "listingType": "internship",
  "listingId": "3232060",
  "title": "Marketing - Internship",
  "url": "https://internshala.com/internship/detail/marketing-internship-in-pune-at-steepgraph-systems-private-limited1785989467",
  "companyName": "SteepGraph Systems Private Limited",
  "locationName": "Pune",
  "locations": ["Pune"],
  "isWorkFromHome": false,
  "stipendText": "₹ 2,000 - 10,000 /month",
  "stipendMin": 2000,
  "stipendMax": 10000,
  "stipendCurrency": "INR",
  "stipendPeriod": "month",
  "stipendIsPaid": true,
  "durationText": "5 Months",
  "durationMonths": 5,
  "postedText": "1 day ago",
  "datePosted": "2026-08-06",
  "validThrough": "2026-09-05",
  "isActivelyHiring": true,
  "openings": 2,
  "skills": ["Digital Marketing", "Email Marketing", "MS-Excel"],
  "description": "Selected intern's day-to-day responsibilities include...",
  "responsibilities": "1. Conduct market research and competitor analysis...",
  "aboutCompany": "SteepGraph Systems Pvt. Ltd. provides expert consulting...",
  "employmentType": "INTERN",
  "industry": "Information Technology",
  "detailFetched": true,
  "searchQuery": "internships/marketing",
  "scrapedAt": "2026-08-07T05:10:00.000Z"
}
```

### Notes on the data

- **Two date fields, deliberately.** `postedText` is what the site shows ("1 day ago") and `postedAtApprox` converts it, while `datePosted` is the exact date from the listing's own structured data. The approximate one is never passed off as exact.
- **`hiringOrganizationUrl` is only present when the company published a link** - roughly 6 in 10 listings.
- **Unpaid internships are real listings**, returned with `stipendIsPaid: false` and `stipendMin/Max: 0` rather than dropped.
- Turning `fetchDetails` off is faster and cheaper but returns only what the search page shows: no skills, responsibilities, openings or exact dates.

### Pricing

Pay-per-event: **$0.002 per listing**. Runs that find nothing charge nothing, and every finished run tells you what to change.

### Use with AI assistants (MCP)

Works as a tool in any MCP-compatible assistant through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) - ask your agent for "remote marketing internships in India paying over ₹10,000" and it can call this actor directly.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### Legal

This actor collects publicly listed job and internship postings - business information published by employers for the purpose of being found. It does not log in and does not collect applicant data. Listing text remains the property of the posting company; use the output for sourcing, market research and aggregation, not for republishing listings as your own.

This actor is not affiliated with, endorsed by, or sponsored by Internshala or Scholiverse Educare Pvt. Ltd. Internshala is a trademark of its respective owner.

# Actor input Schema

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

Internships, fresher jobs, or both.

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

Free-text search terms, e.g. "marketing", "python", "graphic design". Each keyword is searched separately and combined with your categories and locations.

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

Internshala category slugs, e.g. "marketing", "web-development", "human-resources", "finance". Narrower and cleaner than a keyword when you know the category.

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

Indian cities, e.g. "pune", "bangalore", "delhi", "mumbai". Leave empty for all of India.

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

Only return remote / work-from-home listings.

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

Only return listings paying at least this much per month. 0 disables the filter.

## `postedWithinDays` (type: `integer`):

Only keep listings posted in the last N days. 0 disables the filter. Listings with no readable date are kept rather than silently dropped.

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

Open each listing to get the full description, required skills, responsibilities, number of openings, exact posted date and apply-by date. Turn off for a faster, cheaper run that returns the search-page fields only.

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

How many result pages to walk for each keyword/category/city combination. Each page holds roughly 40-60 listings.

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

Total cap across every search. Set 0 for no limit (explicit opt-in).

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

Internshala listing URLs you have already built in the browser, e.g. https://internshala.com/internships/keywords-marketing/internship-in-pune/. Used as-is.

## `maxConcurrency` (type: `integer`):

How many listing pages to open in parallel.

## `proxyConfiguration` (type: `object`):

Internshala is an Indian site; an India-based residential proxy is the most reliable. Keep the default unless you know what you are changing.

## `urlsFromFile` (type: `string`):

Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically.

## Actor input object example

```json
{
  "listingType": "internships",
  "keywords": [
    "python",
    "marketing"
  ],
  "categories": [
    "web-development"
  ],
  "locations": [
    "pune",
    "bangalore"
  ],
  "workFromHome": false,
  "minStipend": 0,
  "postedWithinDays": 0,
  "fetchDetails": true,
  "maxPages": 3,
  "maxResults": 100,
  "startUrls": [],
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

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

Every scraped listing as a JSON item 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": [
        "marketing"
    ],
    "categories": [],
    "locations": [],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    },
    "urlsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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": ["marketing"],
    "categories": [],
    "locations": [],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
    "urlsFromFile": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/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": [
    "marketing"
  ],
  "categories": [],
  "locations": [],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  },
  "urlsFromFile": ""
}' |
apify call scrapesage/internshala-scraper --silent --output-dataset

```

## MCP server setup

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