# YouTube Scraper: Videos, Channels, Comments & Shorts (`stratumics/youtube-scraper`) Actor

Get YouTube videos from searches, channels, playlists and links with exact views, likes, comment counts, dates and tags, plus channel profiles and comments. Monitor channels for new videos.

- **URL**: https://apify.com/stratumics/youtube-scraper.md
- **Developed by:** [Stratum ICS](https://apify.com/stratumics) (community)
- **Categories:** Videos, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

**YouTube Scraper** collects videos from **YouTube search results, channels, playlists and video links**, with exact view counts, likes, comment counts, publish dates, durations, tags and descriptions. It also saves **YouTube channel profiles** (subscribers, total views, video count, join date, country, links) and **YouTube comments** with replies, and its monitoring mode returns only the videos a channel posted since your last run.

It works as a **YouTube API alternative** without an API key, quota or login: you get clean rows from [YouTube](https://www.youtube.com) in JSON, CSV or Excel, and you pay only for the results you keep.

### Why use this YouTube Scraper?

- **Four inputs in one tool.** Search terms, channels (any link form or @handle), single videos and playlists, in the same run.
- **Exact numbers.** Search results come with exact view counts. Turn on video details to get exact likes, the exact comment count and the publish time to the second for every video.
- **Channel profiles.** One row per channel with subscribers, exact total views, exact video count, join date, country, description, external links, avatar and banner.
- **Comments and replies.** Top or newest first, with likes, reply counts, and pinned and hearted marks. Replies come right after their comment.
- **Shorts and live streams.** Read a channel's Videos, Shorts and Live tabs, or search for Shorts only.
- **Monitoring.** Run it on a schedule with "Only new videos" on, and each run returns only what the channels posted since the last one.
- **Date cut-off that really stops.** Set "Only videos newer than" and channels stop reading at the first older video, with dates near the cut-off checked exactly.
- **YouTube's own filters.** Upload date, type (videos, Shorts, channels, playlists), duration and view-count sort, in any language and country.
- **No proxy needed.** It reads YouTube's own JSON data directly. If YouTube starts refusing requests, it moves just those requests to Apify datacenter proxy (part of every Apify plan) by itself.
- **Fair pricing.** You pay per video, per comment and per channel profile, and video details are an option you pay for only when you turn them on.

Use it for influencer and competitor research, brand monitoring, content and SEO research, market studies, lead lists of creators, and training or evaluation datasets.

### What data can you get from YouTube?

| Field | Example | Notes |
|---|---|---|
| `title`, `url`, `videoId` | I'll Save You Time: Buy the iPhone 17 | Watch link, or a /shorts/ link for Shorts |
| `viewCount` | 580392 | Exact in searches and with details |
| `likeCount` | 10879 | With video details |
| `commentCount` | 834 | With details or comments |
| `publishedAt` | 2026-08-08T12:57:22.000Z | Exact with details, otherwise from "2 months ago" |
| `durationSeconds` | 213 | Video length |
| `channelName`, `channelHandle`, `channelId`, `channelUrl` | Andrew Clare, @andrewclare | Who posted it |
| `subscriberCount` | 114000 | YouTube rounds this itself |
| `description`, `descriptionLinks`, `hashtags`, `tags`, `category` | Education | Full description and links with details |
| `isShort`, `isLive`, `isUpcoming` | false | Shorts, live now, scheduled |
| `thumbnailUrl` | https://i.ytimg.com/vi/... | Largest thumbnail |
| `searchQuery`, `sourceType`, `sourceInput`, `position` | iphone 17 review, search, 4 | Where the row came from and its rank |

Channel rows add `videoCount`, `viewCount` (total views), `joinedDate`, `country`, `links`, `avatarUrl` and `bannerUrl`. Comment rows have `author`, `authorChannelId`, `text`, `likes`, `publishedAt`, `isReply`, `parentCommentId`, `replyCount`, `isPinned` and `isHearted`. Every row has a `type` field (video, channel, comment or playlist) and a `scrapedAt` time.

### How to scrape YouTube

1. Open YouTube Scraper and click **Try for free** (an Apify account is free to create).
2. Add one or more **search terms**, **channels**, **video links** or **playlist links**.
3. Set **Maximum results per input** (50 by default).
4. Optionally pick search filters, channel tabs, video details, comments or a date cut-off.
5. Click **Start** and wait for the run to finish: 1,000 videos from searches and channels take under a minute, and about five minutes with full details.
6. Download the results as JSON, CSV, Excel or HTML, or read them through the API.

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

You pay per result, and Apify bills it with your usage:

| What | Price |
|---|---|
| Video (from a search, channel tab, playlist or video link) | $0.50 per 1,000 |
| Video details on top (likes, comment count, exact date, full description, tags) | $1.00 per 1,000 |
| Comment or reply | $0.50 per 1,000 |
| Channel profile | $0.002 each |

Examples: **1,000 videos from a search cost about $0.50**. The same 1,000 videos with full details cost $1.50. A channel profile plus its 200 newest videos costs $0.10, and 5,000 comments cost $2.50. Video links always include details, so 100 video links cost $0.15.

The Apify Free plan includes $5 of monthly credit, enough for about 10,000 search results. Each run also has a start fee of $0.0005. You can set a maximum cost per run in the run options; the scraper stops cleanly when it is reached and never charges past it.

### Input

See the **Input** tab for every option. The main ones:

- **Search terms**, **Channels**, **Video links**, **Playlist links**: one per line. A copied YouTube search link keeps its filters, and a link to one channel tab (youtube.com/@name/shorts) reads only that tab.
- **Maximum results per input**: per search term, per channel tab and per playlist. Set 0 with channels to get only the channel profiles.
- **Search filters**: what to search for, upload date, duration and sort order.
- **Channel tabs**: Videos, Shorts and Live.
- **Get full video details**, **Get comments**, **Maximum comments per video**, **Comment order**, **Include replies**.
- **Only videos newer than**: a date (2026-10-01) or a relative value (7 days).
- **Only new videos (monitoring)** and **Monitor name**.
- **Language** and **Country**.

```json
{
    "searchQueries": ["iphone 17 review"],
    "channels": ["@mkbhd"],
    "videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
    "maxResultsPerInput": 50,
    "includeVideoDetails": true,
    "includeComments": true,
    "maxCommentsPerVideo": 100
}
```

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. These rows come from a real run (long values trimmed).

A video from a search, with details:

```json
{
    "type": "video",
    "videoId": "wCEMOBUTL98",
    "url": "https://www.youtube.com/watch?v=wCEMOBUTL98",
    "title": "I'll Save You Time: Buy the iPhone 17",
    "description": "Here's the wallpaper I used throughout the video: https://andrewjclare.gumroad.com/l/glass ...",
    "channelName": "Andrew Clare",
    "channelId": "UCK7xdFCloKoUGFMGAxRhjCA",
    "channelHandle": "@andrewclare",
    "channelUrl": "https://www.youtube.com/@andrewclare",
    "channelIsVerified": true,
    "subscriberCount": 114000,
    "viewCount": 580392,
    "likeCount": 10879,
    "commentCount": 834,
    "publishedAt": "2026-08-08T12:57:22.000Z",
    "publishedTimeText": "2 months ago",
    "durationSeconds": 213,
    "isShort": false,
    "isLive": false,
    "isUpcoming": false,
    "thumbnailUrl": "https://i.ytimg.com/vi/wCEMOBUTL98/hq720.jpg",
    "tags": null,
    "category": "Education",
    "hashtags": [],
    "descriptionLinks": ["https://andrewjclare.gumroad.com/l/glass", "https://bit.ly/4dm3Ah0", "https://www.keychron.com/products/key"],
    "detailsFetched": true,
    "sourceType": "search",
    "searchQuery": "iphone 17 review",
    "sourceTab": null,
    "sourceInput": "iphone 17 review",
    "position": 4,
    "scrapedAt": "2026-10-18T01:10:14.020Z"
}
```

A channel profile:

```json
{
    "type": "channel",
    "channelId": "UCBJycsmduvYEL83R_U4JriQ",
    "channelName": "Marques Brownlee",
    "channelHandle": "@mkbhd",
    "channelUrl": "https://www.youtube.com/@mkbhd",
    "channelIsVerified": true,
    "subscriberCount": 21400000,
    "videoCount": 1859,
    "viewCount": 5784034004,
    "joinedDate": "2008-03-21",
    "country": "United States",
    "links": [{ "title": "Twitter", "url": "http://twitter.com/MKBHD" }, { "title": "Instagram", "url": "http://instagram.com/MKBHD" }],
    "avatarUrl": "https://yt3.googleusercontent.com/qu4TmIaYUlS41-dJ9gZ7DUR3nilvmB5_11i6OKSdvNnBNiyOusZP1bMN6ICnuxtjFBb6ioKgRQ=s900-c-k-c0x00ffffff-no-rj",
    "sourceType": "channel",
    "sourceInput": "@mkbhd",
    "scrapedAt": "2026-10-18T01:10:11.201Z"
}
```

A comment:

```json
{
    "type": "comment",
    "videoId": "jNQXAC9IVRw",
    "commentId": "UgzuC3zzpRZkjc5Qzsd4AaABAg",
    "parentCommentId": null,
    "author": "@SanDiegoZoo",
    "authorChannelId": "UCC5NfQ6Mf0dq_eEwv4P_hWA",
    "text": "We're so honored that the first ever YouTube video was filmed here!",
    "likes": 4800000,
    "publishedAt": "2020-10-18T01:51:49.786Z",
    "publishedTimeText": "6 years ago",
    "isReply": false,
    "replyCount": 986,
    "isPinned": true,
    "isHearted": true
}
```

The **SUMMARY** record in the run's key-value store lists every input with its row count and any problem, such as a removed video or a channel without a Shorts tab.

### How to monitor YouTube channels for new videos

1. Add your channels and turn on **Only new videos (monitoring)**.
2. Give the monitor a name, for example `daily-tech`.
3. Run it once: it returns the newest videos up to your maximum, saves each channel profile, and remembers them.
4. Schedule the same input (hourly or daily) in Apify. Each run returns only videos posted since the previous one and does not repeat the profiles, so a quiet day costs almost nothing.

Upcoming premieres are left out until they go live. Use one monitor name per schedule. To watch a search term, schedule it with **Only videos newer than** set to the schedule's interval (for example "1 day").

### Tips

- **Keep costs down**: leave video details off when list data is enough; set **Maximum comments per video**; use **Only videos newer than** so channels stop early.
- **Exact numbers**: search results already have exact views. Channel and playlist lists show YouTube's rounded views ("6.9M") until you turn on details.
- **Newest first**: YouTube no longer sorts searches by upload date. "Newest first" reads the results and saves them newest first, so combine it with an upload-date filter.
- **Most viewed Shorts**: YouTube no longer sorts Shorts by view count. With **Search type** Shorts, "View count" reads the results (up to twice your limit) and saves the most viewed first.
- **Big searches**: YouTube stops a search at about 500 to 600 results. Split broad topics into several narrower terms.
- **Other languages**: titles come in the chosen language when the creator translated them. Each video then takes one extra small request to read its exact date and views.

### Integrations

- **API**: start runs and read results over the [Apify API](https://docs.apify.com/api/v2); the API tab shows ready code.
- **Python**: `pip install apify-client`, then
  ```python
  from apify_client import ApifyClient
  client = ApifyClient("<YOUR_API_TOKEN>")
  run = client.actor("stratumics/youtube-scraper").call(run_input={"searchQueries": ["iphone 17 review"], "maxResultsPerInput": 100})
  for item in client.dataset(run["defaultDatasetId"]).iterate_items():
      print(item["title"], item["viewCount"])
  ```
- **JavaScript**: `npm install apify-client`, then
  ```javascript
  import { ApifyClient } from 'apify-client';
  const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
  const run = await client.actor('stratumics/youtube-scraper').call({ channels: ['@mkbhd'], maxResultsPerInput: 50 });
  const { items } = await client.dataset(run.defaultDatasetId).listItems();
  ```
- **Zapier, Make, n8n**: use the Apify app or node to run the scraper and pass new rows to Google Sheets, Slack, Airtable or your CRM.
- **AI agents**: connect your agent to this scraper through the Apify MCP server (mcp.apify.com) and let it search YouTube or read channels on demand.
- **Webhooks and schedules**: get notified when a run finishes, or run it every hour.

### FAQ

#### Is it legal to scrape YouTube?

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Comment rows include each commenter's public handle and channel id. Turn comments on only when you need them.

#### Can it get video transcripts or subtitles?

Not this Actor. Use our [YouTube Transcript Scraper](https://apify.com/stratumics/youtube-transcript-scraper) for transcripts and captions as text, timed segments, SRT or WebVTT, from videos, channels and playlists.

#### Do I need a proxy?

No. The scraper talks to YouTube directly. If YouTube refuses some requests, it sends just those through Apify datacenter proxy on its own; that proxy is part of every Apify plan. You can also pick your own proxy in the input.

#### Why are some subscriber counts and views rounded?

YouTube shows subscriber counts rounded to three digits (21.4M) everywhere, so that is the most exact figure available. Channel tabs and playlists also round views; turn on video details for the exact count.

#### Can it get dislikes?

No. YouTube hides dislike counts.

#### What happens to removed or private videos?

They are skipped, not charged, and listed in the SUMMARY record.

#### Where can I report a problem?

Open an issue on the Issues tab with your run link and we will look at it.

### Other tools from this developer

### Other tools from Stratum ICS

- [App Store Reviews Scraper](https://apify.com/stratumics/app-store-reviews-scraper): Get Apple App Store reviews with star ratings, titles, text, app versions, helpful votes and developer replies, well past Apple's 500-review limit, for any country, plus app ratings.
- [Google Maps Scraper](https://apify.com/stratumics/google-maps-scraper): Get the businesses on Google Maps for any search and area: name, address, phone, website, rating, review count, opening hours, plus emails and social profiles.
- [Google News Scraper](https://apify.com/stratumics/google-news-scraper): Get Google News articles with real publisher URLs (not Google redirects), source, date, image, author and optional full text.
- [Google Play Reviews Scraper](https://apify.com/stratumics/google-play-reviews-scraper): Get Google Play reviews with star ratings, text, app versions, thumbs-up counts, developer replies and feature ratings in any language, plus app details with installs and star histogram.
- [Google Trends Scraper](https://apify.com/stratumics/google-trends-scraper): Get Google Trends data as JSON, CSV or Excel: interest over time, interest by region and city, related queries, and trending searches by country.
- [LinkedIn Jobs Scraper](https://apify.com/stratumics/linkedin-jobs-scraper): Scrape LinkedIn jobs with full descriptions, salary ranges, seniority, job type and applicant counts.
- [Telegram Channel Scraper](https://apify.com/stratumics/telegram-channel-scraper): Get messages from public Telegram channels with views, dates, media, reactions, polls and forwards, plus channel info with exact subscriber counts.
- [Website Contact Scraper](https://apify.com/stratumics/website-contact-scraper): Turn a list of websites into one row per company with verified emails, formatted phone numbers, social profiles (LinkedIn, Facebook, Instagram, X), address and contact page.

# Actor input Schema

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

Words to search on YouTube, one per line, exactly as you would type them in the YouTube search box. A copied YouTube search link (youtube.com/results?search_query=...) works too and keeps its filters.

## `channels` (type: `array`):

Channel links or handles, one per line: @mkbhd, https://www.youtube.com/@mkbhd, a /channel/UC... link, an old /c/ or /user/ link, or a bare channel id. A link to one tab (for example youtube.com/@mkbhd/shorts) reads only that tab. Videos come newest first.

## `videoUrls` (type: `array`):

Links to single videos or Shorts (watch, youtu.be, shorts, live and embed links all work), or bare 11-character video ids. Every video link gets full details: likes, exact date, full description, tags and comment count.

## `playlistUrls` (type: `array`):

Playlist links (youtube.com/playlist?list=...) or bare playlist ids. Videos come in the playlist's own order.

## `maxResultsPerInput` (type: `integer`):

The most videos (or channels and playlists, for those search types) to save from each search term, each channel tab and each playlist. YouTube itself stops search results at about 500 to 600 per term. Set 0 with channels to get only the channel profiles. Video links are not limited by this.

## `searchType` (type: `string`):

What a search returns: videos, Shorts, channels (saved as channel profiles) or playlists.

## `uploadDate` (type: `string`):

Only videos uploaded within this period, as YouTube's filter defines it.

## `duration` (type: `string`):

Only videos of this length.

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

Relevance and view count are YouTube's own orders, except for Shorts: YouTube no longer sorts Shorts by view count, so the scraper reads them and saves the most viewed first. YouTube no longer sorts searches by upload date either, so Newest first reads the results and saves them newest first; pair it with Upload date for recent videos.

## `channelTabs` (type: `array`):

Which tabs to read for each channel: long videos, Shorts, and past or current live streams. Each tab gets up to the maximum results per input.

## `includeChannelInfo` (type: `boolean`):

Save one channel row per channel input: name, handle, id, subscribers, video count, total views, join date, country, description, links, avatar and banner.

## `includeVideoDetails` (type: `boolean`):

Open every video found by searches, channels and playlists for its like count, comment count, exact publish date and time, full description, links in the description, tags and category. Costs extra per video (see Pricing). Video links always get details.

## `includeComments` (type: `boolean`):

Save the comments of every video the run finds, each as its own row.

## `maxCommentsPerVideo` (type: `integer`):

The most comments (replies included) to save per video. 0 means every comment YouTube lists, which can be tens of thousands on popular videos, so set a limit to control cost.

## `commentsSortBy` (type: `string`):

Top comments (YouTube's default order) or newest first.

## `includeCommentReplies` (type: `boolean`):

Also save the replies under each comment. Replies count toward the maximum comments per video.

## `newerThan` (type: `string`):

Keep videos published on or after this date. Use a date (2026-10-01), an ISO date-time in UTC (2026-10-01T12:00:00Z), or a relative value such as "7 days" or "12 hours". Channels stop reading at the first older video, and dates near the cut-off are checked exactly. Searches use YouTube's upload-date filter as well. Video links are not filtered.

## `onlyNewVideos` (type: `boolean`):

For channels: return only videos that earlier runs with the same monitor name have not returned. The first run returns the newest videos up to the maximum and saves each channel profile; later runs (for example on a schedule) return only what was posted since, without repeating the profile. Upcoming premieres are left out until they go live.

## `monitorName` (type: `string`):

Name of the memory that monitoring runs share (letters, digits and hyphens). Use one name per schedule; runs with different names do not affect each other.

## `language` (type: `string`):

Language YouTube uses for titles (when creators translated them) and for its own texts. Pick one or type any YouTube language code. In languages other than English, each video's exact date and views are read with one extra small request.

## `country` (type: `string`):

Country whose YouTube you see: it changes search ranking and which videos are available. Pick one or type any two-letter country code.

## `maxConcurrency` (type: `integer`):

How many requests to YouTube run at once. The default is fast and stays under YouTube's limits; higher values finish sooner but are more likely to be refused.

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

YouTube answers Apify's servers directly, so no proxy is needed. If YouTube starts rate-limiting a run, it switches to Apify datacenter proxy on its own. Pick a proxy here only to use one from the start.

## Actor input object example

```json
{
  "searchQueries": [
    "lofi hip hop"
  ],
  "channels": [],
  "videoUrls": [],
  "playlistUrls": [],
  "maxResultsPerInput": 50,
  "searchType": "video",
  "uploadDate": "any",
  "duration": "any",
  "sortBy": "relevance",
  "channelTabs": [
    "videos"
  ],
  "includeChannelInfo": true,
  "includeVideoDetails": false,
  "includeComments": false,
  "maxCommentsPerVideo": 0,
  "commentsSortBy": "top",
  "includeCommentReplies": false,
  "newerThan": "",
  "onlyNewVideos": false,
  "monitorName": "default",
  "language": "en",
  "country": "US",
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Dataset with every video, channel, comment and playlist row.

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

Per-input counts, errors and notes for the run (key-value store record SUMMARY).

# 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 = {
    "searchQueries": [
        "lofi hip hop"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("stratumics/youtube-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 = { "searchQueries": ["lofi hip hop"] }

# Run the Actor and wait for it to finish
run = client.actor("stratumics/youtube-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 '{
  "searchQueries": [
    "lofi hip hop"
  ]
}' |
apify call stratumics/youtube-scraper --silent --output-dataset

```

## MCP server setup

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