Unstop Scraper API - Hackathons, Competitions & Jobs avatar

Unstop Scraper API - Hackathons, Competitions & Jobs

Pricing

from $2.44 / 1,000 opportunities

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

Unstop Scraper API - Hackathons, Competitions & Jobs

Scrape Unstop hackathons, competitions, internships, jobs and scholarships. Unstop answers a filter value it does not know with everything, so only values checked against it are sent. Each row has the organiser, deadline, prizes or pay, eligibility and registrations. $2.50 per 1,000 opportunities.

Pricing

from $2.44 / 1,000 opportunities

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

41

Total users

15

Monthly active users

7 days ago

Last modified

Share

Scrape Unstop hackathons, competitions, internships and jobs, with deadlines, prizes and organisers: pick a board, add keywords or filters if you want them, and the matching opportunities come back as a row: who is running it, who can enter, when registration closes, what you can win or earn, how many people registered, and where it happens. You can also paste single Unstop links or ids.

The thing worth knowing first: Unstop does not check filter values. Send a status or a domain it does not recognise and it answers with the whole archive, so a typo becomes thousands of rows you did not ask for. This actor only sends values tested against Unstop, and anything else is refused before a request goes out, with an uncharged row saying what was dropped.

InputBoards, keywords, filters, or pasted Unstop links
OutputOne row per opportunity: organiser, eligibility, deadline, prizes or pay, registrations, place
Ceiling10,000 results per search, and your own maxItems on top
Account neededNone, no login and no API key
Price$2.50 per 1,000 opportunities on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 2,000

🔍 What Unstop Scraper does

Unstop, formerly Dare2Compete, is one of India's main boards for student and early-career opportunities. This walks it board by board and keyword by keyword, one flat row per opportunity.

Two boards are supergroups, which matters before you pay for the same row twice. Competitions already contains every hackathon and quiz. All is Competitions plus workshops, conferences and cultural events, and holds no jobs, internships or scholarships. Rows repeated across boards in one run are deduplicated by id, and every row carries a plain kind.

Live counts measured on 8 August 2026: jobs 1,170, internships 861, competitions 275, hackathons 111, scholarships 6. The expired archive is far bigger, 5,893 hackathons against 111 live.

With detail fetching left on, each row also gets the organiser's contact email and phone where they published one, the round schedule and the participant count.

📋 What data you get from each Unstop opportunity

What you getField
Identityid, shortId, title, url, shortUrl, kind, Unstop's raw type and subtype, status, registrationOpen
Organiser, with contacts when detail fetching is onorganiserName, organiserId, organiserUrl, organiserLogo, organiserEmail, organiserPhone, organiserContactName
WhereisOnline, locationMode, rawRegion, locations, city, state, country, countryCode, venue
WhenregistrationDeadline, registrationOpensAt, startDate, endDate, daysLeft, deadlineText, postedAt, updatedAt, rounds
Prizesprizes with rank, cash, currency, certificate and pre-placement offer, plus prizeTopCash, prizeTotalCash, prizeCurrency, hasCashPrize, prizeSummary
PaypayMin, payMax, payCurrency, payPeriod, payType, payIsDisclosed, payIsEstimate, workMode, employmentType, minExperienceYears, maxExperienceYears
Who can entereligibilityTags, eligibilitySectors, eligibilityCourses, eligibilityExperience, eligibilityPassoutYears, eligibilityRaw, eligibleCountries, minTeamSize, maxTeamSize
InterestregistrationCount, participantCount, viewsCount
The restskills, workFunctions, categoryTags, hasEntryFee, festivalName, trustedTag, logoUrl, descriptionText, optional descriptionHtml, scrapedAt

▶️ How to scrape Unstop

  1. Open Unstop Scraper and click Try for free.
  2. Pick one or more boards under What to scrape.
  3. Add keywords, a domain or a city to narrow it, or leave them empty for the whole board.
  4. Set Maximum results, then click Start.
  5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

Start the actor with nothing filled in and you get one sample row, to see the shape before spending. Its organiserEmail is the placeholder team@example.org, not a real address.

💰 How much does it cost to scrape Unstop?

$2.50 per 1,000 opportunities on the Free plan. Paid plans pay a little less: $2.48 on Starter, $2.46 on Scale and $2.44 on Business. On the free plan, the $5 Apify gives you each month covers about 2,000 opportunities.

You pay per opportunity row you receive. The sample row, diagnostic rows, rows dropped by the city filter and duplicates removed inside a run are not billed. Maximum results is a hard cap across every board and keyword in the run, so it doubles as your spending limit.

📥 What you give it

{
"listing": ["hackathons"],
"status": "open",
"region": "offline",
"cities": ["Pune", "Bangalore"],
"maxItems": 50,
"includeDetails": true
}
FieldDefaultWhat it is
listingnone, the form starts on HackathonsWhich boards to walk: hackathons, competitions, internships, jobs, quizzes, scholarships, workshops, conferences, cultural, hiring-challenges, all. Several are walked in turn.
searchQueriesnoneFree text, as you would type it into Unstop's search box. Each keyword is run against every board you picked.
startUrlsnoneFull Unstop opportunity URLs, or just the numeric id. Fetched directly with full detail. Short unstop.com/o/XXXX links carry no id and are not supported.
statusopenopen for registration open now, expired for past the deadline, closed for closed early.
categoryanyUnstop's domain taxonomy. The 17 values in the dropdown are the complete set that actually filters.
regioneitheronline or offline.
citiesnoneIndian city names, matched against each row's city and state. Rows dropped here are never charged.
workMode, employmentType, paidOnly, workingDaysanyJobs and internships only. Work from home, full time, paid or unpaid, days per week.
eligibleForanyoneUnstop's own buckets: college students, freshers, working professionals, school students.
postedWithinDaysany time1, 7, 30, 90, 180 or 365 days.
teamSize, entryFeeanyCompetition-style boards only. On jobs they return nothing rather than being ignored.
skillnoneOne skill tag, spelled the way Unstop spells it. This one is case sensitive: Python returned 93 live jobs on 8 August 2026, python returned 0.
sortBy, sortDirectionUnstop's own order, high to lowNewest, prize money, days left, or stipend and salary. Rows with no figure sink to the bottom.
maxItems50Stop after this many opportunities across every board and keyword. This is your spending cap.
includeDetailstrueRead each opportunity's own page for the organiser contact, round schedule and participant count. One extra request per row, about 100 ms, and nothing extra in money.
includeDescriptionHtmlfalseKeep the organiser's original markup beside the plain text. Roughly triples the size of the dataset.
detailConcurrency8How many detail pages to read at once.
egressModeautoLeave it on automatic.
proxyConfigurationnoneOptional. Your own servers, used for every request instead of the routes above.

📤 What you get back

A real row from a September 2026 run, trimmed, with the long description cut short. The full row carries around 70 fields.

{
"id": "1737808",
"title": "HackCelestial 3.0",
"url": "https://unstop.com/hackathons/hackcelestial-30-pillai-university-navi-mumbai-1737808",
"kind": "hackathon",
"status": "LIVE",
"registrationOpen": true,
"organiserName": "Pillai University, Navi Mumbai",
"organiserUrl": "https://unstop.com/c/pillai-university-navi-mumbai-2057931",
"isOnline": false,
"locationMode": "offline",
"city": "Navi Mumbai",
"state": "Maharashtra",
"country": "India",
"venue": "Dr. K. M. Vasudevan Pillai Campus, Plot No. 10, Sector 16, New Panvel East, Panvel, Navi Mumbai, Maharashtra 410206",
"registrationDeadline": "2026-09-27T23:59:00+05:30",
"daysLeft": 7,
"deadlineText": "7 days left",
"registrationCount": 2353,
"viewsCount": 374965,
"participantCount": 713,
"prizes": [
{ "rank": "Prize Pool", "cash": 150000, "currency": "INR", "certificate": true, "prePlacementOffer": false }
],
"prizeTopCash": 150000,
"prizeSummary": "Prize pool of Rs 1.5 Lakhs (Cash)",
"hasCashPrize": true,
"minTeamSize": 1,
"maxTeamSize": 5,
"eligibilityTags": ["Engineering Students", "Undergraduate", "Arts, Commerce, Sciences & Others"],
"skills": ["Problem Solving", "Artificial Intelligence (AI)", "Creative Thinking"],
"hasEntryFee": true,
"descriptionText": "Note: \n\n \n Only the Finalist / shortlisted teams will be required to pay a participation fee of ..."
}
FieldHow to read it
isOnline, rawRegionUnstop marks every job and internship online even when it has an office and a city, so on those boards isOnline is worked out from the work mode instead, with Unstop's own value kept as rawRegion.
city, locationsThe city sits in locations on jobs but in the venue block on events, so both are read.
participantCountThe participant count from the opportunity's own page when it gives one, otherwise the registration count again.
payIsEstimate, payIsDisclosedUnstop estimates nothing, so payIsEstimate is false on every row; payIsDisclosed says whether a figure exists at all.
organiserEmailOnly with detail fetching on, and only where the organiser published one.

🧾 Reading the output

RowHow to spot itCharged
An opportunityNo _sample, no errorCodeyes
The sample row_sample: true and charged: falseno
A diagnosticAn errorCode and a messageno
CodeWhat it means
FILTER_NOT_SUPPORTEDA filter value is not one Unstop actually honours. It was dropped and the rest of the run carried on.
NO_RESULTSThe search was valid and matched nothing. No opportunity rows are billed.
BAD_URLA pasted link or id could not be read. Short /o/ links are the usual cause.
NOT_FOUNDThat opportunity id does not exist any more.
DETAIL_FAILEDThe listing row arrived but its own page did not. The row is kept without the organiser contact.
SERVER_ERROR, HTTP_ERRORUnstop answered with an error. Run it again.
TIME_LIMITThe run got close to its time limit and stopped on its own. The opportunities delivered before that are complete and charged. Give the run more time, or ask for fewer opportunities, to get the rest.

A diagnostic never fails the run, except one: when the time limit stopped the run before any opportunity came back, the run ends as failed, with a TIME_LIMIT row saying so.

Watch out in the Console: the overview table has no errorCode column, so diagnostic rows show up there as blank lines. They read fine in the JSON.

💡 What people use it for

  • Listing the hackathons and case competitions open right now, with deadlines and prize money.
  • Tracking who is hiring freshers in India, weekly, with Posted within set to a week.
  • Finding in-person events in one city, with Online or in person set to in person and a city list.
  • Researching a sector with the archive: set the status to Expired and look at what ran last year and how many people registered.

🚧 What it does not do

  • 10,000 results per search. Unstop's own total stops at 10,000 and asking past it fails. Split a big pull by domain, status or keyword.
  • No login, so anything behind an Unstop account is out of reach: your applications, saved items, private college-only listings. It does not register or apply on your behalf either.
  • No mentor profiles, blog posts, courses or practice questions, and no file downloads.
  • Short unstop.com/o/XXXX links are not supported. They carry no numeric id.
  • Unstop has no working city filter, so city matching happens here after the rows arrive. On a big board with a rare city that means a lot of reading for few rows.
  • Organiser contacts depend on the board. Measured on 8 August 2026: an email on 222 of 275 competition rows, on 10 of 600 jobs, and on 10 of 861 internships.
  • Mostly India. Every in-person opportunity in the sample was in India, and eligibleCountries was empty on all 40 detail pages checked.
  • It is not an official Unstop tool. Dami's Studio is independent and is not affiliated with or endorsed by Unstop, or by any other company named on this page.

🧭 Which scraper do you need?

If you wantUse
Hackathons, competitions, internships and jobs from UnstopThis one
Internships and fresher jobs in India, with typed stipendsInternshala Scraper
Jobs in India by keyword and city, from NaukriNaukri Jobs Scraper
Tech meetups and events on Luma, by city or calendarLuma Events Scraper
Every upcoming Eventbrite event in a cityEventbrite Events Scraper
Public LinkedIn jobs by keyword and locationLinkedIn Jobs Scraper

❓ Questions people ask

Do I need an Unstop account or an API key?

No. Everything it reads is public.

Can I get the organiser's email?

Only where the organiser published one, and only with detail fetching on.

Can I scrape expired competitions?

Yes, set Registration status to Expired. That archive is much larger than the live board.

Why did I get the same opportunity twice?

Two runs, most likely. Within one run rows are deduplicated by id, including the overlap between Competitions and the hackathon and quiz boards.

Yes. Put the full URL, or just the numeric id at the end of it, into Opportunity URLs.

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/unstop-scraper. Either way the run happens on your Apify account at the same price.

These are public listings, and some rows carry an organiser's contact details, which data-protection law covers, so have a reason for collecting them. Apify's write-up on the legality of web scraping is a good start, and we are not lawyers.

🆘 If something breaks

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