Unstop jobs, internships & hackathons JSON API
Unstop Scraper is a pay-per-record Apify Actor by Daemon Data that returns Unstop jobs, internships, hackathons and competitions with salary or stipend, prizes, deadlines and eligibility as JSON, CSV or Excel. It costs $0.0015 per opportunity with the default options ($1.50 per 1,000); no login to the source site, no proxy, no browser, and the same input runs from the Apify console, one REST call, Python, Node.js, n8n or an AI assistant through MCP.
Daemon Data Unstop Scraper on Apify Listing as plain text
Checked on 26 Oct 2026
137 jobs were posted in the last 3 days, 47 of them in Bangalore or remote. 60 open jobs and 309 internships are work from home, and 146 internships are unpaid. 89 hackathons are offline (in person). Results come newest first.
Who uses it, for what
| You are | What you get |
|---|---|
| Campus recruiters, placement cells and staffing agencies | Every fresher and graduate-trainee drive on Unstop (Reliance, Polycab, IndiGo and hundreds of startups), with deadlines, eligibility (course, passing-out year) and salary, refreshed daily. |
| Job and internship aggregators | Unstop as a source with stable ids, full description text, salary or stipend, workplace type and de-duplication across types, keywords and runs. Same conventions as the IIMJobs, Hirist, Foundit and Instahyre Actors by the same publisher. |
| Student communities, college clubs and newsletters | A weekly digest of hackathons and competitions: online or offline, team size, entry fee and prize pool. |
| EdTech and career-platform builders | A clean, structured feed of opportunities for freshers and students to show in your app or match against profiles. |
| Employer-branding and market analysts | Which companies hire freshers, at what salaries, in which cities; how many students register for each drive. |
| AI agents (MCP) | Ask Claude or ChatGPT "remote paid data internships on Unstop posted this week" and let it call this Actor through Apify's MCP server. |
Output fields
The most useful top-level fields with values from a real record; the full list is id, type, subtype, title, url, organization, organizationUrl, organizationLogo, program, mode, locations, locationText, workplaceType, timing, paid, salaryMin, salaryMax, salaryCurrency, salaryPeriod, experienceMinYears, experienceMaxYears, eligibility, skills, jobFunctions, registrationOpen, registrationStart, registrationDeadline, daysLeft, startsAt, endsAt, teamSizeMin, teamSizeMax, entryFee, isPaidEntry, prizes, totalPrizeCashInr, registrations, views, postedAt, updatedAt, description, descriptionHtml, searchTerm, scrapedAt. Per-field notes and the OpenAPI definition are on the Apify API page.
| Field | Type | Example |
|---|---|---|
id | number | 1777503 |
type | string | "job" |
subtype | string | "jobs" |
title | string | "PEB Marketing & Business Development Executive" |
url | string | "https://unstop.com/jobs/peb-marketing-business-development-executi... |
organization | string | "Omniventra Manpower Solutions" |
organizationUrl | string | "https://unstop.com/c/omniventra-manpower-solutions-2112886" |
mode | string | "online" |
locations | array | [{"city": "Jamshedpur", "state": "Jharkhand", "country": "India"}, ... |
locationText | string | "Jamshedpur, Jharkhand, India | Kolkata, West Bengal, India" |
workplaceType | string | "in_office" |
timing | string | "full_time" |
paid | boolean | true |
salaryMin | number | 35000 |
salaryMax | number | 40000 |
Input and how to call it
A verified example input (it returned data on 2026-10-26):
{
"opportunityTypes": [
"internships"
],
"workplaceTypes": [
"wfh"
],
"pay": "paid",
"maxResultsPerSearch": 50
}
One HTTP call starts a run, waits for it and returns the records (token from console.apify.com):
curl -X POST "https://api.apify.com/v2/acts/data_daemon~unstop-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"opportunityTypes": ["internships"], "workplaceTypes": ["wfh"], "pay": "paid", "maxResultsPerSearch": 50}'
Python: ApifyClient(token).actor("data_daemon/unstop-scraper").call(run_input=...), full file python/unstop-scraper.py. Node.js: node/unstop-scraper.mjs. n8n: importable workflow.
AI assistant (MCP): add the remote server https://mcp.apify.com/?tools=data_daemon/unstop-scraper with header Authorization: Bearer YOUR_APIFY_TOKEN in Claude, ChatGPT, Cursor or VS Code and ask for the data in plain words.
All input fields
| Field | Type | Meaning |
|---|---|---|
opportunityTypes | array | Unstop listing types. Each type is one search; a listing is saved and charged once. On 26 Oct 2026 Unstop had about 710 open jobs, 570 internships, 670 competitions, 210 hackathons, 110 workshops, 75 quizzes and 5 scholarships. |
searchTerms | array | Optional. Unstop matches them against listing titles and organisation names, e.g. data analyst, marketing, software engineer, Reliance. Each keyword runs once per type. Leave empty to get every open listing of the chosen types. |
workplaceTypes | array | Only jobs and internships with these workplace types. Empty = any. |
timing | string | Only full-time or only part-time jobs and internships. |
pay | string | Mostly useful for internships: paid (with a stipend) or unpaid. |
eligibility | string | Only listings open to this group, as set by the organiser. |
mode | string | Only online or only in-person events. |
entryFee | string | Only free or only paid-entry events. |
postedWithinDays | integer | Only listings published on Unstop in the last N days (e.g. 1 for a daily feed, 7 for weekly). 0 or empty = any date. |
locations | array | Only listings whose city, state or country contains one of these words, e.g. Bangalore, Mumbai, Maharashtra. remote matches work-from-home jobs. Listings without a location (many online events) are left out when this is set. |
includeDescription | boolean | Full description as plain text (description) and HTML (descriptionHtml). It costs the same either way; turn it off for smaller files. |
maxResultsPerSearch | integer | Cap for each type (and keyword). Newest listings come first. 0 = no cap: every open listing, about 2,350 across all types. |
maxResults | integer | Stop after this many saved listings. 0 or empty = no total cap (the run's maximum cost still applies). |
onlyNewSinceLastRun | boolean | For schedules: remember delivered listing ids (in a named key-value store in your account) and save only listings that earlier runs with the same settings did not deliver. Skipped listings are not charged. |
stateName | string | Name of the only-new memory. Empty = derived from the types, keywords and filters. Give two schedules the same name to share one memory. |
skipIds | array | Unstop listing ids you already have (the id field). They are neither saved nor charged. |
Price
$0.0015 per opportunity ($1.50 per 1,000); $0.001 per run. List prices for Apify Free and Starter plans; Scale and Business plans pay 15% to 30% less.
| Event | Price | Per 1,000 | Charged when |
|---|---|---|---|
| Opportunity | $0.0015 | $1.50 | One Unstop listing saved to the dataset (job, internship, hackathon, competition, quiz, workshop or scholarship): id, URL, title, organiser, locations, workplace type, salary or stipend, eligibility, skills, registration dates and deadline, team size, entry fee, prizes, registration and view counts, and the full description (text + HTML). Skipped or filtered listings are never charged. |
| Actor Start | $0.001 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
Worked example: the input above, capped at 50 opportunitys, costs at most $0.076. Apify's free plan includes $5 of usage a month, about 3,333 opportunitys; the Actor's own compute is included in the per-record price, and records skipped by filters, de-duplication or only-new mode are not charged.
Questions buyers ask
Is there an official Unstop API?
Unstop does not offer a documented public API. This Actor reads the public JSON endpoints (/api/public/opportunity/...) that the unstop.com website loads, which robots.txt allows. It exposes them as a REST API with schedules, webhooks and only-new runs.
Does it return closed listings?
No. It returns listings that are open for registration, which is what Unstop shows by default.
Does it include participants or applicant details?
No. It returns listing data only: the organiser, the role or event, deadlines and counts. No personal data about candidates or participants is collected.
Why does a salary show as empty?
The organiser chose not to disclose it. About 80% of jobs and internships show a salary or stipend.
Do I need a proxy or login?
No.
Alternatives, honestly
| Option | What it gives you | Where it falls short for this job |
|---|---|---|
| Unstop website and app | Browse and register as a student or professional | No export; one listing at a time |
| Other Unstop Actors on Apify Store | Same source | Compare listing types covered (jobs, internships, hackathons, competitions), prize and eligibility fields and price per 1,000 |
| Build your own client | Full control | You map filters, paging and the listing types yourself |