# YouTube Scraper - Search, Videos, Channels & Playlists (`code-node-tools/youtube-scraper`) Actor

YouTube scraper to extract video metadata from channels, playlists & search. Scrape YouTube videos without API limits - get titles, views, likes, thumbnails, transcripts & more. Fast YouTube channel scraper & playlist scraper. No YouTube API key required. Export to CSV/JSON.

- **URL**: https://apify.com/code-node-tools/youtube-scraper.md
- **Developed by:** [CodeNodeTools](https://apify.com/code-node-tools) (community)
- **Categories:** Developer tools, Automation, Videos
- **Stats:** 14 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$30.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## YouTube Scraper - Extract Video Metadata from YouTube Videos, Channels & Playlists

**The most powerful YouTube scraper for extracting video data, channel information, and playlist metadata without YouTube API limits.**

### 🚀 What is YouTube Scraper?

YouTube Scraper is a fast and reliable Apify Actor that lets you **scrape YouTube videos**, **scrape YouTube channels**, and **scrape YouTube playlists** to extract comprehensive video metadata including titles, descriptions, view counts, likes, upload dates, thumbnails, and more.

#### Why Use This YouTube Video Scraper?

✅ **No API Key Required** - Scrape YouTube without YouTube Data API v3 quotas  
✅ **Scrape YouTube Videos** - Extract metadata from individual videos  
✅ **YouTube Channel Scraper** - Get all videos from any YouTube channel  
✅ **YouTube Playlist Scraper** - Extract all videos from playlists  
✅ **YouTube Title Scraper** - Bulk extract video titles for SEO research  
✅ **Fast & Reliable** - Built with Crawlee and Apify SDK  
✅ **Proxy Support** - Rotate IPs to avoid rate limiting  
✅ **Export to CSV/JSON** - Download scraped data in multiple formats

### 🎯 Use Cases

#### 1. **Scrape YouTube Videos for Content Research**

Extract video metadata to analyze trending content, popular topics, and successful video strategies in your niche.

#### 2. **YouTube Channel Scraper for Competitor Analysis**

Monitor competitor channels by scraping all their videos, tracking upload frequency, view counts, and engagement metrics.

#### 3. **YouTube Playlist Scraper for Curation**

Build databases of educational content, music playlists, or tutorial series by scraping entire YouTube playlists.

#### 4. **YouTube Title Scraper for SEO Optimization**

Analyze thousands of video titles to identify high-performing keywords and title patterns for your YouTube SEO strategy.

#### 5. **Scrape YouTube for Market Research**

Gather video data across multiple channels to understand market trends, audience preferences, and content gaps.

#### 6. **Video Metadata Extraction**

Extract thumbnails, descriptions, tags, view counts, like counts, and upload dates for comprehensive video analysis.

### 📊 What Data Can You Scrape from YouTube?

This YouTube scraper extracts:

- **Video ID** - Unique YouTube video identifier
- **Video Title** - Full video title (YouTube title scraper)
- **Video URL** - Direct link to the video
- **Video Description** - Complete video description
- **Channel Name** - Creator/channel name
- **Channel URL** - Link to the channel
- **View Count** - Number of views
- **Upload Date** - When the video was published
- **Thumbnail URL** - Video thumbnail image
- **Duration** - Video length
- **Like Count** - Number of likes (when available)
- **Comment Count** - Number of comments (when available)

### 🔧 How to Use This YouTube Scraper

#### Input Configuration

```json
{
  "inputType": "channel",
  "channelUrls": ["https://www.youtube.com/@MrBeast"],
  "videoLimit": 50,
  "videoSelection": "uploads",
  "sortBy": "newest",
  "extractThumbnails": true,
  "extractSubtitles": false,
  "extractTranscripts": false,
  "extractFormats": false,
  "extractChapters": false,
  "skipShorts": false,
  "skipLivestreams": false,
  "useProxy": true,
  "maxConcurrency": 2
}
````

#### Input Parameters

| Parameter            | Type    | Description                                             |
| -------------------- | ------- | ------------------------------------------------------- |
| `inputType`          | String  | What to scrape: "video", "channel", or "playlist"       |
| `videoUrls`          | Array   | YouTube video URLs (if inputType=video)                 |
| `channelUrls`        | Array   | YouTube channel URLs (if inputType=channel)             |
| `playlistUrls`       | Array   | YouTube playlist URLs (if inputType=playlist)           |
| `videoLimit`         | Integer | Max videos to scrape per channel/playlist (default: 50) |
| `videoSelection`     | String  | Channel tab: "uploads", "shorts", "live", "playlists"   |
| `sortBy`             | String  | Sort order: "newest", "oldest", "popular"               |
| `extractThumbnails`  | Boolean | Extract thumbnail URLs (default: true)                  |
| `extractSubtitles`   | Boolean | Extract subtitle URLs (default: false)                  |
| `extractTranscripts` | Boolean | Extract full transcripts (default: false)               |
| `extractFormats`     | Boolean | Extract video/audio formats (default: false)            |
| `extractChapters`    | Boolean | Extract video chapters (default: false)                 |
| `skipShorts`         | Boolean | Skip YouTube Shorts (default: false)                    |
| `skipLivestreams`    | Boolean | Skip livestreams (default: false)                       |
| `useProxy`           | Boolean | Use Apify proxies (default: true)                       |
| `maxConcurrency`     | Integer | Parallel processing (default: 2)                        |

### 📤 Output Example

```json
{
  "videoId": "dQw4w9WgXcQ",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "title": "Rick Astley - Never Gonna Give You Up (Official Music Video)",
  "description": "The official video for "Never Gonna Give You Up" by Rick Astley...",
  "channelName": "Official Rick Astley",
  "viewCount": "1.5B views",
  "uploadDate": "13 years ago",
  "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
  "scrapedAt": "2025-01-16T10:30:00.000Z"
}
```

### 🎬 Scrape YouTube Videos - Step by Step

#### 1. Scrape a Single YouTube Video

```json
{
  "inputType": "video",
  "videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]
}
```

#### 2. Scrape YouTube Channel (YouTube Channel Scraper)

```json
{
  "inputType": "channel",
  "channelUrls": ["https://www.youtube.com/@MrBeast"],
  "videoLimit": 100
}
```

#### 3. Scrape YouTube Playlist (YouTube Playlist Scraper)

```json
{
  "inputType": "playlist",
  "playlistUrls": [
    "https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"
  ]
}
```

#### 4. Bulk Scrape Multiple YouTube Channels

```json
{
  "inputType": "channel",
  "channelUrls": [
    "https://www.youtube.com/@Channel1",
    "https://www.youtube.com/@Channel2",
    "https://www.youtube.com/@Channel3"
  ],
  "videoLimit": 50
}
```

### 🎬 Scrape YouTube Videos - Step by Step

#### 1. Scrape a Single YouTube Video

```json
{
  "startUrls": [{ "url": "https://www.youtube.com/watch?v=VIDEO_ID" }]
}
```

#### 2. Scrape YouTube Channel (YouTube Channel Scraper)

```json
{
  "startUrls": [{ "url": "https://www.youtube.com/@ChannelName" }],
  "maxVideos": 100
}
```

#### 3. Scrape YouTube Playlist (YouTube Playlist Scraper)

```json
{
  "startUrls": [{ "url": "https://www.youtube.com/playlist?list=PLAYLIST_ID" }]
}
```

#### 4. Bulk Scrape Multiple YouTube Channels

```json
{
  "startUrls": [
    { "url": "https://www.youtube.com/@Channel1" },
    { "url": "https://www.youtube.com/@Channel2" },
    { "url": "https://www.youtube.com/@Channel3" }
  ],
  "maxVideos": 50
}
```

### 🔍 YouTube Scraper vs YouTube API

| Feature                | YouTube Scraper | YouTube API v3      |
| ---------------------- | --------------- | ------------------- |
| **API Key Required**   | ❌ No           | ✅ Yes              |
| **Daily Quota Limits** | ❌ No limits    | ✅ 10,000 units/day |
| **Cost**               | Pay per scrape  | Free tier limited   |
| **Metadata Richness**  | ⭐⭐⭐⭐⭐      | ⭐⭐⭐⭐            |
| **Bulk Operations**    | ✅ Unlimited    | ⚠️ Quota limited    |
| **Setup Complexity**   | Easy            | Requires API setup  |

### 💡 Pro Tips for Scraping YouTube

1. **Use Proxies** - Enable proxy rotation to avoid rate limiting when scraping large channels
2. **Respect Rate Limits** - Add delays between requests to avoid being blocked
3. **Start Small** - Test with `maxVideos: 10` before scraping entire channels
4. **Export Data** - Download results as CSV for analysis in Excel or Google Sheets
5. **Monitor Runs** - Check Actor logs to ensure successful scraping

### 🛠️ Technical Details

- **Core Library**: yt-dlp (Python) - No API keys required
- **Transcript Extraction**: youtube-transcript-api - Enhanced transcript support
- **Data Processing**: pandas - CSV export and data manipulation
- **SDK**: Apify SDK (Python)
- **Runtime**: Python 3.11+
- **Proxy Support**: Yes (Apify Proxy recommended)
- **Export Formats**: JSON, CSV, Excel, XML, RSS
- **Scheduling**: Run on schedule (hourly, daily, weekly)
- **Metadata Fields**: 40+ fields including views, likes, duration, thumbnails, transcripts

#### Technology Stack Benefits

✅ **yt-dlp**: Extracts 40+ metadata fields, handles playlists/channels natively, built-in proxy support\
✅ **youtube-transcript-api**: Reliable transcript extraction (manual + auto-generated)\
✅ **pandas**: Efficient data processing and CSV export capabilities\
✅ **No API Keys**: Bypass YouTube API quota limits completely

### 📚 Related YouTube Scrapers

- **YouTube Video Scraper** - Extract individual video metadata
- **YouTube Channel Scraper** - Scrape all videos from channels
- **YouTube Playlist Scraper** - Extract playlist contents
- **YouTube Title Scraper** - Bulk extract video titles
- **YouTube Comment Scraper** - Extract video comments (coming soon)
- **YouTube Search Scraper** - Scrape search results (coming soon)

### 🚦 Getting Started

1. **Sign up** for a free Apify account
2. **Open** this YouTube Scraper Actor
3. **Configure** your input (add YouTube URLs)
4. **Click** "Start" to scrape YouTube
5. **Download** your scraped data in CSV or JSON

### 🔗 Useful Links

- [Apify Platform](https://apify.com)
- [Apify SDK Documentation](https://docs.apify.com/sdk/js)
- [Crawlee Documentation](https://crawlee.dev)
- [YouTube Scraping Guide](https://blog.apify.com/scraping-youtube/)

### 📞 Support

Need help scraping YouTube? Contact us:

- **Email**: support@apify.com
- **Discord**: [Join Apify Discord](https://discord.com/invite/jyEM2PRvMU)
- **Documentation**: [docs.apify.com](https://docs.apify.com)

### 📄 License

ISC License - Free to use and modify

***

**Keywords**: youtube scraper, youtube channel scraper, youtube video scraper, scrape youtube video, scrape youtube videos, scrape youtube, youtube playlist scraper, youtube title scraper, youtube data extractor, youtube metadata scraper, youtube api alternative, scrape youtube without api, youtube scraping tool, youtube video data, youtube analytics scraper

**Start scraping YouTube now!** 🎥

# Actor input Schema

## `inputType` (type: `string`):

What to scrape metadata from

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

YouTube video URLs or IDs (if inputType=video)

## `channelUrls` (type: `array`):

YouTube channel URLs, handles, or IDs (if inputType=channel)

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

YouTube playlist URLs or IDs (if inputType=playlist)

## `searchTerms` (type: `array`):

Search keywords to find videos (if inputType=search)

## `videoLimit` (type: `integer`):

Max videos to scrape from channel/playlist/search

## `videoSelection` (type: `string`):

Which tab to scrape from channel

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

How to sort videos before limiting

## `extractThumbnails` (type: `boolean`):

Extract thumbnail URLs (all resolutions)

## `extractSubtitles` (type: `boolean`):

Extract subtitle/caption URLs

## `extractTranscripts` (type: `boolean`):

Extract full video transcripts

## `extractFormats` (type: `boolean`):

Extract available video/audio formats

## `extractChapters` (type: `boolean`):

Extract video chapters/timestamps

## `skipShorts` (type: `boolean`):

Skip YouTube Shorts (videos < 60 seconds)

## `skipLivestreams` (type: `boolean`):

Skip past/upcoming livestreams

## `useProxy` (type: `boolean`):

Use Apify proxies (highly recommended)

## `proxyType` (type: `string`):

Type of Apify proxy to use

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

Parallel video processing

## Actor input object example

```json
{
  "inputType": "channel",
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "channelUrls": [
    "https://www.youtube.com/@MrBeast"
  ],
  "searchTerms": [
    "apify tutorial"
  ],
  "videoLimit": 50,
  "videoSelection": "uploads",
  "sortBy": "newest",
  "extractThumbnails": true,
  "extractSubtitles": false,
  "extractTranscripts": false,
  "extractFormats": false,
  "extractChapters": false,
  "skipShorts": false,
  "skipLivestreams": false,
  "useProxy": true,
  "proxyType": "RESIDENTIAL",
  "maxConcurrency": 2
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "videoUrls": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    ],
    "channelUrls": [
        "https://www.youtube.com/@MrBeast"
    ],
    "searchTerms": [
        "apify tutorial"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("code-node-tools/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 = {
    "videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
    "channelUrls": ["https://www.youtube.com/@MrBeast"],
    "searchTerms": ["apify tutorial"],
}

# Run the Actor and wait for it to finish
run = client.actor("code-node-tools/youtube-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "channelUrls": [
    "https://www.youtube.com/@MrBeast"
  ],
  "searchTerms": [
    "apify tutorial"
  ]
}' |
apify call code-node-tools/youtube-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=code-node-tools/youtube-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Scraper - Search, Videos, Channels & Playlists",
        "description": "YouTube scraper to extract video metadata from channels, playlists & search. Scrape YouTube videos without API limits - get titles, views, likes, thumbnails, transcripts & more. Fast YouTube channel scraper & playlist scraper. No YouTube API key required. Export to CSV/JSON.",
        "version": "0.0",
        "x-build-id": "nvFN6QLsAISriwfRe"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/code-node-tools~youtube-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-code-node-tools-youtube-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/code-node-tools~youtube-scraper/runs": {
            "post": {
                "operationId": "runs-sync-code-node-tools-youtube-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/code-node-tools~youtube-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-code-node-tools-youtube-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "inputType": {
                        "title": "Input Type",
                        "enum": [
                            "video",
                            "channel",
                            "playlist",
                            "search"
                        ],
                        "type": "string",
                        "description": "What to scrape metadata from",
                        "default": "channel"
                    },
                    "videoUrls": {
                        "title": "Video URLs",
                        "type": "array",
                        "description": "YouTube video URLs or IDs (if inputType=video)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "channelUrls": {
                        "title": "Channel URLs",
                        "type": "array",
                        "description": "YouTube channel URLs, handles, or IDs (if inputType=channel)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "playlistUrls": {
                        "title": "Playlist URLs",
                        "type": "array",
                        "description": "YouTube playlist URLs or IDs (if inputType=playlist)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchTerms": {
                        "title": "Search Terms",
                        "type": "array",
                        "description": "Search keywords to find videos (if inputType=search)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "videoLimit": {
                        "title": "Video Limit",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Max videos to scrape from channel/playlist/search",
                        "default": 50
                    },
                    "videoSelection": {
                        "title": "Video Selection",
                        "enum": [
                            "all",
                            "uploads",
                            "shorts",
                            "live",
                            "playlists"
                        ],
                        "type": "string",
                        "description": "Which tab to scrape from channel",
                        "default": "uploads"
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "newest",
                            "oldest",
                            "popular"
                        ],
                        "type": "string",
                        "description": "How to sort videos before limiting",
                        "default": "newest"
                    },
                    "extractThumbnails": {
                        "title": "Extract Thumbnails",
                        "type": "boolean",
                        "description": "Extract thumbnail URLs (all resolutions)",
                        "default": true
                    },
                    "extractSubtitles": {
                        "title": "Extract Subtitles",
                        "type": "boolean",
                        "description": "Extract subtitle/caption URLs",
                        "default": false
                    },
                    "extractTranscripts": {
                        "title": "Extract Transcripts",
                        "type": "boolean",
                        "description": "Extract full video transcripts",
                        "default": false
                    },
                    "extractFormats": {
                        "title": "Extract Formats",
                        "type": "boolean",
                        "description": "Extract available video/audio formats",
                        "default": false
                    },
                    "extractChapters": {
                        "title": "Extract Chapters",
                        "type": "boolean",
                        "description": "Extract video chapters/timestamps",
                        "default": false
                    },
                    "skipShorts": {
                        "title": "Skip Shorts",
                        "type": "boolean",
                        "description": "Skip YouTube Shorts (videos < 60 seconds)",
                        "default": false
                    },
                    "skipLivestreams": {
                        "title": "Skip Livestreams",
                        "type": "boolean",
                        "description": "Skip past/upcoming livestreams",
                        "default": false
                    },
                    "useProxy": {
                        "title": "Use Proxy",
                        "type": "boolean",
                        "description": "Use Apify proxies (highly recommended)",
                        "default": true
                    },
                    "proxyType": {
                        "title": "Proxy Type",
                        "enum": [
                            "RESIDENTIAL",
                            "DATACENTER"
                        ],
                        "type": "string",
                        "description": "Type of Apify proxy to use",
                        "default": "RESIDENTIAL"
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Parallel video processing",
                        "default": 2
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
