Internshala Scraper avatar

Internshala Scraper

Pricing

Pay per event

Go to Apify Store
Internshala Scraper

Internshala Scraper

Scrape internship and job listings from Internshala — India's largest internship platform. Extract title, company, stipend, skills, location, duration, and more.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

6

Monthly active users

8 days ago

Last modified

Categories

Share

What does it do?

Internshala Scraper extracts internship and job listings from Internshala — India's largest internship and fresher jobs platform with over 7,000 active listings at any time. The scraper fetches structured data from search results pages and optionally enriches each listing with full detail page information including the complete job description, start date, apply-by deadline, and company background.

The actor uses pure HTTP requests and Cheerio for fast, lightweight scraping — no browser required. It runs in 256 MB of memory and typically completes 100 listings in under 30 seconds.

Who is it for?

  • 🎓 Career coaches and placement officers who maintain internship databases for students and need bulk exports on a schedule
  • 📊 HR analytics teams tracking stipend benchmarks, skill demand trends, and hiring velocity across industries in India
  • 🤖 Job board developers building aggregator platforms focused on Indian fresher hiring
  • 📈 Recruiters and talent acquisition teams monitoring competitor hiring activity and supply of candidates by skill
  • 🔬 Researchers and policy analysts studying the Indian internship market, WFH trends, and industry skill requirements

Why use it?

No browser required — pure HTTP+Cheerio means fast, cheap runs (< $0.01 for 100 listings)

Filters by keyword — narrow results by role type, technology, or domain (e.g. python, marketing, data-science)

Covers both internships and jobs — switch between internship listings and fresher job listings with one input field

Rich skill data — every listing includes the full array of required skills extracted from the card

Detail page enrichment — optionally fetch the full job description, company about section, start date, and apply-by deadline

Automatic pagination — scrapes as many pages as needed to hit your maxResults target

What data does it extract?

FieldDescriptionExample
idInternshala listing ID3145597
titleJob/internship titleBusiness Development (Sales)
companyCompany nameBasti Ki Pathshala Foundation
companyLogoUrlCompany logo image URLhttps://internshala-uploads.internshala.com/...
locationCity or "Work from home"Mumbai, Work from home
isWorkFromHomeBoolean WFH flagtrue
stipendMonthly or lump-sum stipend₹ 5,000 /month, ₹ 15,000 lump sum
durationInternship duration or job experience3 Months, 1-3 year(s)
skillsArray of required skills["Python", "SQL", "Excel"]
descriptionBrief job description from listing card"1. Build dashboards..."
postedAtWhen postedFew hours ago, 2 days ago
isPartTimePart-time flagfalse
isActivelyHiringCurrently actively hiringtrue
applyByApplication deadline (detail page)10 Jun' 26
startDateStart date (detail page)Immediately, 1 Jul' 26
aboutCompanyCompany description (detail page)"DineMatters is a fast-growing SaaS..."
fullDescriptionFull job description (detail page)"Selected intern's day-to-day..."
urlFull detail page URLhttps://internshala.com/internship/detail/...

Note: applyBy, startDate, aboutCompany, and fullDescription are only populated when fetchDetails: true is set.

How much does it cost?

Internshala Scraper uses Pay Per Event pricing:

TierPrice per listing
FREE$0.005/result
BRONZE$0.0035/result
SILVER$0.0027/result
GOLD$0.0021/result
PLATINUM$0.0014/result
DIAMOND$0.001/result

A one-time run start fee of $0.005 covers initialization. Volume-tier discounts apply automatically based on your Apify subscription plan.

Typical costs at BRONZE:

  • 20 listings (test run): ~$0.075
  • 100 listings (standard research): ~$0.355
  • 500 listings (bulk export): ~$1.755
  • With fetchDetails: true, each run makes one additional HTTP request per listing, adding a small amount of compute cost

The per-result pricing is competitive with similar scrapers on the Apify Store (market range: $0.001–$0.005 per result). Start with 20 results to verify output before scaling up.

How to use it

  1. Go to the Input tab in the Apify Console
  2. Set your search keyword (e.g. python, marketing) or leave blank for all listings
  3. Choose search mode: internships or jobs
  4. Set max results (start with 20 for testing)
  5. Toggle fetch details if you need the full description and apply-by date
  6. Click Start — results appear in the Output tab within seconds

Step-by-step example

Goal: Find all Python internships and export to a spreadsheet

  1. Set searchQuery: "python"
  2. Set searchMode: "internships"
  3. Set maxResults: 100
  4. Click Start
  5. In the Output tab, click ExportCSV
  6. Open in Excel/Google Sheets — each row is one internship with title, company, stipend, skills, and more

Input parameters

ParameterTypeDefaultDescription
searchQuerystring""Keyword to filter listings. Passed directly to Internshala's URL slug. Use hyphens for multi-word terms: data-science, business-development.
searchModeselectinternshipsWhether to scrape internships or jobs.
fetchDetailsbooleanfalseFetch the detail page for each listing to get applyBy, startDate, aboutCompany, and fullDescription. Adds one HTTP request per listing.
maxResultsinteger50Maximum number of results. Pagination is handled automatically.
maxRequestRetriesinteger3Retry attempts for failed requests.

Output example

{
"id": "3145597",
"title": "Business Development (Sales)",
"company": "Basti Ki Pathshala Foundation",
"companyLogoUrl": "https://internshala-uploads.internshala.com/logo/...",
"location": "Work from home",
"isWorkFromHome": true,
"stipend": "₹ 1,500 - 15,000 lump sum",
"duration": "1 Month",
"skills": ["Social Media Marketing", "MS-Office", "Digital Marketing"],
"description": "1. Develop and implement strategic sales plans...",
"postedAt": "Few hours ago",
"isPartTime": true,
"isActivelyHiring": true,
"applyBy": "10 Jun' 26",
"startDate": "Immediately",
"aboutCompany": "Basti Ki Pathshala Foundation is a Government-registered organization...",
"fullDescription": "Selected intern's day-to-day responsibilities include: ...",
"url": "https://internshala.com/internship/detail/work-from-home-business-development-sales-..."
}

Tips for best results

💡 Use hyphens in multi-word keywords — Internshala's URL system uses hyphens: data-science not data science

💡 Leave searchQuery blank for the broadest results — scrapes all active listings, not filtered by category

💡 Use fetchDetails: false first — get 100 listings in seconds, then refine your keyword before enabling detail fetching

💡 Combine with scheduling — run daily to detect new postings; compare with yesterday's export using the id field as a stable key

💡 Filter by WFH — use isWorkFromHome: true in downstream processing (no input filter needed; the field is always extracted)

💡 Internship categories — popular Internshala keyword slugs: computer-science, marketing, finance, design, engineering, data-science, content-writing, accounting

Integrations

Google Sheets pipeline

Run the scraper daily with a schedule → connect the Apify dataset to Google Sheets via the Google Sheets integration in Apify → share a live sheet with your team that auto-updates with new Internshala listings every morning.

Airtable internship database

Use Apify's Airtable integration to push each new result to an Airtable base. Add a formula field to flag listings where isActivelyHiring = true and stipend contains "month" for paid internships, and share the filtered view with candidates.

Slack job alerts

Connect the actor output to a Zapier or Make webhook trigger → filter for listings where postedAt is "Few hours ago" → post to a Slack channel for real-time alerts on new hot internships.

CRM lead enrichment

For recruiters: extract the company field and company URL from url, then cross-reference with your CRM. Use the isActivelyHiring flag and skills array to identify target companies and auto-tag them by tech stack in your CRM.

API usage

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('automation-lab/internshala-scraper').call({
searchQuery: 'python',
searchMode: 'internships',
maxResults: 100,
fetchDetails: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Scraped ${items.length} listings`);
items.forEach(item => console.log(item.title, item.company, item.stipend));

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("automation-lab/internshala-scraper").call(run_input={
"searchQuery": "marketing",
"searchMode": "internships",
"maxResults": 50,
"fetchDetails": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["company"], item["stipend"])

cURL

curl -s -X POST \
"https://api.apify.com/v2/acts/automation-lab~internshala-scraper/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchQuery": "data-science",
"searchMode": "internships",
"maxResults": 50
}'

Use with Claude (MCP)

You can use this scraper directly from Claude Code, Claude Desktop, Cursor, or VS Code via the Apify MCP server.

Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/internshala-scraper"

Then in Claude Code:

"Scrape 50 Python internships from Internshala and list the top ones by stipend"

"Get all marketing internships with fetchDetails enabled and summarize the most common required skills"

Claude Desktop / Cursor / VS Code

Add to your MCP config (e.g. ~/.claude/claude_desktop_config.json):

{
"mcpServers": {
"apify": {
"type": "http",
"url": "https://mcp.apify.com?tools=automation-lab/internshala-scraper",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Example Claude prompts:

  • "Find the 20 best-paying Python internships on Internshala right now"
  • "Scrape 100 marketing jobs from Internshala and show the ones that are work-from-home"
  • "Get Internshala internships for data science and list all unique required skills"

Web scraping publicly available job listings is generally permissible for personal research, academic, and business intelligence purposes under most jurisdictions. Internshala's listings are publicly accessible without login. Always review Internshala's Terms of Service for the latest guidance, and use this tool responsibly and respectfully.

This actor only reads publicly available data and does not submit applications, create accounts, or interact with authenticated endpoints. Respect rate limits and avoid running extremely large scrapes that could impact Internshala's service for real users.

FAQ — Frequently asked questions

Q: Can I filter by location? A: Not directly via input — but you can use the location field in the output to filter results downstream, or use Internshala's URL patterns as a searchQuery value (e.g. internship-in-mumbai maps to their Mumbai filter page).

Q: Why does my run return fewer results than maxResults? A: This happens when there are fewer matching listings than your limit. For example, searching "fortran" may only find a handful of results. The actor stops gracefully when no more pages are available.

Q: The run succeeded but some fields like stipend or postedAt are empty — is that a bug? A: No. Some listings (especially fresher jobs) don't display stipend or posted-date in their listing card. Jobs listings use a salary range format instead of ₹/month. These fields are optional on Internshala's side.

Q: I see "Ignored attempt to charge for an event" in local test logs — is that normal? A: Yes, this message appears during local apify run testing and can be safely ignored. Pay-per-event charges only apply during cloud runs on the Apify platform.

Q: Can I scrape a specific company's listings? A: Not directly — Internshala's public search doesn't expose company-specific URLs in a predictable pattern. Use the actor to scrape broadly and filter by company in the output.