Unstop Scraper API - Hackathons, Competitions & Jobs avatar

Unstop Scraper API - Hackathons, Competitions & Jobs

Pricing

from $2.50 / 1,000 opportunity returneds

Go to Apify Store
Unstop Scraper API - Hackathons, Competitions & Jobs

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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

2 days ago

Last modified

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:

BoardLive nowArchive (expired)
Jobs1,170large
Internships861large
Competitions275large
Hackathons1115,893
Cultural events43
Workshops42
Quizzes38
Hiring challenges28
Conferences17
Scholarships6

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, online
deadline 2026-08-26 (17 days left) | top prize INR 150,000 | 596 registered, 25,841 views
teams of 1-4 | open to Undergraduate, Postgraduate, Engineering Students
https://unstop.com/hackathons/crp-precision-care-challenge-2026-ge-healthcare-1731208
Evil Corp CTF V2 | Nexploit | hackathon, online
deadline 2026-08-18 (9 days left) | prizes INR 1,000 / 500 / 200 + certificates
35 registered | teams of 1-4 | skills: Digital Forensics, Ethical Hacking
https://unstop.com/hackathons/evil-corp-ctf-v2-nexploit-1733381
Business Development Executive | job, work from home, full time
salary INR 240,000-300,000 per year (published by the employer) | open to Freshers
https://unstop.com/jobs/...

Every field on every row

Identityid, 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

OrganiserorganiserName, organiserId, organiserUrl, organiserLogo, and with "Fetch the organiser's contact details" on: organiserEmail, organiserPhone, organiserContactName

WhereisOnline, 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

WhenregistrationDeadline, registrationOpensAt, startDate, endDate, daysLeft, deadlineText, postedAt, updatedAt, rounds[]

Prize moneyprizes[] (rank, cash, currency, certificate, pre-placement offer, other rewards), prizeTopCash, prizeTotalCash, prizeCurrency, hasCashPrize, prizeSummary

PaypayMin, payMax, payCurrency, payPeriod (monthly / annually), payType (paid / unpaid), payIsDisclosed, payIsEstimate, workMode, employmentType, minExperienceYears, maxExperienceYears

Who can entereligibilityTags[] (Unstop's own badges: Undergraduate, Postgraduate, Engineering Students, Fresher, Experienced Professionals, School Students …), eligibilitySectors[], eligibilityCourses[], eligibilityExperience[], eligibilityPassoutYears[], eligibilityRaw, eligibleCountries[], minTeamSize, maxTeamSize

InterestregistrationCount, participantCount, viewsCount

Otherskills[], 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 figure456 (53%)472 (79%)
Marked paid by the organiser630 (73%)599 (100%)
Explicitly unpaid231 (27%)1 (<1%)
Platform estimates00

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:

RequestRows returned
oppstatus=open111 hackathons ✅
oppstatus=banana6,047 hackathons ❌
oppstatus=open,closed6,047 hackathons ❌ (commas are not multi-value)
category=finance11 competitions ✅
category=case-study275 competitions ❌
paid_unpaid=maybe630 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 total saturates 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.
  • all is 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. Python returned 93 live jobs; python returned 0.
  • Short links are not supported. unstop.com/o/PGTJBPX carries no numeric id.
  • India-centric. Every in-person opportunity in the sample was in India. eligibleCountries was 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.
  • teamSize and entryFee do 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/XXXX short 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:

BoardRowsWith an emailWith a phone
Competitions / hackathons / quizzes275222 (81%)118 (43%)
Jobs60010 (2%)5 (1%)
Internships86110 (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.