Unstop Scraper API - Hackathons, Competitions & Jobs
Pricing
from $2.50 / 1,000 opportunity returneds
Unstop Scraper API - Hackathons, Competitions & Jobs
Unstop's public API never rejects a filter value it doesn't know: ask for oppstatus=banana and you get all 6,110 hackathons, not the 111 that are open. This one allows only verified values. Hackathons, jobs, internships, scholarships, with organiser emails where given. $2.50/1k.
Pricing
from $2.50 / 1,000 opportunity returneds
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Unstop Scraper API - hackathons, competitions, internships and jobs
Unstop, the platform formerly called Dare2Compete, does not validate the
filters on its public API. Ask the hackathons board for oppstatus=banana and it answers HTTP 200
with all 6,110 hackathons rather than the 111 whose registration is open. Re-checked 2026-08-21. On
a pay-per-result actor that gap is a bill, so this one refuses any filter value outside an
allow-list verified against the live API.
It's one of India's main boards for student and early-career opportunities, and the live counts it was carrying when this was measured are in the table below.
You get one row per opportunity: what it is, who's running it, who can enter, when registration closes, what you can win or earn, how many people have already registered, whether it's online or in a particular city, and the link.
Every field comes from Unstop's own public JSON API, so there's no login and no key to configure.
What you get
Live counts measured on 8 August 2026, registration open:
| Board | Live now | Archive (expired) |
|---|---|---|
| Jobs | 1,170 | large |
| Internships | 861 | large |
| Competitions | 275 | large |
| Hackathons | 111 | 5,893 |
| Cultural events | 43 | |
| Workshops | 42 | |
| Quizzes | 38 | |
| Hiring challenges | 28 | |
| Conferences | 17 | |
| Scholarships | 6 |
Two of those boards are supergroups, which is worth knowing before you pay for the same row twice:
- Competitions (275) also contains all 111 hackathons and all 38 quizzes.
- all (377) is Competitions plus workshops, conferences and cultural events. It does not contain jobs, internships or scholarships.
- Hiring challenges (28) is a tag rather than a board. Those rows are drawn from competitions, quizzes and hackathons.
Unstop labels both internships and jobs with the same raw type of jobs and only separates them
in subtype. Every row here also carries a plain kind field that sorts that out for you.
Three real rows from a run on 8 August 2026:
Precision Care Challenge 2026 | GE HealthCare | hackathon, onlinedeadline 2026-08-26 (17 days left) | top prize INR 150,000 | 596 registered, 25,841 viewsteams of 1-4 | open to Undergraduate, Postgraduate, Engineering Studentshttps://unstop.com/hackathons/crp-precision-care-challenge-2026-ge-healthcare-1731208Evil Corp CTF V2 | Nexploit | hackathon, onlinedeadline 2026-08-18 (9 days left) | prizes INR 1,000 / 500 / 200 + certificates35 registered | teams of 1-4 | skills: Digital Forensics, Ethical Hackinghttps://unstop.com/hackathons/evil-corp-ctf-v2-nexploit-1733381Business Development Executive | job, work from home, full timesalary INR 240,000-300,000 per year (published by the employer) | open to Freshershttps://unstop.com/jobs/...
Every field on every row
Identity — id, shortId, title, url, shortUrl, kind (hackathon / competition /
quiz / internship / job / scholarship / workshop / conference / cultural-event), plus Unstop's own
raw type and subtype, status, registrationOpen
Organiser — organiserName, organiserId, organiserUrl, organiserLogo, and with
"Fetch the organiser's contact details" on: organiserEmail, organiserPhone,
organiserContactName
Where — isOnline, locationMode (online / offline), rawRegion (Unstop's own unreliable
value — see below), locations[] (a job can list several work cities and all of them are kept),
city, state, country, countryCode, venue
When — registrationDeadline, registrationOpensAt, startDate, endDate, daysLeft,
deadlineText, postedAt, updatedAt, rounds[]
Prize money — prizes[] (rank, cash, currency, certificate, pre-placement offer, other
rewards), prizeTopCash, prizeTotalCash, prizeCurrency, hasCashPrize, prizeSummary
Pay — payMin, payMax, payCurrency, payPeriod (monthly / annually), payType
(paid / unpaid), payIsDisclosed, payIsEstimate, workMode, employmentType,
minExperienceYears, maxExperienceYears
Who can enter — eligibilityTags[] (Unstop's own badges: Undergraduate, Postgraduate,
Engineering Students, Fresher, Experienced Professionals, School Students …),
eligibilitySectors[], eligibilityCourses[], eligibilityExperience[],
eligibilityPassoutYears[], eligibilityRaw, eligibleCountries[], minTeamSize, maxTeamSize
Interest — registrationCount, participantCount, viewsCount
Other — skills[], workFunctions[], categoryTags[], hasEntryFee, festivalName,
trustedTag, logoUrl, descriptionText, optional descriptionHtml
About the pay figures, before you build on them
Unstop has no salary-estimation feature. A stipend or salary is either typed in by the organiser
or it is not there at all. payIsEstimate is false on every single row, and it always will
be, because there is nothing on the platform that guesses.
What is there, measured over 300 live rows per board on 8 August 2026:
Over all 861 live internships and 600 live jobs pulled in one run each:
| Internships (861) | Jobs (600) | |
|---|---|---|
| Row carries a published figure | 456 (53%) | 472 (79%) |
| Marked paid by the organiser | 630 (73%) | 599 (100%) |
| Explicitly unpaid | 231 (27%) | 1 (<1%) |
| Platform estimates | 0 | 0 |
payIsDisclosed tells you which bucket a row is in, so you never have to guess whether a null
means "free" or "they did not say".
Prize money on the competition boards is patchier, and the row says so. Over all 275 live rows on the competitions board: 190 (69%) list prizes and 142 (52%) list a cash amount. The rest offer certificates, goodies or pre-placement offers, which are captured too.
The filter trap, and what this actor does about it
Unstop's API does not validate filter values. Send it something it does not recognise and it answers HTTP 200 with the entire unfiltered archive. Measured:
| Request | Rows returned |
|---|---|
oppstatus=open | 111 hackathons ✅ |
oppstatus=banana | 6,047 hackathons ❌ |
oppstatus=open,closed | 6,047 hackathons ❌ (commas are not multi-value) |
category=finance | 11 competitions ✅ |
category=case-study | 275 competitions ❌ |
paid_unpaid=maybe | 630 internships ❌ (identical to paid_unpaid=paid) |
On a pay-per-result actor that is a bill for thousands of rows nobody asked for.
So: 150+ plausible domain slugs were tested against the live API. Exactly 17 filter anything. Those 17 are the whole dropdown. Anything outside the verified vocabulary is refused before a request goes out, and you get an uncharged diagnostic row telling you which value was dropped and why.
One filter is missing from Unstop entirely: there is no working server-side city filter.
location=Pune is accepted and silently ignored, in every spelling and on every board. This actor
therefore filters cities client-side after the rows arrive. Rows dropped that way are never
charged for.
Two Unstop quirks this actor corrects for you
Unstop marks every job and internship as "online", even when it has an office and a city.
Measured: 400 out of 400 in-office jobs carried region: "online". So isOnline here is derived
from the actual work mode for those boards, and Unstop's raw value is kept beside it as
rawRegion if you want to see it.
The city lives in two different places depending on the board. Jobs and internships put one
entry per work city in locations[] and leave the venue block blank; competitions and events do
the opposite. Read only one and you lose the city on half the catalogue. Both are read here, and
locations[] keeps every city on a multi-city job. Measured on 400 live in-office jobs: a city on
398 of them.
Limits, honestly
- 10,000 results per search. Unstop's
totalsaturates at 10,000, and asking for a page past the 10,000th row returns HTTP 500. Split a big pull by domain, status or keyword. allis not everything. Unstop's own "all" feed is a mixed stream of competitions, hackathons, quizzes, workshops, conferences and cultural events, 377 live. It does not include jobs, internships or scholarships. Select those explicitly.- Skill names are case sensitive.
Pythonreturned 93 live jobs;pythonreturned 0. - Short links are not supported.
unstop.com/o/PGTJBPXcarries no numeric id. - India-centric. Every in-person opportunity in the sample was in India.
eligibleCountrieswas empty on all 40 detail pages checked, so international eligibility is generally not declared. - Organiser contacts are board-dependent — 81% of competition rows carry an email, but only 1-2% of job and internship rows do. See the FAQ for the full table.
teamSizeandentryFeedo nothing on jobs and internships — they belong to the competition boards, and Unstop returns zero rows rather than ignoring them.
What this does not do
- It does not log in, so anything behind an Unstop account — your applications, saved items, private college-only listings — is out of reach.
- It does not register you for anything, submit anything, or apply on your behalf.
- It does not scrape mentor profiles, blog posts, courses or the practice-question bank. Those live on different endpoints.
- It does not download attachments, banners or certificates.
- It does not resolve
unstop.com/o/XXXXshort links. - It cannot reach past the 10,000th result of a single search. That's a server limit, not a choice.
Speed and cost
Unstop's API is fast and open. Measured on 8 August 2026 from an Apify container:
- 24-72 ms per listing request from the plain container address; 600-2,000 ms through a proxy.
- Identical results (same
total, same ids, same order) from three different network addresses. - 40 consecutive requests from one address: 40 out of 40 succeeded, no throttling, no captcha.
- 40 detail pages at concurrency 8: 4.0 seconds.
So the default route is the plain container address, with a proxy held in reserve for retries. No residential proxy is ever used.
Billing
$2.50 per 1,000 opportunities, plus a $0.002 start fee per run. One charge per opportunity row you receive. Sample rows, diagnostics, failed requests and rows dropped by the city filter are all free, and a run that finds nothing costs the start fee alone.
maxItems is a hard cap across every board and keyword in the run, so it doubles as your spending
limit.
FAQ
What is Unstop? Unstop, formerly Dare2Compete, is an Indian platform where companies and colleges post hackathons, case competitions, quizzes, cultural fests, scholarships, internships and jobs aimed at students and early-career professionals. On the hackathon board alone it was carrying 111 live listings and 5,893 expired ones on 8 August 2026.
Does this scraper need an Unstop account or API key? No. Everything comes from Unstop's public JSON API, which needs no key, no cookie and no login.
Can I get the organiser's email address? On the competition boards, usually. It depends heavily on the board, so here are the real numbers from full runs on 8 August 2026, with "Fetch the organiser's contact details" on:
| Board | Rows | With an email | With a phone |
|---|---|---|---|
| Competitions / hackathons / quizzes | 275 | 222 (81%) | 118 (43%) |
| Jobs | 600 | 10 (2%) | 5 (1%) |
| Internships | 861 | 10 (1%) | 4 (<1%) |
Employers posting jobs almost never publish a contact; event organisers almost always do. If you are after contacts, run the competition boards.
Can I scrape expired hackathons and competitions? Yes. Set "Registration status" to Expired. The archive is much larger than the live board: 5,893 expired hackathons against 111 live ones.
How do I get only in-person events in a specific city? Set "Online or in person" to In person only and put the city names in "City". Unstop has no working server-side city filter, so the city match happens after the rows arrive; rows that do not match are dropped and are not charged for.
How many results can I get in one run? Up to 10,000 per individual search. Run several boards, statuses or keywords in one go and each gets its own 10,000-row window.
Does it return prize money?
Yes, when the organiser published it: each prize rank with its cash amount and currency, plus
prizeTopCash and prizeTotalCash. About half of live competitions and hackathons list a cash
figure; the rest offer certificates, goodies or pre-placement offers, which are also captured.
Are the salary figures estimates?
No. Unstop has no estimation feature. Every figure was typed in by the organiser, and
payIsEstimate is false on every row. payIsDisclosed tells you whether a figure exists at all.
Is it charged when a run finds nothing? No. Sample rows, diagnostics, failed requests and rows dropped by the city filter are all uncharged. You pay only for genuine opportunity rows.
Can I paste a single Unstop link? Yes. Put the full URL, or just the numeric id at the end of it, into "Opportunity URLs".
How much does it cost? $2.50 per 1,000 opportunities, plus a $0.002 start fee per run. Nothing is charged for sample rows, diagnostics, failed requests or rows dropped by the city filter.
How do I keep costs down? Set "Maximum results". It's a hard cap across every board and keyword in the run.