# Unstop Scraper (`deriverge/unstop-scraper`) Actor

Jobs, internships, hackathons, competitions, quizzes and workshops from Unstop, India's student and early career platform. Rows carry salary or stipend, skills, eligibility, prizes, team size, deadlines and view and registration counts; search by keyword and filter by city or work mode.

- **URL**: https://apify.com/deriverge/unstop-scraper.md
- **Developed by:** [deriverge s.r.o.](https://apify.com/deriverge) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 opportunities

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Unstop Scraper

Unstop Scraper returns opportunities from Unstop (unstop.com, formerly Dare2Compete), India's platform for students and early careers: jobs, internships, hackathons, competitions, quizzes, workshops and scholarships, one row per opportunity. Each row has the organizer, location or online mode, salary or stipend, skills, eligibility, prizes, team size, the registration deadline and Unstop's view and registration counts. The form starts with jobs matching `data`, so **Start** returns 20 rows within seconds. Nearly all listings are in India, with pay in rupees. It costs $2.00 per 1,000 opportunities on the Free plan ($1.00 on Business), and the $5 of monthly credit in Apify's Free plan covers about 2,500 opportunities.

### What data does it return?

| Field | Description |
|---|---|
| `type`, `category` | `Job`, `Internship`, `Hackathon`, `Competition`, `Quiz`, `Workshop` or `Scholarship`, and for events the kind of event, such as `Online coding challenge`. |
| `title`, `url`, `shortUrl`, `id` | Title, the page on unstop.com, Unstop's short link such as `https://unstop.com/o/dW5wRBe` and the numeric ID. |
| `organization`, `organizationUrl`, `organizationLogo` | The company, college or organizer, its Unstop profile and its logo. |
| `locations`, `city`, `state`, `country` | Every location as `City, State, Country`, and the first one split into parts. Empty for online events and for many work-from-home internships. |
| `workMode`, `timing` | For jobs and internships: `In office`, `Work from home`, `Hybrid` or `On field`, and `Full-time`, `Part-time` or `Contract`. |
| `paid`, `salaryMin`, `salaryMax`, `salaryPeriod`, `salaryCurrency` | Whether the role is paid, and the salary or stipend range with `month` or `year`, such as `1200000` INR a year. Empty when the employer does not disclose it. |
| `experienceMinYears`, `experienceMaxYears` | Years of experience asked for, when the listing gives them. |
| `skills`, `workFunctions`, `eligibility` | Skills such as `Python` or `Amazon Redshift`, work areas such as `Data Engineering`, and who may apply, such as `Fresher`, `Undergraduate` or `Experienced Professionals`. |
| `mode`, `venue`, `festival` | For events: `Online` or `Offline`, the venue address and the college festival the event belongs to. |
| `teamSizeMin`, `teamSizeMax` | Smallest and largest team allowed in a hackathon or competition. |
| `prizes`, `prizePool`, `prizeCurrency` | Every prize with its rank, cash amount, currency, certificate and note, and the sum of the cash prizes. |
| `registrationFee` | `true` when taking part costs a fee. |
| `registrationOpens`, `registrationDeadline`, `endsAt` | When registration opens and closes and when the opportunity ends, in UTC. |
| `views`, `registrations` | How many times the listing was viewed and how many people applied or registered, at the time of the run. |
| `postedAt`, `updatedAt` | When Unstop published the listing and when it last changed, in UTC. |
| `description`, `descriptionHtml` | The full listing text as plain text and as the original HTML. |
| `searchQuery`, `key`, `scrapedAt` | The search that found the row, such as `jobs "data"`, the stable key `unstop:<id>` and when the row was read. |

### How to scrape Unstop

1. Pick the **Opportunity types**. Each type is its own search on Unstop, and with none picked the actor reads jobs and internships.
2. Add **Keywords** as you would type them into Unstop's search box, such as `data analyst`, `marketing` or a company name. Each keyword is searched within each type; leave it empty to read everything of those types.
3. Narrow the results with **Open to freshers**, **Quick apply only**, **Work mode** for jobs and internships, **Cities** such as `Bangalore` or `Mumbai`, and **Exclude keywords**, which checks the title and organizer. **Status** switches to recently closed opportunities.
4. Set **Maximum opportunities** and click **Start**. Rows land in the **Output** tab, which exports CSV, Excel or JSON, and `SUMMARY` in the key-value store shows how many listings each search matched.

For API users, open hackathons and competitions about AI or machine learning:

```json
{
  "opportunityTypes": ["hackathons", "competitions"],
  "keywords": ["AI", "machine learning"],
  "status": "open",
  "maxItems": 500
}
```

### Example output

A job from the prefilled search for `data` on 11 October 2026. `description` and `descriptionHtml` are cut after the first line here, marked ` ...`.

```json
{
  "key": "unstop:1768393",
  "id": "1768393",
  "type": "Job",
  "category": null,
  "title": "AWS Data Engineer",
  "url": "https://unstop.com/jobs/aws-data-engineer-dm-i-technologies-private-limited-1768393",
  "shortUrl": "https://unstop.com/o/dW5wRBe",
  "organization": "DM & I Technologies Private Limited",
  "organizationUrl": "https://unstop.com/c/dm-i-technologies-private-limited-2080447",
  "organizationLogo": "https://d8it4huxumps7.cloudfront.net/uploads/images/150x150/uploadedManual-6ac8e33582f81_deevan_main_logo.jpeg",
  "mode": null,
  "locations": [
    "Gurgaon, Haryana, India"
  ],
  "city": "Gurgaon",
  "state": "Haryana",
  "country": "India",
  "venue": null,
  "workMode": "In office",
  "timing": "Full-time",
  "paid": true,
  "salaryMin": 1200000,
  "salaryMax": 1200000,
  "salaryPeriod": "year",
  "salaryCurrency": "INR",
  "experienceMinYears": null,
  "experienceMaxYears": null,
  "skills": [
    "AWS (Amazon Web Services)",
    "Python",
    "ETL Tools",
    "Amazon S3",
    "Amazon Redshift"
  ],
  "workFunctions": [
    "Cloud Engineering",
    "Data Engineering"
  ],
  "eligibility": [
    "Experienced Professionals"
  ],
  "teamSizeMin": null,
  "teamSizeMax": null,
  "prizePool": null,
  "prizeCurrency": null,
  "prizes": [],
  "registrationFee": false,
  "festival": null,
  "registrationOpens": "2026-10-08T18:30:00.000Z",
  "registrationDeadline": "2026-10-23T18:29:59.000Z",
  "endsAt": "2026-10-23T18:29:59.000Z",
  "views": 1335,
  "registrations": 3,
  "postedAt": "2026-10-09T13:39:58.000Z",
  "updatedAt": "2026-10-11T12:51:32.000Z",
  "description": "DM & I Technologies Private Limited is hiring for an AWS Data Engineer! ...",
  "descriptionHtml": "<p><strong>DM &amp; I Technologies Private Limited is hiring for an AWS Data Engineer!</strong></p> ...",
  "searchQuery": "jobs \"data\"",
  "scrapedAt": "2026-10-11T15:48:45.749Z"
}
```

### How much does it cost to scrape Unstop?

| | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| 1,000 opportunities | $2.00 | $1.60 | $1.30 | $1.00 |

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

Every open opportunity on Unstop, all seven types, came to 2,096 rows on 11 October 2026, which cost $4.192 on the Free plan and $2.096 on Business. An opportunity found by two searches is returned and charged once, and rows removed by a filter or skipped by the new-only mode are not charged.

### Limits

- Unstop held 2,096 different open opportunities on 11 October 2026: 703 jobs, 614 internships, 398 competitions, 249 hackathons, 78 workshops, 49 quizzes and 5 scholarships. Reading all of them took 29 requests and 2 minutes, as the actor leaves half a second between requests.
- Searches overlap: the competitions search also lists hackathons and quizzes. Such listings come once, which removed 298 duplicates in the full run.
- Pay was shown on 333 of 703 jobs and 347 of 614 internships. The rest are not disclosed by the employer. Years of experience were given on 8 jobs.
- Unstop's search cannot filter by city or work mode, so the actor reads the listings and drops the others itself. Online events have no city and are left out whenever **Cities** is set.
- A keyword is matched by Unstop's own search, beyond the title: `data` also returned jobs at NTT Data and a chartered accountant opening.
- If Unstop does not answer a page after three tries, that search stops there and the log names the page. A run fails only when more than half of its requests failed.

### Hackathons and competitions

For events, the rows carry what decides whether to take part: `mode` (online or offline), `teamSizeMin` and `teamSizeMax`, the registration window, `registrationFee`, `eligibility` and the prizes. Of the open events on 11 October 2026, 141 of 249 hackathons and 253 of 398 competitions listed cash prizes. Each entry in `prizes` keeps the organizer's wording in `rank` and `note`, which often includes internships, certificates or tool credits besides the cash.

### Watching for new opportunities

Turn on **Return only opportunities new since the last run**, give a **Watch name** such as `hackathons-ai` or save the input as a task, and schedule it daily. Each run then returns only opportunities that no earlier run under that name returned in the last 120 days. Opportunities that did not fit under **Maximum opportunities** are not marked as seen and come with the next run.

### FAQ

#### Is it legal to scrape Unstop?

The actor reads Unstop's public opportunity search under `/api/public/`, a path Unstop's robots.txt explicitly allows, without logging in. The listings are published by companies, colleges and organizers to attract applicants, and the actor collects nothing about the people who register. You are responsible for how you use the data.

#### Can I see how popular a listing is?

Yes. `views` and `registrations` are Unstop's own counters at the time of the run. A data scientist opening at Trent had 367,044 views and 11,198 applications on 11 October 2026; scheduled runs show how these numbers grow.

### Related scrapers

- [Internshala Scraper](https://apify.com/deriverge/internshala-jobs-scraper)
- [Foundit Jobs Scraper](https://apify.com/deriverge/foundit-jobs-scraper)
- [Hirist Jobs Scraper](https://apify.com/deriverge/hirist-jobs-scraper)
- [iimjobs Scraper](https://apify.com/deriverge/iimjobs-scraper)
- [Instahyre Jobs Scraper](https://apify.com/deriverge/instahyre-jobs-scraper)

### Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the **Issues** tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the **API** tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.

# Changelog

This Actor's version history is a separate document: https://apify.com/deriverge/unstop-scraper/changelog.md

# Actor input Schema

## `opportunityTypes` (type: `array`):

Which kinds of opportunities to return. Each type is its own search.

## `keywords` (type: `array`):

What to search for, as in the Unstop search box, for example "data analyst", "marketing", "AI" or a company name. Each keyword is searched in each type. Leave empty for everything.

## `status` (type: `string`):

Open opportunities, or recently closed ones.

## `openToFreshers` (type: `boolean`):

Only opportunities that fresh graduates can apply to.

## `quickApplyOnly` (type: `boolean`):

Only opportunities with one-click Quick Apply on Unstop.

## `workModes` (type: `array`):

For jobs and internships: only these work modes. Leave empty for all.

## `cities` (type: `array`):

Only opportunities in any of these cities, for example Bangalore, Mumbai or Delhi. Online events have no city and are left out when you set this.

## `excludeKeywords` (type: `array`):

Drop opportunities whose title or organization contains any of these.

## `newOnly` (type: `boolean`):

Keeps a snapshot per watch name (or per saved task) and returns only opportunities that were not there before. Schedule it daily for an alert.

## `watchName` (type: `string`):

Name of the snapshot used by the new-only mode, for example "hackathons-ai". Runs from a saved task get one automatically.

## `maxItems` (type: `integer`):

Hard cap on returned opportunities. Unstop lists a few thousand open ones at a time; the whole set takes about a minute.

## Actor input object example

```json
{
  "opportunityTypes": [
    "jobs"
  ],
  "keywords": [
    "data"
  ],
  "status": "open",
  "openToFreshers": false,
  "quickApplyOnly": false,
  "newOnly": false,
  "maxItems": 20
}
```

# Actor output Schema

## `opportunities` (type: `string`):

One row per job, internship, hackathon or competition with pay, prizes, deadlines, eligibility and full description.

## `summary` (type: `string`):

Opportunities matching and returned per search, dropped rows and warnings.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "opportunityTypes": [
        "jobs"
    ],
    "keywords": [
        "data"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("deriverge/unstop-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "opportunityTypes": ["jobs"],
    "keywords": ["data"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("deriverge/unstop-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "opportunityTypes": [
    "jobs"
  ],
  "keywords": [
    "data"
  ],
  "maxItems": 20
}' |
apify call deriverge/unstop-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deriverge/unstop-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/s2Z4a0ePQk9IsXnKD/builds/K8KeN9SWyhRuuDUPD/openapi.json
