# Internshala Jobs Scraper — Internships & Jobs in India (`ocrad/internshala-jobs-scraper`) Actor

Scrape Internshala internships and fresher jobs from any listing URL: title, company, location, stipend or salary, duration, experience, start date, apply-by date, openings, skills, perks and full description. Export JSON/CSV/Excel.

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

## Pricing

from $0.60 / 1,000 records

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

***

Internships & Jobs in India. Provide any Internshala internships or jobs listing URL and get structured listing data across result pages: title, company, location, stipend or salary, duration or experience, posting time, skills and a description excerpt. Turn on `detailedInfo` to also get the full description, start date, apply-by date, number of openings, full skill list, perks, eligibility text and applicant count from each detail page.

***

#### **📋 Example Output**

Record from a run with `detailedInfo: true` on `https://internshala.com/jobs/data-science-jobs/` (without `detailedInfo`, the detail-only fields are `null`):

```json
{
  "id": "3303197",
  "url": "https://internshala.com/job/detail/ai-video-editor-job-in-delhi-at-ayurveda-house-private-limited1790428079",
  "title": "AI Video Editor",
  "company": "Ayurveda House Private Limited",
  "location": "Delhi",
  "isJob": true,
  "stipend": null,
  "salary": "₹ 3,00,000 - 3,60,000 /year",
  "duration": null,
  "experience": "1 year(s)",
  "startDate": "Immediately",
  "postedAt": "2026-09-26",
  "applyBy": "26 Oct' 26",
  "openings": 2,
  "applicants": 81,
  "employmentType": "FULL_TIME",
  "snippet": "Key responsibilities: 1. Create creative video ideas, concepts, and scripts using AI tools",
  "descriptionText": "Key responsibilities: 1. Create creative video ideas, concepts, and scripts using AI tools based on project requirements. 2. Generate and edit videos using AI video generation tools, existing footage, images, and other creative assets. 3. Use AI tools to create visuals, animations, voice-overs, backgrounds, characters, and other video elements. 4. Write and improve prompts to generate the desired visuals, scenes, styles, and video outputs. 5. Edit and enhance videos by adding music, sound effects, captions, transitions, graphics, and visual effects. 6. Ensure AI-generated content looks natural, consistent, high-quality, and follows the brand style. 7. Create engaging videos for social media, advertisements, YouTube, and other digital platforms. 8. Collaborate with the creative and marketing teams to understand requirements and deliver videos on time. 9. Stay updated with new AI video tools, trends, and techniques to improve the quality and speed of content creation. 10. Manage multiple projects and make quick creative changes based on feedback.",
  "whoCanApply": "Only those candidates can apply who: 1. have minimum 1 years of experience 2. are from Delhi only",
  "skills": [
    "AI Video Generation",
    "Animation",
    "Generative AI Tools",
    "Motion Graphics",
    "Video Editing"
  ],
  "perks": [
    "Informal dress code"
  ],
  "scrapedAt": "2026-10-13T17:57:36.415Z"
}
```

Internship listings fill `stipend` and `duration` instead of `salary` and `experience`, and have `isJob: false`.

#### ⚙️ **Configuration**

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `url` | String | *(required)* | Internshala internships or jobs listing URL with filters applied, e.g. `https://internshala.com/internships/marketing-internship/` or `https://internshala.com/jobs/data-science-jobs/`. A `/page-N/` suffix is honoured as the starting page. |
| `maxPages` | Integer | `1` | Number of listing pages to scrape (1–1000, 40–60 listings each). |
| `maxItems` | Integer | `0` | Stop after this many listings (0 = no limit). Handy to cap detail-page requests. |
| `detailedInfo` | Boolean | `false` | Visit each listing's detail page for the full description, start date, apply-by date, openings, full skills, perks, eligibility and applicant count. |
| `proxyConfiguration` | Object | Apify Proxy (auto) | Proxy settings; switch to RESIDENTIAL only if results are empty. |

##### Example Input

```json
{
  "url": "https://internshala.com/internships/marketing-internship/",
  "maxPages": 3,
  "detailedInfo": false
}
```

##### Getting your listing URL

1. Open Internshala, pick **Internships** or **Jobs** and apply your filters (profile, location, work from home, stipend …)
2. Copy the full URL from your browser address bar
3. Paste it as the `url` input

***

#### 💬 **Support and Feedback**

Reach out via Apify support channels or leave feedback on the Actor's page.

#### **Is it legal to scrape Internshala data?**

It is legal to scrape publicly available data such as listing titles, companies, stipends and descriptions. Results may contain personal data (e.g. names of individual recruiters); scrape personal data only with a legitimate reason. Personal data is protected by India's DPDP Act, GDPR and other regulations — consult your legal advisor if unsure.

# Actor input Schema

## `url` (type: `string`):

An Internshala internships or jobs listing URL with your filters applied, e.g. https://internshala.com/internships/marketing-internship/ or https://internshala.com/jobs/data-science-jobs/. A /page-N/ suffix is honoured as the starting page.

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

How many listing pages to scrape (40-60 items each). Pagination via the /page-N/ path suffix (1-based).

## `maxItems` (type: `integer`):

Stop after this many listings (0 = no limit). Useful to cap detail-page requests when detailedInfo is on.

## `detailedInfo` (type: `boolean`):

Visit each listing's detail page for the full description, start date, apply-by date, number of openings, full skill list, perks, who-can-apply text and applicant count. Slower, one extra request per item.

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

Proxy settings. Defaults to Apify Proxy (auto). Switch to RESIDENTIAL only if results are empty.

## Actor input object example

```json
{
  "url": "https://internshala.com/internships/marketing-internship/",
  "maxPages": 1,
  "maxItems": 0,
  "detailedInfo": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `id` (type: `string`):

Internshala listing ID (numeric string)

## `url` (type: `string`):

Full URL of the internship or job detail page

## `title` (type: `string`):

Internship or job title

## `company` (type: `string`):

Hiring company name

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

Location(s), comma separated; 'Work from home' for remote roles

## `isJob` (type: `string`):

true for a job listing, false for an internship

## `stipend` (type: `string`):

Internship stipend as shown, e.g. '₹ 5,000 - 10,000 /month' or 'Unpaid' (null for jobs)

## `salary` (type: `string`):

Job salary / annual CTC as shown, e.g. '₹ 3,00,000 - 4,00,000 /year' (null for internships)

## `duration` (type: `string`):

Internship duration, e.g. '6 Months' (null for jobs)

## `experience` (type: `string`):

Experience required for jobs, e.g. '1 year(s)' (null for internships)

## `startDate` (type: `string`):

Start date as shown on the detail page, e.g. 'Immediately' (detailedInfo only)

## `postedAt` (type: `string`):

When the listing was posted: ISO date from the detail page when available, otherwise the relative time shown on the card (e.g. '3 weeks ago')

## `applyBy` (type: `string`):

Application deadline as shown, e.g. "31 Oct' 26" (detailedInfo only)

## `openings` (type: `string`):

Number of openings (detailedInfo only)

## `applicants` (type: `string`):

Number of applicants so far as shown on the detail page (detailedInfo only)

## `employmentType` (type: `string`):

Employment type from the page's JobPosting data, e.g. 'INTERN, FULL_TIME' (detailedInfo, internships only)

## `snippet` (type: `string`):

Short description excerpt shown on the listing card

## `descriptionText` (type: `string`):

Full 'About the internship/job' description as plain text (detailedInfo only)

## `whoCanApply` (type: `string`):

Eligibility text from the 'Who can apply' section (detailedInfo only)

## `skills` (type: `string`):

Required skills (the card shows a subset; detailedInfo gives the full list)

## `perks` (type: `string`):

Perks listed on the detail page, e.g. 'Certificate', 'Letter of recommendation' (detailedInfo only)

## `scrapedAt` (type: `string`):

ISO 8601 timestamp when the record was scraped

# 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 = {
    "url": "https://internshala.com/internships/marketing-internship/",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ocrad/internshala-jobs-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 = {
    "url": "https://internshala.com/internships/marketing-internship/",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("ocrad/internshala-jobs-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 '{
  "url": "https://internshala.com/internships/marketing-internship/",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call ocrad/internshala-jobs-scraper --silent --output-dataset

```

## MCP server setup

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