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

Unstop scraper API for hackathons, competitions, internships, jobs and scholarships. Each row has the organiser, deadline, prizes or pay, eligibility and registrations. $2.50 per 1,000 opportunities.

- **URL**: https://apify.com/dami_studio/unstop-scraper.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** Jobs, Lead generation, Other
- **Features:** Limited permissions, Multi-tenant, Server interface
- **Stats:** 60 total users, 23 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.44 / 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 for 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.

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.

| | |
|---|---|
| **Input** | Boards, keywords, filters, or pasted Unstop links |
| **Output** | One row per opportunity: organiser, eligibility, deadline, prizes or pay, registrations, place |
| **Ceiling** | 10,000 results per search, and your own `maxItems` on top |
| **Account needed** | None, 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`.

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 get | Field |
|---|---|
| Identity | `id`, `shortId`, `title`, `url`, `shortUrl`, `kind`, Unstop's raw `type` and `subtype`, `status`, `registrationOpen` |
| Organiser, with contacts when detail fetching is on | `organiserName`, `organiserId`, `organiserUrl`, `organiserLogo`, `organiserEmail`, `organiserPhone`, `organiserContactName` |
| Where | `isOnline`, `locationMode`, `rawRegion`, `locations`, `city`, `state`, `country`, `countryCode`, `venue` |
| When | `registrationDeadline`, `registrationOpensAt`, `startDate`, `endDate`, `daysLeft`, `deadlineText`, `postedAt`, `updatedAt`, `rounds` |
| Prizes | `prizes` with rank, cash, currency, certificate and pre-placement offer, plus `prizeTopCash`, `prizeTotalCash`, `prizeCurrency`, `hasCashPrize`, `prizeSummary` |
| Pay | `payMin`, `payMax`, `payCurrency`, `payPeriod`, `payType`, `payIsDisclosed`, `payIsEstimate`, `workMode`, `employmentType`, `minExperienceYears`, `maxExperienceYears` |
| Who can enter | `eligibilityTags`, `eligibilitySectors`, `eligibilityCourses`, `eligibilityExperience`, `eligibilityPassoutYears`, `eligibilityRaw`, `eligibleCountries`, `minTeamSize`, `maxTeamSize` |
| Interest | `registrationCount`, `participantCount`, `viewsCount` |
| The rest | `skills`, `workFunctions`, `categoryTags`, `hasEntryFee`, `festivalName`, `trustedTag`, `logoUrl`, `descriptionText`, optional `descriptionHtml`, `scrapedAt` |

### ▶️ How to scrape Unstop

1. Open [Unstop Scraper](https://apify.com/dami_studio/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

```json
{
  "listing": ["hackathons"],
  "status": "open",
  "region": "offline",
  "cities": ["Pune", "Bangalore"],
  "maxItems": 50,
  "includeDetails": true
}
```

| Field | Default | What it is |
|---|---|---|
| `listing` | none, the form starts on Hackathons | Which boards to walk: hackathons, competitions, internships, jobs, quizzes, scholarships, workshops, conferences, cultural, hiring-challenges, all. Several are walked in turn. |
| `searchQueries` | none | Free text, as you would type it into Unstop's search box. Each keyword is run against every board you picked. |
| `startUrls` | none | Full 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. |
| `status` | `open` | `open` for registration open now, `expired` for past the deadline, `closed` for closed early. |
| `category` | any | Unstop's domain taxonomy. The 17 values in the dropdown are the complete set that actually filters. |
| `region` | either | `online` or `offline`. |
| `cities` | none | Indian city names, matched against each row's city and state. Rows dropped here are never charged. |
| `workMode`, `employmentType`, `paidOnly`, `workingDays` | any | Jobs and internships only. Work from home, full time, paid or unpaid, days per week. |
| `eligibleFor` | anyone | Unstop's own buckets: college students, freshers, working professionals, school students. |
| `postedWithinDays` | any time | 1, 7, 30, 90, 180 or 365 days. |
| `teamSize`, `entryFee` | any | Competition-style boards only. On jobs they return nothing rather than being ignored. |
| `skill` | none | One 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`, `sortDirection` | Unstop's own order, high to low | Newest, prize money, days left, or stipend and salary. Rows with no figure sink to the bottom. |
| `maxItems` | `50` | Stop after this many opportunities across every board and keyword. This is your spending cap. |
| `includeDetails` | `true` | Read each opportunity's own page for the organiser contact, round schedule and participant count. One extra request per row, and nothing extra in money. |
| `includeDescriptionHtml` | `false` | Keep the organiser's original markup beside the plain text. It makes the dataset much larger. |
| `detailConcurrency` | `8` | How many detail pages to read at once. |
| `egressMode` | `auto` | Leave it on automatic. |
| `proxyConfiguration` | none | Optional. 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.

```json
{
  "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 ..."
}
```

| Field | How to read it |
|---|---|
| `isOnline`, `rawRegion` | Unstop 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`, `locations` | The city sits in `locations` on jobs but in the venue block on events, so both are read. |
| `participantCount` | The participant count from the opportunity's own page when it gives one, otherwise the registration count again. |
| `payIsEstimate`, `payIsDisclosed` | Unstop estimates nothing, so `payIsEstimate` is `false` on every row; `payIsDisclosed` says whether a figure exists at all. |
| `organiserEmail` | Only with detail fetching on, and only where the organiser published one. |

### 🧾 Reading the output

| Row | How to spot it | Charged |
|---|---|---|
| An opportunity | No `_sample`, no `errorCode` | yes |
| The sample row | `_sample: true` and `charged: false` | no |
| A diagnostic | An `errorCode` and a message | no |

| Code | What it means |
|---|---|
| `FILTER_NOT_SUPPORTED` | A filter value could not be used. It was dropped and the rest of the run carried on. |
| `NO_RESULTS` | The search was valid and matched nothing. No opportunity rows are billed. |
| `BAD_URL` | A pasted link or id could not be read. Short `/o/` links are the usual cause. |
| `NOT_FOUND` | That opportunity id does not exist any more. |
| `DETAIL_FAILED` | The listing row arrived but its own page did not. The row is kept without the organiser contact. |
| `SERVER_ERROR`, `HTTP_ERROR` | Unstop answered with an error. Run it again. |
| `TIME_LIMIT` | The 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, `TIME_LIMIT` included: a run the time limit stopped before any opportunity came back still ends as succeeded, with an amber status message.

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.** 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.
- **City matching happens 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.**
- **Mostly India.**
- 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 want | Use |
|---|---|
| Hackathons, competitions, internships and jobs from Unstop | This one |
| Internships and fresher jobs in India, with typed stipends | [Internshala Scraper](https://apify.com/dami_studio/internshala-scraper) |
| Jobs in India by keyword and city, from Naukri | [Naukri Jobs Scraper](https://apify.com/dami_studio/naukri-jobs-scraper) |
| Tech meetups and events on Luma, by city or calendar | [Luma Events Scraper](https://apify.com/dami_studio/luma-events-scraper) |
| Every upcoming Eventbrite event in a city | [Eventbrite Events Scraper](https://apify.com/dami_studio/eventbrite-events-scraper) |
| Public LinkedIn jobs by keyword and location | [LinkedIn Jobs Scraper](https://apify.com/dami_studio/linkedin-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.

#### Can I pull a single listing I have a link to?

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?

The [API tab](https://apify.com/dami_studio/unstop-scraper/api/python) has code for Python, JavaScript and the CLI.
MCP clients like Claude and ChatGPT use `https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/unstop-scraper`;
coding assistants can load [our skill
file](https://api.apify.com/v2/key-value-stores/BTBHU3DdiuoF4JOsK/records/apify-jobs-SKILL.md). All three bill your
Apify account at the same price.

#### Is scraping Unstop legal?

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](https://blog.apify.com/is-web-scraping-legal/) 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.

# Actor input Schema

## `listing` (type: `array`):

Unstop's opportunity boards. Live counts measured on 2026-08-08: jobs 1,170 · internships 861 · competitions 275 · hackathons 111 · cultural events 43 · workshops 42 · quizzes 38 · hiring challenges 28 · conferences 17 · scholarships 6. Two boards are supergroups: 'Competitions' (275) also carries all 111 hackathons and all 38 quizzes, and 'all' (377) is Competitions plus workshops, conferences and cultural events, it does NOT include jobs, internships or scholarships. Pick several and each is walked in turn; every row carries a plain 'kind' field (hackathon, competition, quiz, internship, job, scholarship, workshop, conference, cultural-event) so duplicates are easy to see.

## `searchQueries` (type: `array`):

Free-text searches, exactly as you would type them into Unstop's search box: a topic ("machine learning"), a technology ("blockchain"), or an organiser ("Flipkart"). Each keyword is run separately against every board you selected. Leave empty to take everything that matches the filters below.

## `startUrls` (type: `array`):

Paste full Unstop opportunity URLs, for example https://unstop.com/hackathons/evil-corp-ctf-v2-1733381, or just the numeric id (1733381). Each is fetched directly with full detail, including the organiser's contact email. Short unstop.com/o/XXXX links do not carry the id and are not supported.

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

Live = registration is open right now. Expired = the deadline has passed (that archive is large: 5,893 hackathons against 111 live). Closed = the organiser closed registration early. Anything else is refused, because Unstop answers HTTP 200 with the ENTIRE archive for a status it does not recognise.

## `category` (type: `string`):

Unstop's domain taxonomy. These 17 values are the complete verified set: 150+ other plausible slugs ("marketing", "data-science", "case-study", "web-development") were tested and every one of them is silently ignored, returning the whole unfiltered corpus. Only the values in this list actually filter anything.

## `region` (type: `string`):

Online events run remotely; offline events have a venue and fill in city, state and country. Measured on 2026-08-08: 106 of the 275 live competitions are offline, held in cities such as Pune, Indore and Guwahati.

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

Indian cities such as "Pune", "Delhi", "Bangalore", "Mumbai". Matched against each row's city and state. Unstop has no working city filter, so this is applied here after the rows arrive, and rows dropped by it are NEVER charged for. Best combined with "In person only".

## `workMode` (type: `string`):

How the role is worked. Measured on 2026-08-08 across 861 live internships: 441 work-from-home. Ignored on competition-style boards.

## `employmentType` (type: `string`):

Full time, part time or contract. Measured on 2026-08-08 across 1,170 live jobs: 1,152 full time, 5 part time.

## `paidOnly` (type: `string`):

Measured on 2026-08-08: 630 of 861 live internships are paid, the rest are explicitly unpaid. Careful. Unstop treats any value it does not recognise as "paid", so only these two are allowed through.

## `workingDays` (type: `string`):

Measured on 2026-08-08: 799 of 1,170 live jobs are 5 days a week.

## `eligibleFor` (type: `string`):

Unstop's own eligibility buckets. Measured on 2026-08-08 across 861 live internships: 515 are open to freshers. Across 1,170 live jobs: 992 to working professionals, 32 to college students.

## `postedWithinDays` (type: `string`):

Only opportunities published in the last N days. Measured on 2026-08-08: 512 of 861 live internships were posted in the past week.

## `teamSize` (type: `string`):

Solo entries, pairs, or teams of three and up. Only meaningful on competition-style boards; on jobs it returns nothing.

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

Free to enter, or a paid entry. Only meaningful on competition-style boards.

## `skill` (type: `string`):

One skill tag, spelled the way Unstop spells it, this one IS case sensitive. "Python" returned 93 live jobs on 2026-08-08; "python" returned 0.

## `sortBy` (type: `string`):

Newest first is Unstop's default. Prize money and stipend/salary sort by the published figure; opportunities with no figure sink to the bottom.

## `sortDirection` (type: `string`):

Which end of the sort to start from. Only used when "Sort by" is set.

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

Stop after this many opportunities across every board and keyword. You are charged per opportunity returned, so this is your spending cap. Unstop lets any single search reach its first 10,000 results; past that, split the run with a domain, a status or a keyword.

## `includeDetails` (type: `boolean`):

Reads each opportunity's own page for the organiser's contact email and phone, the round schedule, the start date and the live participant count. It costs one extra request per row (about 100 ms) and nothing extra in money. Turn it off for the fastest possible listing-only run.

## `includeDescriptionHtml` (type: `boolean`):

Every row already carries descriptionText, the plain-text version. Switch this on to also keep descriptionHtml, the organiser's original markup. It makes the dataset roughly three times larger.

## `detailConcurrency` (type: `integer`):

How many opportunity pages to read at once when "Fetch the organiser's contact details" is on.

## `egressMode` (type: `string`):

Leave this on Automatic. The last option is the same as Automatic; it stays so inputs saved with it keep running.

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

Optional. Supply your own proxy URLs here and they are used for every request instead of the routes above.

## Actor input object example

```json
{
  "listing": [
    "hackathons",
    "competitions"
  ],
  "searchQueries": [
    "machine learning",
    "fintech"
  ],
  "startUrls": [
    "https://unstop.com/hackathons/evil-corp-ctf-v2-1733381"
  ],
  "status": "open",
  "category": "",
  "region": "",
  "cities": [
    "Pune",
    "Bangalore"
  ],
  "workMode": "",
  "employmentType": "",
  "paidOnly": "",
  "workingDays": "",
  "eligibleFor": "",
  "postedWithinDays": "",
  "teamSize": "",
  "entryFee": "",
  "skill": "Python",
  "sortBy": "",
  "sortDirection": "desc",
  "maxItems": 50,
  "includeDetails": true,
  "includeDescriptionHtml": false,
  "detailConcurrency": 8,
  "egressMode": "auto",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One row per opportunity in the default dataset: title, organiser, type, eligibility, registration deadline, prize money, stipend or salary, participant count, online or offline location and the opportunity URL. Empty or blocked runs return a single uncharged row instead.

# 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 = {
    "listing": [
        "hackathons"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/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 = {
    "listing": ["hackathons"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/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 '{
  "listing": [
    "hackathons"
  ],
  "maxItems": 50
}' |
apify call dami_studio/unstop-scraper --silent --output-dataset

```

## MCP server setup

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