Internshala Scraper API - Internships & Jobs in India avatar

Internshala Scraper API - Internships & Jobs in India

Pricing

from $0.33 / 1,000 postings

Go to Apify Store
Internshala Scraper API - Internships & Jobs in India

Internshala Scraper API - Internships & Jobs in India

Scrape Internshala internships and fresher jobs in India by keyword, category or city. Each row has the role, company, city, skills, stipend or salary typed as monthly, yearly or unpaid, duration, apply-by and posted dates, and openings. $0.34 per 1,000 postings.

Pricing

from $0.33 / 1,000 postings

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

2

Monthly active users

3 days ago

Last modified

Share

Scrape Internshala internships and fresher jobs in India, with stipend, duration and apply-by dates: search by keyword, category, city or filter, and every posting comes back as a row with the role, company, city, skills, stipend or salary, duration, posted and apply-by dates, openings and the full description. No Internshala account, nothing to install.

The awkward part first. Internshala ignores a filter value it does not recognise instead of refusing it. A misspelled category or city quietly gets you the unfiltered board, which you then pay for. Write categories and cities the way Internshala writes them, and check searchUrl on the first few rows before you run anything large.

InputKeywords, categories, cities and filters, or Internshala URLs
OutputOne row per internship or job: role, company, city, skills, typed stipend or salary, duration, dates, openings
Ceiling20,000 postings per run, or Internshala's own last page, whichever comes first
Account neededNone, and nothing to install
Price$0.34 per 1,000 postings on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 14,700

๐Ÿ” What Internshala Scraper does

Internshala runs two boards and you pick which. Internships are short placements with a monthly stipend. Jobs are full-time fresher and early-career roles with an annual salary. Set What to scrape to both and each row is tagged with its type.

Which filters apply depends on the board. Stipend, duration, part-time, the pre-placement-offer filter, the women-only board, the international board, early applicant and fast response are all internships. Annual salary, experience level and fresher-only are jobs. Keywords, categories and cities work on either.

Every keyword is walked separately, so two keywords means two searches sharing one budget.

includeDetails is on by default, and it is where the apply-by date, the number of openings, the exact posted date instead of "2 days ago", the start date, the perks, the eligibility rules, the company's profile and website and the full description come from. Turn it off for a listing-only sweep and you keep the title, company, city, stipend, duration, skills and a description snippet.

Two things to watch if you paste URLs. Changing What to scrape away from its default counts as a filter, so the run walks the board as well as reading your links. And a posting that is both pasted and found by a search comes back twice and is billed twice, because the two routes read its id from different places. Use one route or the other for the same posting.

๐Ÿ“‹ What data you get from each Internshala posting

What you getField
The posting's id, board, title and linkid, type, title, url
The company, its Internshala page, website and logocompanyName, companyUrl, companyWebsite, companyLogo
Where it is, and remote, hybrid or part-timelocations, locationLabel, region, countryCode, isWorkFromHome, isHybrid, isPartTime
The stipend or salary, parsed and typedstipendText, stipendMin, stipendMax, stipendCurrency, stipendPeriod, stipendType, stipendIsEstimate
Duration and experiencedurationText, durationMonths, experienceText, experienceYears
Skillsskills
Posted date, and whether it is exactpostedRelative, postedAt, postedAtIsExact
Apply-by date, openings, start dateapplyByText, applyBy, openings, startDateText, startsImmediately
Hiring flags and a pre-placement offerisActivelyHiring, isEarlyApplicant, hasJobOfferAfterInternship, jobOfferText
Industry, perks, eligibility, the company blurb, the descriptionindustry, employmentType, perks, eligibility, aboutCompany, descriptionText
Where the row came fromsearchQuery, searchUrl, page, position, scrapedAt

โ–ถ๏ธ How to scrape Internshala

  1. Open Internshala Scraper and click Try for free.
  2. Type a skill or role into Keywords, and pick What to scrape.
  3. Add a Category or City if you want, spelled the way Internshala spells it.
  4. Set Maximum postings. Start around 25 to see what the rows look like.
  5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.

๐Ÿ’ฐ How much does it cost to scrape Internshala?

$0.34 per 1,000 postings on the Free plan. Paid plans pay a little less: $0.335 on Starter, $0.33 on Scale and $0.325 on Business. On the free plan, the $5 Apify gives you each month covers about 14,700 postings.

One billed row per posting delivered. The sample row is not billed and diagnostic rows are not billed. A posting whose own page failed is still delivered and still billed, with a detailNote on it saying so.

๐Ÿ“ฅ What you give it

{
"searchQueries": ["python"],
"listing": "internships",
"cities": ["bangalore"],
"workFromHome": true,
"minStipend": 10000,
"maxItems": 200
}
FieldDefaultWhat it is
searchQueriesbox starts at pythonSearches as you would type them into Internshala's box. A skill, a role or a company.
listinginternshipsAlso jobs, or both to walk each in turn.
categoriesnoneInternshala's own categories, spelled its way: computer science, graphic design, human resources. Several are combined with OR.
citieswhole countryIndian cities like bangalore, pune, hyderabad. Several are combined with OR.
startUrlsnoneInternshala listing pages or single postings, pasted from the site.
workFromHome, partTime, withJobOfferoffRemote only, part-time only, and internships that come with a job offer afterwards.
minStipendnoneMonthly stipend floor in rupees. Postings that pay less are left out and not charged. A range counts by its midpoint, the way Internshala's own filter reads it, and weekly or lump-sum pay is turned into a monthly figure first. Unpaid and performance-based postings are left out, and so are stipends in another currency unless Internshala's own filter kept them.
maxDurationMonthsnoneLongest internship to keep, in months.
minSalary, experience, fresherOnlynoneAnnual salary floor in rupees (600000 is 6 lakh), experience cap and fresher-only, all on the jobs board. A salary value under 100 is read as lakhs, so 6 also means 6 lakh. A job whose salary range starts below the floor is left out and not charged.
includeInternshipsInJobsoffInternshala's "also show internships" toggle on the jobs board.
internationalOnly, forWomenoffThe international board, and the women-only board.
earlyApplicant, fastResponseoffFew applications so far, and employers who reply quickly.
startingAfternoneYYYY-MM-DD. Internships starting on or after that day.
includeDetailsonOpen each posting's own page for the full record.
detailConcurrency10Posting pages read at once, 1 to 16.
maxItems50Total postings for the run, up to 20,000.
egressModeautoLeave it alone.
proxyConfigurationleave it aloneOptional. Only if you want the run to go out through a particular network of your own.

๐Ÿ“ค What you get back

A real row from a run on 20 September 2026:

{
"id": "3293620",
"type": "internship",
"title": "Machine Learning",
"url": "https://internshala.com/internship/detail/machine-learning-internship-in-multiple-locations-at-innoknowvex1789836401",
"companyName": "Innoknowvex",
"companyUrl": "https://internshala.com/company/innoknowvex-1739944702",
"companyWebsite": null,
"companyLogo": "/static/images/search/placeholder_logo.svg",
"locations": ["Chennai, Coimbatore, Madurai, Tirunelveli, Thanjavur, Tiruppur, Tiruchirappalli, Salem, Vellore"],
"locationLabel": "Chennai, Coimbatore, Madurai, Tirunelveli, ...",
"region": null,
"countryCode": "IN",
"isWorkFromHome": false,
"isHybrid": false,
"isPartTime": null,
"stipendText": "โ‚น 11,000 - 23,000 /month",
"stipendMin": 11000,
"stipendMax": 23000,
"stipendCurrency": "INR",
"stipendPeriod": "MONTH",
"stipendType": "range",
"stipendIsEstimate": false,
"durationText": "3 Months",
"durationMonths": 3,
"experienceText": null,
"experienceYears": null,
"skills": ["Data Analytics", "Machine Learning", "Natural Language Processing (NLP)", "Python", "R Programming", "..."],
"postedRelative": "Today",
"postedAt": "2026-09-20",
"postedAtIsExact": false,
"applyByText": "19 Oct' 26",
"applyBy": "2026-10-19",
"openings": 100,
"startDateText": "Immediately",
"startsImmediately": true,
"isActivelyHiring": true,
"isEarlyApplicant": true,
"hasJobOfferAfterInternship": true,
"jobOfferText": "Job offer upto โ‚น 4.6LPA post internship",
"industry": null,
"employmentType": null,
"perks": [],
"eligibility": [],
"aboutCompany": null,
"descriptionText": "Selected intern's day-to-day responsibilites include: 1. Assist in collecting and cleaning datasets for ML projects...",
"searchQuery": "python",
"searchUrl": "https://internshala.com/internships_ajax/keywords-python/",
"page": 1,
"position": 1,
"scrapedAt": "2026-09-20T07:04:31.833Z"
}

The locationLabel, skills and descriptionText above are cut short. A real row carries them in full.

FieldHow to read it
stipendMin / stipendMax / stipendPeriod / stipendTypeThe employer's own pay figure, parsed. stipendType says whether it is a range, fixed, unpaid, lump-sum, performance-based, negotiable or not-stated, so an unpaid posting cannot be mistaken for a missing number. Weekly and daily stipends are real and are marked as such.
postedAt / postedAtIsExactThe date, and whether it is Internshala's exact posted date or one worked back from "2 days ago". Check the flag before you filter on the date.
applyBy, openings, startDateTextFrom the posting's own page, so they need includeDetails on.
region, industry, aboutCompanyCome from the posting's structured data, which multi-city postings do not carry. Expect these null on roughly one row in six.
hasJobOfferAfterInternship / jobOfferTextWhether a pre-placement offer is attached, and Internshala's own wording for it.
searchUrlThe exact URL used. Check it if a filter looks like it was ignored.
detailNotePresent when the posting's own page could not be read. The row still arrives, and is still billed, with the listing-level fields only.

๐Ÿงพ Reading the output

RowHow to spot itBilled
A postingIt has an id and no _sample or _diagnostic keyyes
The sample row_sample: true and charged: falseno
A diagnostic_diagnostic: true, charged: false and an errorCodeno

Posting rows carry no charged field. The flag is only on the sample and diagnostic rows, to mark them as not real results.

CodeWhat it means
NO_RESULTSThat search matched nothing.
BAD_URLA link that is not an Internshala listing or posting page.
DETAIL_FAILEDA pasted posting could not be read, usually because it has expired.
HTTP_ERRORInternshala answered with an error status.
NOT_JSONInternshala answered with something this run could not read.
TIME_LIMITThe run got close to its time limit and stopped on its own. The postings delivered before that are complete and charged. Give the run more time, or ask for fewer postings, to get the rest.

When the time limit stopped the run before any posting came back, the run ends as failed, with a TIME_LIMIT row saying so. Otherwise it ends as succeeded with what it delivered.

๐Ÿ’ก What people use it for

  • Hiring research in India: what stipends and salaries employers are actually advertising, by category and city.
  • Building a company list from companyName and companyUrl across a category.
  • Watching one city or skill daily with a small maxItems, and diffing on id, which is stable for postings found by a search.
  • Pay benchmarking, because stipendMin, stipendMax and stipendPeriod are parsed rather than left as text.
  • Finding postings with a pre-placement offer attached, which is its own filter.

๐Ÿšง What it does not do

  • India, plus a small international board. That board had 85 live postings when it was last counted, so do not plan around it.
  • A filter Internshala does not recognise is ignored, not refused. You get the whole board and you pay for it. Check searchUrl on the first rows.
  • No applicant counts. The early-applicant flag is the only signal of competition.
  • postedAt is often approximate. Read postedAtIsExact before filtering on dates.
  • Multi-city postings have no structured data, so region, industry and aboutCompany come back null on roughly one row in six.
  • Pasting a URL and searching for the same posting bills it twice. The two routes read its id differently, so the duplicate check does not catch it.
  • Changing What to scrape turns a URL-only run into a board walk. Leave it on its default if you only want your pasted links.
  • One search runs out at Internshala's own last page. Use several keywords, cities or categories to go wider rather than raising the cap.
  • It is not an official Internshala tool. Dami's Studio is independent and is not affiliated with or endorsed by Internshala, or by any other company named on this page.

๐Ÿงญ Which job scraper do you need?

If you wantUse
Internships and fresher jobs in India, with typed stipendsThis one
Hackathons, competitions, internships and jobs from UnstopUnstop Scraper
Jobs in India by keyword and city, from NaukriNaukri Jobs Scraper
Public LinkedIn jobs by keyword and locationLinkedIn Jobs Scraper
Every open job at companies you name, read from their own hiring systemCareer Site Jobs Scraper
Startup jobs with salary and equityWellfound Jobs Scraper

โ“ Questions people ask

Do I need an Internshala account?

No. Everything here is on public listing and posting pages.

What is the difference between the two boards?

Internships are short placements paid by the month. Jobs are full-time fresher and early-career roles paid by the year. Pick one, or take both and read the type field.

Why did my category filter return everything?

Internshala ignored it. Spell it the way the site does, then check searchUrl on the first row.

Can I get the apply-by date without opening every posting?

No. That, the openings count and the exact posted date all live on the posting's own page, so leave Open each posting for the full record on.

Are unpaid internships included?

Yes, and they are marked. stipendType reads unpaid rather than leaving the number blank.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/internshala-scraper. Either way the run happens on your Apify account at the same price.

These are public job postings. Company and contact details are personal data in some jurisdictions, so have a reason for collecting them. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

๐Ÿ†˜ If something breaks

Open the Issues tab on the actor page. Send the keyword or URL you used and the run ID. The errorCode on the diagnostic row usually names the problem on its own.