Internshala Jobs Scraper & Internships Monitor avatar

Internshala Jobs Scraper & Internships Monitor

Pricing

from $0.35 / 1,000 validated listing returneds

Go to Apify Store
Internshala Jobs Scraper & Internships Monitor

Internshala Jobs Scraper & Internships Monitor

Scrape Internshala jobs and internships with salary, stipend, skills, public applicants and employer hiring history. Monitor new and changed listings with field-level changes, pay and applicant deltas, monthly pay comparisons and deadline status. Pay per event plus platform usage.

Pricing

from $0.35 / 1,000 validated listing returneds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

What does this Internshala scraper do?

Extract public Internshala jobs and internships into structured records, or monitor a saved search for new and changed postings. Start with a role keyword, a public search URL, or an individual posting URL. Return company names, locations, original salary or stipend amounts, skills, and application links. Enable full details for descriptions, eligibility, perks, openings, and application deadlines when published.

This Actor serves campus career teams, recruiting researchers, and job-board operators building an early-career opportunity feed. Use snapshot mode for a current shortlist and monitor mode for incremental refreshes. For applications and account-specific information, continue on the posting's Internshala page.

Output: one record per returned posting

FieldsMeaning
id, url, listingTypeStable published ID, original posting link, job or internship
title, companyName, locationsRole, employer and published locations
compensationText, compensationMin, compensationMaxOriginal text and numeric lower/upper bounds
compensationCurrency, compensationPeriodOriginal currency and year/month/week/day/lump-sum unit
duration, isWorkFromHome, isHybrid, isPartTimePublished work arrangements and duration
skills, withJobOffer, activelyHiringRequired skills and published hiring signals
description, descriptionIsFullCard excerpt, or full description with details enabled
perks, eligibility, openings, applyByDateDetail-page fields when published
changeTypesnapshot, new, or updated
firstSeenAt, scrapedAt, sourceUrlMonitor observation and capture provenance

Missing published values remain null or empty arrays. Unpaid compensation is zero. Amounts retain their original period; annual job compensation and monthly stipends are not converted into comparable rates automatically. postedText retains relative page wording instead of inventing an exact posting date.

Pricing

Pay per event applies to each validated listing returned to the Dataset, plus the Actor start event. In monitor mode, unchanged listings carry no listing event fee. A quiet initial baseline also has no listing event fee. Apify platform usage is paid by the caller in addition to the event fees. See this Actor's Pricing tab for current event prices.

Use maxResults and Apify's maxTotalChargeUsd run option to bound event spending. maxPages limits scanning work, including pages that produce no matching or new listings.

Quick start

Find public Python jobs and internships:

{
"mode": "scrape",
"listingType": "both",
"searchQuery": "python",
"maxResults": 20,
"maxPages": 2,
"includeDetails": false
}

For city filtering, set location to a case-insensitive substring of a published location, such as Bangalore. workFromHome and minCompensation are also local filters over the scanned pages. Supply a filtered Internshala search URL through startUrls for narrower upstream coverage. Explicit URLs replace the generated keyword search.

Read a posting's full public detail page:

{
"startUrls": [
{"url": "https://internshala.com/job/detail/fresher-sales-associate-job-in-multiple-locations-at-embtel-solutions1791884318"}
],
"includeDetails": true,
"maxResults": 1
}

A captured listing record illustrates the output shape:

{
"id": "3316161",
"listingType": "job",
"title": "Sales Associate",
"companyName": "Embtel Solutions",
"locations": ["Ambala", "Chandigarh", "Kharar", "Mohali", "Zirakpur", "Panchkula", "Punjab", "Himachal Pradesh", "Haryana"],
"compensationText": "₹ 2,15,000 - 3,25,000 /year",
"compensationMin": 215000,
"compensationMax": 325000,
"compensationCurrency": "INR",
"compensationPeriod": "year",
"skills": ["Lead Generation", "English Proficiency (Spoken)", "Market research", "Sales"],
"descriptionIsFull": false,
"changeType": "snapshot",
"url": "https://internshala.com/job/detail/fresher-sales-associate-job-in-multiple-locations-at-embtel-solutions1791884318"
}

The example shows a captured posting, not a guarantee that this specific opportunity remains open. Inspect descriptionIsFull when selecting description fields.

Workflow: monitor internships with a persistent baseline

A campus career team can establish a quiet baseline for Python internships, rerun it with the same watch settings, and add only new or changed opportunities to its shortlist. Compare compensationPeriod before ranking the resulting stipends, then send candidates to the original application links.

{
"mode": "monitor",
"listingType": "internships",
"searchQuery": "python",
"watchId": "campus-python-internships",
"emitInitial": false,
"maxResults": 30,
"maxPages": 2
}

The first run saves fingerprints without returning listing rows. Later runs return only new and materially changed records. Leave emitInitial enabled to return an initial feed immediately.

Keep watchId, filters, and detail mode stable between runs. By default the Actor creates an actor-owned state store scoped to your Apify account. OUTPUT.stateStoreId and OUTPUT.monitorKey identify the baseline. You can explicitly select another key-value store using stateStoreId; its input grants only read/write access to that resource. Different filter sets use separate baselines, and different watch IDs remain separate within a shared store.

The baseline retains fingerprints, bounded tracked posting values and timestamps for up to 10,000 postings, pruned after 30 days without an observation. A posting seen after that retention boundary may be emitted as new. A bounded scan cannot prove a posting closed, so the monitor emits new and updated events only.

Run one occurrence of each watch at a time. The Actor includes a best-effort overlap guard, but Apify key-value storage does not provide an atomic distributed lock. If a write or charge is interrupted ambiguously, the monitor stops and asks for reconciliation rather than replaying it. Inspect the previous Dataset, STATE, RUN_SUMMARY, and charge events before clearing unresolved state.

For recurring operation, create an Apify schedule with the same input and ensure occurrences do not overlap. This Actor runs a single bounded scan per invocation; it does not create schedules or send notifications itself. Connect Dataset output to your own approved integration for delivery.

API and CLI

Create a bounded asynchronous run. Keep your Apify token in an environment variable and send it through the authorization header:

curl --request POST \
'https://api.apify.com/v2/acts/khadinakbar~internshala-jobs-internships-monitor/runs?maxTotalChargeUsd=0.10' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data '{"listingType":"internships","searchQuery":"python","maxResults":10}'

Read the returned run's defaultDatasetId after it finishes, then retrieve /v2/datasets/DATASET_ID/items. Read OUTPUT and RUN_SUMMARY from its defaultKeyValueStoreId for coverage and outcome information.

apify call khadinakbar/internshala-jobs-internships-monitor \
--input '{"listingType":"jobs","searchQuery":"python","maxResults":10}'

AI agent prompt

Use khadinakbar/internshala-jobs-internships-monitor with listingType internships, searchQuery python, maxResults 10, and includeDetails false. After completion, retrieve the run's Dataset and OUTPUT. Return title, companyName, locations, compensationText, compensationPeriod, and url. Explain any partial coverage reported in OUTPUT.

For a tool-enabled workflow, use Apify MCP to inspect the Actor and input schema, then make a bounded call and retrieve the Dataset by its returned ID. Client-specific discovery and selection depend on your client configuration.

Best results and recovery

  • Start with a small result cap and a focused keyword or filtered search URL.
  • Enable full detail requests when your workflow needs complete descriptions and deadlines.
  • Increase maxPages when local filters or unchanged records reduce your output.
  • Keep original salary/stipend periods when preparing compensation comparisons.
  • Use one monitor occurrence at a time and retain a stable watch ID.

Every terminal run writes OUTPUT and RUN_SUMMARY. COMPLETE means the requested work completed; PARTIAL reports preserved data with a cap, limited coverage, or failed pages; VALID_EMPTY covers genuine zero matches and unchanged monitors. INVALID_INPUT includes an actionable input correction. UPSTREAM_FAILED and CONFIG_ERROR end as failed runs when no useful data exists. Check these records before retrying a failed request or reconciling monitor state.

Builder's note

In my testing, the public pages exposed both annual job compensation and monthly or lump-sum internship stipends. Keeping the original text alongside numeric bounds avoids silently comparing unlike pay periods. I designed monitor fingerprints to omit relative posting age, so a posting becoming “two days ago” does not by itself create another billable change.

For jobs on employer-hosted boards, continue with Ashby Jobs Scraper. It reads public Ashby boards for broader hiring research alongside the Internshala feed.

Public data and responsible use

This is an independent tool and is not affiliated with Internshala. It reads public job and internship pages without account login, collects no applicant records, and submits no applications. Users are responsible for reviewing Internshala's terms and applicable data-use requirements for their purpose. Keep copies only as long as needed and verify opportunities on the original posting pages before acting on them.

Hiring insights and precise change tracking

Enable full details for public applicant counts, applicants per opening, employer hiring history and the employer's published website. Annual salaries are divided by twelve for monthly pay comparison; monthly stipends remain unchanged and other periods remain unconverted. Published deadlines include days remaining and an open/closing-soon/closed status at capture. These are derived fields with explicit rules, not inferred pay or hiring forecasts.

Monitor results include changedFields and previousValues for tracked fields, applicantCountDelta and monthlyCompensationMinDelta. Relative posting age and derived deadline age are excluded from change fingerprints, so another day passing does not itself create a billable change. Additional filters cover part time, internship job offers, early applicant status, company names, required skills, excluded keywords and minimum monthly-equivalent compensation. These filters apply to scanned records.