# Unstop Scraper | Jobs, Internships, Hackathons & Competitions (`data_daemon/unstop-scraper`) Actor

$1.50 per 1,000 listings | Scrape Unstop (unstop.com) jobs, internships, hackathons, competitions, quizzes, workshops and scholarships: description, salary or stipend, prizes, deadlines, eligibility, skills. Only-new mode for schedules. No login, no proxy.

- **URL**: https://apify.com/data_daemon/unstop-scraper.md
- **Developed by:** [Daemon Data](https://apify.com/data_daemon) (community)
- **Categories:** Jobs, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.05 / 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 | Jobs, Internships, Hackathons & Competitions API

**Unstop Scraper** is a pay-per-result Apify Actor that returns open listings from [Unstop](https://unstop.com/) (formerly Dare2Compete), India's platform for campus hiring, internships, hackathons and student competitions, as JSON, CSV or Excel. One run can cover **jobs, internships, hackathons, competitions (case studies, challenges), quizzes, workshops and scholarships**. Each row has the full description, salary or stipend, workplace type, locations, skills, eligibility (students, freshers, professionals), registration dates and deadline, team size, entry fee, prizes, and registration and view counts. Price: **$1.50 per 1,000 listings**, plus $0.001 per run. You need no login, cookies, proxy or browser. On 26 October 2026 Unstop listed about **710 open jobs, 570 internships, 670 competitions, 210 hackathons, 110 workshops, 75 quizzes and 5 scholarships**.

**$0.0015 per listing, description included**, plus $0.001 per run. The Actor reads the public JSON API that unstop.com's own pages load (`/api/public/`, which Unstop's robots.txt allows), so runs are fast: 100 listings take a few seconds. Apify's free plan ($5 credit every month) covers more than **3,000 listings**. It is built for schedules. Switch on **Only new listings since the last run** and a daily run returns, and charges for, only the listings you have not received before.

> Live check, 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 Unstop data, and what for

| You are | What this Actor gives you |
|---|---|
| **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. |

### Quick start (about a minute)

1. Click **Try for free**. The form is pre-filled with **Jobs** and **Internships** and 50 listings of each.
2. Optionally pick more types (**Hackathons**, **Competitions**), add keywords (`data analyst`, `marketing`) or filters such as **Work from home**, **Paid only** or **Posted within the last 7 days**.
3. Click **Start**. 100 listings take a few seconds and cost **$0.15**.
4. Download the results as JSON, CSV or Excel. Or save the input as a task, tick **Only new listings since the last run** and **schedule it daily** to get a fresh feed in Google Sheets, a webhook, Make, Zapier or n8n.

**From code** (returns the listings in one call):

```bash
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", "postedWithinDays": 7, "maxResultsPerSearch": 200}'
```

### Export every open Unstop listing

Set `maxResultsPerSearch` to `0` and choose the types you want. All seven types together are about 2,350 listings, which is about $3.50 per full export. Unstop caps each API page at 100 listings, so a full export takes about 25 requests and well under a minute. For a daily feed, keep `maxResultsPerSearch: 0` and switch on `onlyNewSinceLastRun`. The first run exports everything, and later runs return only listings that are new on Unstop.

```json
{
    "opportunityTypes": ["jobs", "internships", "hackathons", "competitions", "quizzes", "workshops", "scholarships"],
    "maxResultsPerSearch": 0,
    "onlyNewSinceLastRun": true,
    "stateName": "unstop-full-feed"
}
```

### Input

Every field is optional. An empty input returns the 50 newest jobs and the 50 newest internships.

| Field | What it does |
|---|---|
| `opportunityTypes` | `jobs`, `internships`, `hackathons`, `competitions`, `quizzes`, `workshops`, `scholarships`. Default: jobs and internships. |
| `searchTerms` | Keywords matched by Unstop against titles and organisation names, e.g. `data analyst`, `marketing`, `Reliance`. Each keyword runs once per type. Empty = every open listing. |
| `workplaceTypes` | Jobs and internships: `in_office`, `wfh` (remote), `hybrid`, `on_field`. |
| `timing` | Jobs and internships: `full_time` or `part_time`. |
| `pay` | Jobs and internships: `paid` or `unpaid`. |
| `eligibility` | Open to `students`, `fresher` (recent graduates) or `professionals`. |
| `mode` | Events: `online` or `offline`. |
| `entryFee` | Events: `free` or `paid`. |
| `postedWithinDays` | Only listings published in the last N days, e.g. `1` for a daily feed. |
| `locations` | Only listings whose city, state or country contains one of these words, e.g. `Bangalore`, `Maharashtra`. `remote` matches work-from-home jobs. |
| `includeDescription` | Full description as text and HTML (default on; it costs the same either way). |
| `maxResultsPerSearch` | Cap per type and keyword (default 50, newest first). `0` = no cap. |
| `maxResults` | Total cap for the run. |
| `onlyNewSinceLastRun`, `stateName` | Only-new mode for schedules (see below). |
| `skipIds` | Listing ids you already have; neither saved nor charged. |

Common names from other scrapers (`keywords`, `query`, `type`, `category`, `location`, `maxItems`, `jobType`, `onlyNew` and more) are accepted as aliases.

### Output

One item per listing. A job:

```json
{
  "id": 1777503,
  "type": "job",
  "subtype": "jobs",
  "title": "PEB Marketing & Business Development Executive",
  "url": "https://unstop.com/jobs/peb-marketing-business-development-executive-omniventra-manpower-solutions-1777503",
  "organization": "Omniventra Manpower Solutions",
  "organizationUrl": "https://unstop.com/c/omniventra-manpower-solutions-2112886",
  "mode": "online",
  "locations": [
    { "city": "Jamshedpur", "state": "Jharkhand", "country": "India" },
    { "city": "Kolkata", "state": "West Bengal", "country": "India" }
  ],
  "locationText": "Jamshedpur, Jharkhand, India | Kolkata, West Bengal, India",
  "workplaceType": "in_office",
  "timing": "full_time",
  "paid": true,
  "salaryMin": 35000,
  "salaryMax": 40000,
  "salaryCurrency": "INR",
  "salaryPeriod": "monthly",
  "eligibility": ["Experienced Professionals"],
  "skills": ["B2B Sales", "Business development", "Sales Pipeline Management", "Negotiation", "Structural Steel Design"],
  "jobFunctions": ["B2B Sales", "Business Development"],
  "registrationOpen": true,
  "registrationDeadline": "2026-11-08T18:30:00.000Z",
  "daysLeft": "13 days left",
  "registrations": 0,
  "views": 1,
  "postedAt": "2026-10-26T04:07:15.000Z",
  "description": "About the Company\n\nOmniventra Manpower Solutions is hiring for an industrial project sales opportunity ...",
  "scrapedAt": "2026-10-26T04:32:40.783Z"
}
```

A hackathon or competition has the same fields. For events, `mode` (online/offline), `teamSizeMin`/`teamSizeMax`, `entryFee`, `prizes` (rank, cash, currency, non-cash rewards) and `totalPrizeCashInr` are the useful ones.

You can download the dataset as JSON, CSV, Excel, XML or HTML, or read it through the Apify API. The Output tab has three views: **Overview**, **Jobs and internships**, and **Hackathons and competitions**.

#### Data fields

| Field | Description |
|---|---|
| `id`, `url` | Unstop listing id (stable) and public page |
| `type`, `subtype` | job, internship, hackathon, competition, quiz, workshop, scholarship; Unstop's own subtype (e.g. `online_coding_challenge`, `case_study`) |
| `title`, `organization`, `organizationUrl`, `organizationLogo`, `program` | Listing and organiser; `program` is the hiring drive or festival it belongs to |
| `mode`, `locations`, `locationText` | Online/offline and city, state, country |
| `workplaceType`, `timing`, `paid` | Jobs and internships: in office / remote / hybrid / on field, full or part time, paid or unpaid |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` | Salary or stipend when the organiser shows it (about 80% of jobs and internships) |
| `experienceMinYears`, `experienceMaxYears` | Experience asked for, when stated |
| `eligibility`, `skills`, `jobFunctions` | Who can apply; skills and functions listed for the role |
| `registrationOpen`, `registrationStart`, `registrationDeadline`, `daysLeft` | Registration window (ISO 8601, UTC) and Unstop's countdown |
| `startsAt`, `endsAt` | Event dates |
| `teamSizeMin`, `teamSizeMax`, `entryFee`, `isPaidEntry` | Events: team size and entry fee |
| `prizes`, `totalPrizeCashInr` | Events: prizes and the sum of INR cash prizes |
| `registrations`, `views` | Counts shown by Unstop |
| `postedAt`, `updatedAt` | Published and last updated (ISO 8601, UTC) |
| `description`, `descriptionHtml` | Full description |
| `searchTerm`, `scrapedAt` | Keyword that found it; when this run saved it |

### Scheduling & automation

**Recipe: remote paid internships, only new ones, every morning**

```json
{
    "opportunityTypes": ["internships"],
    "workplaceTypes": ["wfh"],
    "pay": "paid",
    "maxResultsPerSearch": 0,
    "onlyNewSinceLastRun": true,
    "stateName": "remote-paid-internships"
}
```

1. Paste the input, click **Save as task**, then **Schedules → Create schedule → Daily** (for example `0 8 * * *`, 08:00 IST) and add the task.
2. The first run delivers every matching listing. Every later run delivers only listings that were not delivered before, and **skipped listings are not charged**. The memory is a key-value store named `unstop-opportunities-state` in your own Apify account, with one record per `stateName`. It forgets ids after 180 days.
3. Give each saved search its own `stateName`, or leave it empty and the Actor derives one from the types, keywords and filters. To start over, change the name.
4. Every run writes a `RUN-SUMMARY` record to its key-value store with types, keywords, found, saved per type, filtered, skipped and charged counts. A webhook consumer can decide what to do without opening the dataset.

**Where the results go:** the task's Integrations tab sends them to Google Sheets, Slack, email or a webhook. Make, Zapier and n8n can use the Apify module with the task id.

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

Pay per event. Platform compute is included, and the Actor runs in 512 MB, so the start fee is always a single event.

| Event | Price | When it is charged |
|---|---|---|
| Opportunity | $0.0015 | Each listing saved to your dataset, description included |
| Actor start | $0.001 | Once per run |

That is **$1.50 per 1,000 listings**. Listings skipped by only-new mode, `skipIds`, de-duplication or your location and date filters are never charged. Scale plans pay 15% less and Business plans 30% less.

| How teams use it | Volume (measured 26 Oct 2026) | Cost |
|---|---|---|
| Quick look: 50 jobs + 50 internships | 100 listings, 1 run | $0.151 |
| Every open hackathon and competition | about 870 listings, 1 run | about $1.30 |
| Full export of all seven types | up to about 2,350 listings, 1 run | up to about $3.50 |
| Daily feed, only new jobs and internships | about 100 new listings a day (740 in the week to 26 Oct) | about $4.50 a month |
| Weekly hackathon digest, only new | about 50 new hackathons a week | about $0.33 a month |

### Tips

- Keywords are matched by Unstop against titles and organisation names, not descriptions. A skill such as `python` may return nothing, while `data analyst` returns 69 jobs. For skill-level filtering, export the type without a keyword and filter on `skills` or `description` yourself.
- `workplaceTypes`, `timing`, `pay`, `eligibility`, `mode`, `entryFee` and `postedWithinDays` are applied by Unstop before anything is downloaded, so they make runs smaller. `locations` is checked on each listing.
- Many online events have no location. Leave `locations` empty for hackathons and competitions, or use `mode: "offline"`.
- Set a **maximum cost per run** on the task. The Actor stops cleanly at the limit and says so in the status message.

### FAQ

**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.

### Related Actors by Daemon Data

- [IIMJobs Jobs Scraper](https://apify.com/data_daemon/iimjobs-jobs-scraper) – India's MBA, finance, consulting and management jobs with full descriptions and only-new mode
- [Hirist.tech Jobs Scraper](https://apify.com/data_daemon/hirist-jobs-scraper) – India IT and tech jobs with full descriptions, same scheduling conventions
- [Foundit Jobs Scraper](https://apify.com/data_daemon/foundit-jobs-scraper) – foundit.in (Monster India) jobs with full descriptions, only-new mode for daily feeds
- [Instahyre Jobs Scraper](https://apify.com/data_daemon/instahyre-jobs-scraper) – India tech and startup jobs with company size and full descriptions
- [Shine Jobs Scraper](https://apify.com/data_daemon/shine-jobs-scraper) – Shine.com India jobs with full descriptions, salary range, experience, skills and industry; only-new mode
- [Luma Events Scraper](https://apify.com/data_daemon/luma-events-scraper) – lu.ma events by city, topic or organiser calendar, with hosts and ticket info
- [Oracle Jobs Scraper](https://apify.com/data_daemon/oracle-hcm-jobs-scraper) – every job on any Oracle Recruiting Cloud (Oracle HCM) career site
- [India IPO Tracker](https://apify.com/data_daemon/india-ipo-tracker) – live IPO GMP, subscription and listing data for India
- [Welcome to the Jungle Jobs Scraper](https://apify.com/data_daemon/welcome-to-the-jungle-jobs-scraper) – France-focused WTTJ jobs with full descriptions and company profiles

### Support

Found a bug or need another field or filter? Open an issue on the Issues tab; issues are usually answered within a day. Custom variants of this Actor are available on request.

A quick review on the Actor page helps other users find it.

### Disclaimer

This Actor collects publicly available listings for informational purposes and does not collect personal data about candidates or participants. Respect the source website's terms of use and applicable data-protection laws when using the data.

# Actor input Schema

## `opportunityTypes` (type: `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` (type: `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` (type: `array`):

Only jobs and internships with these workplace types. Empty = any.

## `timing` (type: `string`):

Only full-time or only part-time jobs and internships.

## `pay` (type: `string`):

Mostly useful for internships: paid (with a stipend) or unpaid.

## `eligibility` (type: `string`):

Only listings open to this group, as set by the organiser.

## `mode` (type: `string`):

Only online or only in-person events.

## `entryFee` (type: `string`):

Only free or only paid-entry events.

## `postedWithinDays` (type: `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` (type: `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` (type: `boolean`):

Full description as plain text (`description`) and HTML (`descriptionHtml`). It costs the same either way; turn it off for smaller files.

## `maxResultsPerSearch` (type: `integer`):

Cap for each type (and keyword). Newest listings come first. 0 = no cap: every open listing, about 2,350 across all types.

## `maxResults` (type: `integer`):

Stop after this many saved listings. 0 or empty = no total cap (the run's maximum cost still applies).

## `onlyNewSinceLastRun` (type: `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` (type: `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` (type: `array`):

Unstop listing ids you already have (the `id` field). They are neither saved nor charged.

## `proxyConfiguration` (type: `object`):

Not needed: the Unstop public API answers Apify servers directly. Use a proxy only if requests start failing.

## Actor input object example

```json
{
  "opportunityTypes": [
    "jobs",
    "internships"
  ],
  "searchTerms": [],
  "workplaceTypes": [],
  "timing": "any",
  "pay": "any",
  "eligibility": "any",
  "mode": "any",
  "entryFee": "any",
  "locations": [],
  "includeDescription": true,
  "maxResultsPerSearch": 50,
  "onlyNewSinceLastRun": false,
  "skipIds": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Unstop listings (jobs, internships, hackathons, competitions, quizzes, workshops, scholarships) as JSON items in the default dataset (also downloadable as CSV, Excel, XML).

## `runSummary` (type: `string`):

RUN-SUMMARY record: types, keywords, listings found, saved per type, filtered, skipped (already delivered / skipIds) and charged counts.

# 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",
        "internships"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_daemon/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",
        "internships",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("data_daemon/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",
    "internships"
  ]
}' |
apify call data_daemon/unstop-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_daemon/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/g822pXuHqVz1LRaxK/builds/Juz4Upi2mzoRccGEH/openapi.json
