# Internshala Scraper: Jobs & Internship Monitor (`getascraper/internshala-scraper`) Actor

Scrape and monitor public Internshala internship and job listings. Filter by keyword, city, category, work arrangement, compensation, age, and public badges. Reuse a named monitoring state to emit only new or changed listings on scheduled runs, with debug logging available for troubleshooting.

- **URL**: https://apify.com/getascraper/internshala-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 87 total users, 39 monthly users, 99.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.98 / 1,000 job leads

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?

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: Jobs & Internship Monitor

<table width="100%" style="table-layout:fixed;border-collapse:collapse">
<tr><td colspan="4" style="padding:14px 18px;background:#F0FDFA;border-top:3px solid #0F766E;border-left:1px solid #D6D3D1;border-right:1px solid #D6D3D1;border-radius:8px 8px 0 0"><span style="font-size:16px;font-weight:700;color:#1C1917">Track public internships and entry-level jobs without rechecking the same listings.</span> <span style="font-size:15px;color:#57534E">Collect source-published job data once or schedule a change-only feed with stable listing identities.</span></td></tr>
<tr><td colspan="4" style="padding:10px 14px;background:#0F766E;border-left:1px solid #D6D3D1;border-right:1px solid #D6D3D1"><span style="color:#FFFFFF;font-size:14px;font-weight:700;letter-spacing:0.5px">India jobs sources and inventory</span> <span style="color:#F0FDFA;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Apna, CutShort, Internshala, Instahyre, and the combined India job feed</span></td></tr>
<tr>
<td style="padding:10px 12px;border-left:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:25%;background:#FFFFFF;border-radius:0 0 0 8px"><span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-Bqf3sZlaZvWnVZbe1-X4r5SBrUub-CompressJPEG.Online_img%28512x512%29_%2813%29.jpg" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/apna-co-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Apna.co Jobs</a></span><br><span style="color:#57534E;font-size:11px">Blue and grey collar roles</span></td>
<td style="padding:10px 12px;border-left:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:25%;background:#F0FDFA"><span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-4dMyE80KpfCIKroD4-JPR6apPnmU-unnamed_%2811%29.png" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/internshala-scraper" style="color:#0F766E;text-decoration:none;font-weight:700;font-size:13px">Internshala Monitor</a></span><br><span style="color:#0F766E;font-size:11px;font-weight:700">&#10148; You are here</span></td>
<td style="padding:10px 12px;border-left:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:25%;background:#FFFFFF"><span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-M5Myh7i6WMTmfwMlw-NCEUGam6gM-logo_200_200.webp" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/instahyre-jobs-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Instahyre Jobs</a></span><br><span style="color:#57534E;font-size:11px">Tech jobs and hiring alerts</span></td>
<td style="padding:10px 12px;border-left:1px solid #D6D3D1;border-right:1px solid #D6D3D1;border-bottom:1px solid #D6D3D1;vertical-align:top;width:25%;background:#FFFFFF;border-radius:0 0 8px 0"><span style="overflow-wrap:break-word;word-break:break-word"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/jNDbFabbVxMhnQNb4-actor-8hG15V7QtjKUpwAt3-GucaVgd5Jo-s11728_indian_flag_logo_isolated_on_white_background_-styliz_104" width="20" height="20" style="vertical-align:middle;border-radius:4px">&nbsp;<a href="https://apify.com/getascraper/india-job-inventory-feed" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">India Job Feed</a></span><br><span style="color:#57534E;font-size:11px">Combined multi-source job inventory</span></td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#F0FDFA;border:1px solid #99F6E4;border-top:4px solid #0F766E;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Internships and entry-level jobs from Internshala, tracked automatically</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Collect public Internshala listings with stipend or salary, skills, and posting age, then monitor for new and changed listings on a schedule.</span>
</td>
</tr>
</table>

<table width="100%"><tr><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-radius:10px 0 0 10px;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#115E59">✓ Honest fields</span><br><span style="font-size:12px;color:#57534E">Missing values stay missing.</span></td><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#115E59">↻ Monitor change</span><br><span style="font-size:12px;color:#57534E">See new and changed listings.</span></td><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#115E59">⌁ Filter clearly</span><br><span style="font-size:12px;color:#57534E">Use tested public filters.</span></td><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#115E59">↓ Export cleanly</span><br><span style="font-size:12px;color:#57534E">Keep a stable data feed.</span></td></tr></table>

### 🔍 What does Internshala Scraper: Jobs & Internship Monitor do?

**Internshala Scraper: Jobs & Internship Monitor** collects public internship and job listings from [Internshala](https://internshala.com/). It extracts the published title, company, location, compensation, duration or experience, skills, posting age, public badges, and canonical detail URL without logging in.

Use it for one-time datasets or recurring feeds. Apify provides downloadable datasets, API access, schedules, integrations, logs, and run monitoring. The Actor’s monitoring mode can suppress previously seen records and emit only new or changed public listings.

### Why use the Internshala jobs and internship monitor?

- Build a structured feed of public internships or entry-level jobs.
- Track new matching opportunities on a recurring Apify schedule.
- Detect meaningful changes to compensation, skills, location, badges, deadlines, descriptions, and other published fields.
- Filter results before they enter a spreadsheet, database, webhook, or recruiting workflow.
- Use stable `dedupeId` values instead of matching changing titles or URLs yourself.

The Actor is deliberately limited to public listing and detail pages. It does not use credentials, access applications or candidate profiles, solve CAPTCHAs, or collect private account data.

### 🚀 How to scrape Internshala listings

<table width="100%"><tr><td style="padding:16px 14px;width:33%;background:#F0FDFA;border:1px solid #99F6E4;border-radius:10px 0 0 10px;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#0F766E;letter-spacing:1px">STEP 1</span><br><span style="font-size:14px;font-weight:700;color:#1C1917">Choose the source</span><br><span style="font-size:12px;color:#57534E">Select internships or jobs, then add public filters.</span></td><td style="padding:16px 14px;width:33%;background:#F0FDFA;border:1px solid #99F6E4;border-left:none;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#0F766E;letter-spacing:1px">STEP 2</span><br><span style="font-size:14px;font-weight:700;color:#1C1917">Set the depth</span><br><span style="font-size:12px;color:#57534E">Use details only when you need public enrichment.</span></td><td style="padding:16px 14px;width:33%;background:#F0FDFA;border:1px solid #99F6E4;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#0F766E;letter-spacing:1px">STEP 3</span><br><span style="font-size:14px;font-weight:700;color:#1C1917">Monitor the feed</span><br><span style="font-size:12px;color:#57534E">Reuse the monitoring state on scheduled runs.</span></td></tr></table>

For recurring monitoring, create an Apify schedule with the same input and select a monitoring mode. The first successful monitor run treats the selected listings as new; later runs compare them with persisted fingerprints.

### Input

| Field                                     | Behavior                                                                                                                                                                         |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `mode`                                    | Selects automatic internship or job sources. Public `startUrls` derive their mode from the URL.                                                                                  |
| `startUrls`                               | Optional public Internshala listing pages. They replace automatic source URL construction; record-level filters still apply. Pagination follows the page’s public **Next** link. |
| `keyword`                                 | Matches public title, company, summary, or skill text. It also selects an Internshala keyword source when URLs are built automatically.                                          |
| `locations`                               | OR within the city list; all other selected filters use AND semantics. Work-from-home does not automatically count as a city match.                                              |
| `category`                                | Internship category source. It is supported only for internships and cannot be combined with `startUrls`.                                                                        |
| `workFromHome`, `partTime`                | Require the corresponding public card marker.                                                                                                                                    |
| `minStipend`, `minSalary`                 | Compare against the published minimum amount, not the upper end of a range. Missing or undisclosed compensation does not pass a positive minimum.                                |
| `maxDurationMonths`, `maxExperienceYears` | Require a parseable published value when enabled. `0` disables the filter.                                                                                                       |
| `datePosted`                              | Uses the public relative posting age. Records with an unknown age do not pass a selected window.                                                                                 |
| `specialFilters`                          | Supports card-verifiable `actively_hiring`, `early_applicant`, and `job_offer` badges. Every selected badge is required.                                                         |
| `sortBy`                                  | Keeps source relevance or sorts the collected matching window by public posting age. Unknown ages sort last.                                                                     |
| `includeDetails`                          | Adds one public detail-page request per selected listing. A failed detail request retains the core record with `detailsFetched: false`.                                          |
| `maxResults`                              | Limits unique listings that pass the filters. In monitor mode, fewer records may be emitted because unchanged candidates can be suppressed.                                      |
| `monitoringMode`                          | `off`, `new_only`, `new_and_changed`, or `all_with_status`.                                                                                                                      |
| `monitoringStoreName`                     | Persistent named key-value store used across scheduled runs.                                                                                                                     |
| `monitorStateKey`                         | `auto` derives a deterministic key from source/filter scope; an explicit key lets chosen workflows share history.                                                                |

Automatic source URLs use verified path-based Internshala patterns. URLs containing query parameters or fragments, non-Internshala URLs, login pages, and detail pages are rejected as `startUrls`.

### Output

Each record contains only fields present or verifiably derived from the public source. Optional fields are omitted when unavailable; the Actor does not fill gaps with `"Unknown"`, `"N/A"`, generic names, or made-up values.

This abridged example uses a public listing observed during selector verification on 29 July 2026:

```json
{
    "id": "3220046",
    "dedupeId": "internshala:internships:3220046",
    "mode": "internships",
    "title": "Supply Chain & Logistics Operations",
    "company": "WeMee – Corporate Gifting Company",
    "url": "https://internshala.com/internship/detail/supply-chain-logistics-operations-internship-in-pune-at-wemee--corporate-gifting-company1784879458",
    "location": "Pune",
    "isWorkFromHome": false,
    "isPartTime": false,
    "stipendText": "₹ 7,000 - 15,000 /month",
    "stipendMin": 7000,
    "stipendMax": 15000,
    "durationMonths": 4,
    "skills": ["MS-Office", "Operations", "MS-Excel", "Google Sheets", "Logistics Management"],
    "isActivelyHiring": true,
    "badges": ["actively_hiring"],
    "postedAgo": "5 days ago"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data fields

| Field                                                                                    | Description                                                                    |
| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| `id`                                                                                     | Internshala’s public listing ID.                                               |
| `dedupeId`                                                                               | Stable `internshala:<mode>:<id>` identifier for downstream deduplication.      |
| `mode`                                                                                   | `internships` or `jobs`.                                                       |
| `title`, `company`, `url`                                                                | Published listing identity and canonical public detail URL.                    |
| `companyLogo`, `location`, `summary`                                                     | Public card values when present. Placeholder logos are omitted.                |
| `isWorkFromHome`, `isPartTime`                                                           | Booleans derived from explicit public listing markers.                         |
| `stipendText`, `stipendMin`, `stipendMax`                                                | Published monthly internship stipend text and parsed INR range.                |
| `salaryText`, `salaryMin`, `salaryMax`                                                   | Published annual job salary text and parsed INR range, including LPA notation. |
| `durationMonths`, `experienceMin`, `experienceMax`                                       | Published duration or required experience when parseable.                      |
| `skills`, `badges`, `isActivelyHiring`                                                   | Public skills and supported badge markers.                                     |
| `postedAgo`, `postedDate`, `scrapedAt`                                                   | Relative card age, exact detail-page date when published, and extraction time. |
| `detailsFetched`                                                                         | Whether optional detail enrichment succeeded.                                  |
| `description`, `eligibility`, `perks`, `openings`, `applicationDeadline`, `aboutCompany` | Optional public detail fields.                                                 |
| `changeType`, `contentHash`, `firstSeenAt`                                               | Added when monitoring is enabled.                                              |

The default key-value store also contains `run-summary`, with page, parser, filter, detail, warning, error, and monitoring counts.

### How recurring Internshala monitoring works

Monitoring stores compact fingerprints in the persistent store named by `monitoringStoreName`. With `monitorStateKey: "auto"`, source URLs, filters, and the detail setting produce a deterministic state key, so different searches do not overwrite one another. `scrapedAt` and the changing relative `postedAgo` label are excluded from fingerprints to avoid false change events.

State is updated only after a complete crawl. If listing requests fail, or detail requests fail while enrichment is enabled, the run can still return available records but does not overwrite the previous monitor baseline.

Monitoring reports how many listings were new, changed, unchanged, and not seen in the current matching window. It does **not** emit removal events: a listing can leave a limited result window without being removed from Internshala.

### 💰 Pricing

Pricing is pay per result, with no subscription. Change-only monitoring can reduce result volume on recurring runs. Check the Store pricing panel before a large run.

### ⭐ Enjoying Internshala Scraper: Jobs & Internship Monitor?

<table width="100%"><tr><td style="padding:20px 24px 14px;background:#F0FDFA;border:1px solid #99F6E4;border-left:5px solid #0F766E;border-radius:10px 10px 0 0"><span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br><span style="font-size:17px;font-weight:800;color:#1C1917">A review helps job-data and hiring-research teams find a dependable public listing monitor.</span><br><span style="font-size:14px;color:#57534E">Your feedback tells us which workflow to improve next.</span></td></tr><tr><td style="padding:0;background:#0F766E;border:1px solid #99F6E4;border-top:none;border-radius:0 0 10px 10px;text-align:center"><a href="https://apify.com/getascraper/internshala-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px">★&nbsp;&nbsp;Rate this Actor on Apify</a></td></tr></table>

### Tips and advanced options

- Start with a modest `maxResults` while validating a new filter combination.
- Keep the same source, filters, `monitoringStoreName`, and state key across scheduled monitor runs.
- Use separate explicit state keys when two workflows intentionally need independent history for the same search.
- Leave detail enrichment off when card-level fields are enough.
- Inspect `run-summary` when output unexpectedly drops; `pagesWithoutListings`, `parseFailures`, warnings, and errors are drift signals.

### FAQ, disclaimer, and support

#### Does the Actor access private Internshala data?

No. It is scoped to public, logged-out listing and detail pages. It does not submit applications, access candidate or employer accounts, or collect private profile data.

#### Why did a requested filter return fewer records than expected?

Filters are strict. All selected filter groups use AND semantics, while multiple cities use OR within the city list. When a requested field is absent or cannot be parsed, the listing is excluded instead of being guessed.

#### Why can a monitor run emit zero records?

`new_only` and `new_and_changed` suppress unchanged listings. Check `run-summary.monitoring` to distinguish “no changes” from an incomplete crawl.

Use the Actor’s **Issues** tab to report a reproducible public URL, input, and run ID. Internshala is a trademark of Scholiverse Educare Private Limited. This independent Actor is not endorsed by or affiliated with Internshala. You are responsible for using public data in accordance with applicable laws and the website’s terms.

### 🔗 Other actors

- [Apna.co Jobs Scraper](https://apify.com/getascraper/apna-co-scraper) ↗ - collects public blue and grey collar job listings in India.
- [CutShort Jobs Scraper: India Tech Salaries](https://apify.com/getascraper/cutshort-scraper) ↗ - collects public Indian technology and startup jobs.
- [Job Bank Scraper](https://apify.com/getascraper/jobbank-scraper) ↗ - collects public Canadian job listings.

# Actor input Schema

## `mode` (type: `string`):

Choose public internship listings or public job listings.

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

Public Internshala internships, jobs, or fresher-jobs listing pages. These URLs replace automatic source URL construction, but verifiable record filters below still apply. Query parameters, fragments, detail pages, login pages, and non-Internshala URLs are rejected. Pagination follows each page's public Next link.

## `keyword` (type: `string`):

Search public title, company, summary, and skill text. With automatic sources, this also selects Internshala's keyword results page.

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

Only keep listings whose public location contains one of these cities. Multiple cities create separate source pages when the URL pattern supports it. Work-from-home does not automatically match a city.

## `category` (type: `string`):

Select an Internshala internship category source, for example 'Computer Science' or 'Marketing'. Supported only in internships mode and cannot be combined with startUrls.

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

Only keep listings explicitly marked as work from home.

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

Only keep listings explicitly marked as part time.

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

Only keep internships whose published minimum monthly stipend is at least this amount. Unpaid or undisclosed stipends do not pass a positive minimum.

## `minSalary` (type: `integer`):

Only keep jobs whose published minimum annual salary is at least this amount. Undisclosed salaries do not pass a positive minimum.

## `maxDurationMonths` (type: `integer`):

Only keep listings with a published duration at or below this number of months. 0 disables the filter.

## `maxExperienceYears` (type: `integer`):

Only keep jobs whose published minimum experience requirement is at or below this number of years. 0 disables the filter.

## `datePosted` (type: `string`):

Filter using the public relative posting age shown on the listing card. Records without a parseable age do not pass a selected window.

## `specialFilters` (type: `array`):

Only keep listings carrying every selected public card badge.

## `sortBy` (type: `string`):

Keep source relevance order or sort the collected matching window by the public relative posting age. Records with an unknown age sort last.

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

Request each selected public detail page for description, eligibility, perks, openings, application deadline, company text, and exact posted date when available. Core listing output is retained with detailsFetched=false if a detail request fails.

## `monitoringMode` (type: `string`):

Off emits all selected listings. Monitoring modes compare stable listing fingerprints with prior runs in a persistent named store. The first successful monitor run treats all selected listings as new.

## `monitoringStoreName` (type: `string`):

Persistent named key-value store shared by recurring runs. Change this to isolate environments or workflows.

## `monitorStateKey` (type: `string`):

Use 'auto' to derive a deterministic key from the effective source, filters, and detail setting. Set an explicit key to control which recurring runs share history.

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

Stop after this many unique listings pass the filters. 0 means no Actor-side limit. Monitoring can emit fewer records because unchanged candidates may be suppressed.

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

Maximum parallel public page requests.

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

Optional Apify proxy configuration for public page requests.

## `debugLogging` (type: `boolean`):

Enable additional page and parser diagnostics.

## Actor input object example

```json
{
  "mode": "internships",
  "startUrls": [],
  "keyword": "",
  "locations": [],
  "category": "",
  "workFromHome": false,
  "partTime": false,
  "minStipend": 0,
  "minSalary": 0,
  "maxDurationMonths": 0,
  "maxExperienceYears": 0,
  "datePosted": "all",
  "specialFilters": [],
  "sortBy": "relevance",
  "includeDetails": false,
  "monitoringMode": "off",
  "monitoringStoreName": "internshala-monitor-state",
  "monitorStateKey": "auto",
  "maxResults": 25,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debugLogging": false
}
```

# Actor output Schema

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

No description

## `runSummary` (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 = {
    "mode": "internships",
    "startUrls": [],
    "keyword": "",
    "locations": [],
    "category": "",
    "workFromHome": false,
    "partTime": false,
    "minStipend": 0,
    "minSalary": 0,
    "maxDurationMonths": 0,
    "maxExperienceYears": 0,
    "datePosted": "all",
    "specialFilters": [],
    "sortBy": "relevance",
    "includeDetails": false,
    "monitoringMode": "off",
    "monitoringStoreName": "internshala-monitor-state",
    "monitorStateKey": "auto",
    "maxResults": 25,
    "maxConcurrency": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "debugLogging": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/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 = {
    "mode": "internships",
    "startUrls": [],
    "keyword": "",
    "locations": [],
    "category": "",
    "workFromHome": False,
    "partTime": False,
    "minStipend": 0,
    "minSalary": 0,
    "maxDurationMonths": 0,
    "maxExperienceYears": 0,
    "datePosted": "all",
    "specialFilters": [],
    "sortBy": "relevance",
    "includeDetails": False,
    "monitoringMode": "off",
    "monitoringStoreName": "internshala-monitor-state",
    "monitorStateKey": "auto",
    "maxResults": 25,
    "maxConcurrency": 10,
    "proxyConfiguration": { "useApifyProxy": True },
    "debugLogging": False,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/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 '{
  "mode": "internships",
  "startUrls": [],
  "keyword": "",
  "locations": [],
  "category": "",
  "workFromHome": false,
  "partTime": false,
  "minStipend": 0,
  "minSalary": 0,
  "maxDurationMonths": 0,
  "maxExperienceYears": 0,
  "datePosted": "all",
  "specialFilters": [],
  "sortBy": "relevance",
  "includeDetails": false,
  "monitoringMode": "off",
  "monitoringStoreName": "internshala-monitor-state",
  "monitorStateKey": "auto",
  "maxResults": 25,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debugLogging": false
}' |
apify call getascraper/internshala-scraper --silent --output-dataset

```

## MCP server setup

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