Internshala Scraper API - Internships & Jobs in India
Pricing
from $0.34 / 1,000 posting returneds
Internshala Scraper API - Internships & Jobs in India
Scrape Internshala internships and fresher jobs in India. Internships pay a monthly stipend, fresher jobs a yearly salary. Take one board or both. Rows have the role, company, city, skills, apply-by and posted dates. Pay is the employer's own number, marked by type. $0.34 per 1,000.
Pricing
from $0.34 / 1,000 posting returneds
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Internshala Scraper: internships and fresher jobs in India, with stipend, duration and apply-by dates
Search Internshala by keyword, category, city or filter, and every posting comes back as a row: 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.
| Input | Keywords, categories, cities and filters, or Internshala URLs |
| Output | One row per internship or job posting |
| Ceiling | 20,000 postings per run, or Internshala's own last page, whichever comes first |
| Account needed | None, and nothing to install |
| Price | $0.34 per 1,000 postings, flat on every plan |
๐ท๏ธ 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 you give it
{"searchQueries": ["python"],"listing": "internships","cities": ["bangalore"],"workFromHome": true,"minStipend": 10000,"maxItems": 200}
| Field | Default | What it is |
|---|---|---|
searchQueries | box starts at python | Searches as you would type them into Internshala's box. A skill, a role or a company. |
listing | internships | Also jobs, or both to walk each in turn. |
categories | none | Internshala's own categories, spelled its way: computer science, graphic design, human resources. Several are combined with OR. |
cities | whole country | Indian cities like bangalore, pune, hyderabad. Several are combined with OR. |
startUrls | none | Internshala listing pages or single postings, pasted from the site. |
workFromHome, partTime, withJobOffer | off | Remote only, part-time only, and internships that come with a job offer afterwards. |
minStipend | none | Monthly stipend floor in rupees. Internshala's own slider stops at 12,000, so higher values are clamped there. |
maxDurationMonths | none | Longest internship to keep, in months. |
minSalary, experience, fresherOnly | none | Annual salary floor, experience cap and fresher-only, all on the jobs board. |
includeInternshipsInJobs | off | Internshala's "also show internships" toggle on the jobs board. |
internationalOnly, forWomen | off | The international board, and the women-only board. |
earlyApplicant, fastResponse | off | Few applications so far, and employers who reply quickly. |
startingAfter | none | YYYY-MM-DD. Internships starting on or after that day. |
includeDetails | on | Open each posting's own page for the full record. |
detailConcurrency | 10 | Posting pages read at once, 1 to 16. |
maxItems | 50 | Total postings for the run, up to 20,000. |
egressMode | auto | Leave it alone. The other settings exist for debugging. |
proxyConfiguration | leave it alone | Optional. 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.
| Field | What it is |
|---|---|
stipendMin / stipendMax / stipendPeriod / stipendType | The 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 / postedAtIsExact | The 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, startDateText | From the posting's own page, so they need includeDetails on. |
region, industry, aboutCompany | Come from the posting's structured data, which multi-city postings do not carry. Expect these null on roughly one row in six. |
hasJobOfferAfterInternship / jobOfferText | Whether a pre-placement offer is attached, and Internshala's own wording for it. |
searchQuery, searchUrl, page, position | Which search produced the row, and the exact URL used. Check searchUrl if a filter looks like it was ignored. |
detailNote | Present 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
| Row | How to spot it | Billed |
|---|---|---|
| A posting | It has an id and no _sample or _diagnostic key | yes |
| The sample row | _sample: true and charged: false | no |
| A diagnostic | _diagnostic: true, charged: false and an errorCode | no |
Posting rows carry no charged field. The flag is only on the sample and diagnostic rows, to mark
them as not real results.
| Code | What it means |
|---|---|
NO_RESULTS | That search matched nothing. |
BAD_URL | A link that is not an Internshala listing or posting page. |
DETAIL_FAILED | A pasted posting could not be read, usually because it has expired. |
HTTP_ERROR | Internshala answered with an error status. |
NOT_JSON | Internshala answered with something this run could not read. |
โถ๏ธ How to run it
- Open Internshala Scraper and click Try for free.
- Type a skill or role into Keywords, and pick What to scrape.
- Add a Category or City if you want, spelled the way Internshala spells it.
- Set Maximum postings. Start around 25 to see what the rows look like.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it from the Apify API.
๐ฐ How much does it cost?
$0.34 per 1,000 postings. Flat on every Apify plan, with no volume tiers.
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 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
companyNameandcompanyUrlacross a category. - Watching one city or skill daily with a small
maxItems, and diffing onid. - Pay benchmarking, because
stipendMin,stipendMaxandstipendPeriodare 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
searchUrlon the first rows. - No applicant counts. The early-applicant flag is the only signal of competition.
postedAtis often approximate. ReadpostedAtIsExactbefore filtering on dates.- Multi-city postings have no structured data, so
region,industryandaboutCompanycome backnullon 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.
๐งญ Which jobs scraper do you need?
| If you want | Use |
|---|---|
| Internships and fresher jobs in India | This one |
| Experienced roles in India from Naukri | Naukri Jobs Scraper |
| Hackathons, competitions and campus jobs from Unstop | Unstop Scraper |
| Startup jobs from Wellfound | Wellfound Jobs Scraper |
| Jobs in Germany, Austria and Switzerland | XING Jobs Scraper |
โ Questions people ask
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 on.
Are unpaid internships included? Yes, and they are marked. stipendType reads unpaid rather
than leaving the number blank.
Can I schedule it? Yes. id is stable for postings found by a search, so diffing one run
against the next shows what is new.
Is this legal? 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 scraping and the law 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.