# YouTube Channel Email Scraper (`lurkapi/youtube-channel-email-scraper`) Actor

Extract business emails, contact info, and social media links from YouTube channel About pages. Supports @handles, channel URLs, and channel IDs.

- **URL**: https://apify.com/lurkapi/youtube-channel-email-scraper.md
- **Developed by:** [LurkAPI](https://apify.com/lurkapi) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 7 total users, 3 monthly users, 54.5% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 email founds

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/platform/actors/running/actors-in-store#pay-per-event

## 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 Channel Email Scraper

Find contact emails for any YouTube creator. Paste channel links, or type a topic to discover creators automatically. Get back emails, social profiles, and channel stats for every channel.

### 🎬 What it does

1. **Find emails everywhere**: Scans the channel description, video descriptions, pinned comments, and even the creator's personal website to find email addresses
2. **Search by keyword**: Type a topic like "fitness" or "AI tools" and the scraper finds relevant YouTube channels for you, then extracts their contact info
3. **Collect social profiles**: Gets every social link from the channel (Instagram, Twitter/X, LinkedIn, TikTok, Facebook, Discord, Telegram, and more)
4. **Detect hidden business emails**: Some creators have a business email on YouTube that is only visible if you are signed into Google. The scraper flags these channels so you know the email exists, even if it can't extract it yet
5. **Validate emails (optional)**: Checks if an email address is real by verifying the domain's mail server (MX records), and flags throwaway email services like Mailinator or Tempmail
6. **Ready to export**: All data is structured for CRM import. Subscriber counts are numbers (not "1.2M"), dates are in YYYY-MM-DD format, and social links have their own fields

### 📋 How to use it

#### Step 1: Choose how to find channels

**Option A: Paste channel links.** Add YouTube channel URLs, @handles, channel IDs, or even video URLs to the input. You can mix formats:

- `@mkbhd`
- `https://www.youtube.com/channel/UCxxxxxxxxxxxxxxxxxxxxxx`
- `UCxxxxxxxxxxxxxxxxxxxxxx`
- `https://www.youtube.com/watch?v=dQw4w9WgXcQ` (the scraper figures out which channel uploaded the video)

**Option B: Search by keyword.** Type a topic in the "Keyword Search" field. For example, "vegan recipes" or "SaaS marketing". The scraper searches YouTube, finds channels that match your topic, and extracts their contact info. You can search for multiple topics at once. Use the "Max Channels Per Search" setting to control how many channels are processed per keyword (default is 20, max is 500). Lower it to save costs, raise it to discover more creators.

You can use both options together. Process up to 500 channels per run.

#### Step 2: Configure options

- **Scan Linked Websites** (on by default): The scraper visits websites linked on the channel's About page and looks for email addresses. It also checks common pages like /contact and /about on those websites. This catches emails that creators put on their personal site instead of YouTube. You can turn this off if you only want emails found directly on YouTube.
- **Validate Emails** (on by default): Runs two checks on every email found. First, it verifies the email domain has working mail servers (MX records). Second, it flags disposable/throwaway email services. Each email gets a validation result: `valid`, `invalid`, or `disposable`. This is a paid feature, charged per email validated.
- **Concurrency**: How many channels to process at the same time. Default is 3, maximum is 5.

#### Step 3: Run and get results

Click **Start**. Each channel takes about 2 to 5 seconds.

Results show up in the Output tab with three views:
- **Overview**: Emails, validation status, and channel stats at a glance
- **Contacts & Social Links**: Every social profile and website link, one column per platform
- **Channel Metadata**: Subscriber counts, view counts, join dates, country

### 🔍 How website scanning works

Many YouTube creators don't put their email in their YouTube description. Instead, they link to their personal website, where the email is on a contact page.

When "Scan Linked Websites" is turned on, the scraper:
1. Looks at every website linked on the channel's About page
2. Visits each website and scans it for email addresses
3. Also checks /contact, /contact-us, /about, and /about-us pages on the same site
4. Skips social media links (Instagram, Twitter, etc.) since those won't have creator emails

Every email in the results includes a `source` field so you know exactly where it came from:
- `"description"`: found in the YouTube channel description
- `"channel-page"`: found in a video description on the channel
- `"pinned-comment"`: found in the pinned comment of the latest video
- `"website:https://example.com"`: found on the creator's linked website

### 🔎 How keyword search works

Instead of providing specific channel URLs, you can type a topic and let the scraper find channels for you.

**Example**: You type "personal finance" in the Keyword Search field. The scraper:
1. Searches YouTube for "personal finance"
2. Collects channels from the search results (both channels and channels that uploaded matching videos)
3. Removes duplicates
4. Extracts emails and contact info from each channel

This is perfect for building outreach lists when you don't already have a list of channels. You control how many channels are processed per search with the "Max Channels Per Search" setting (default 20, max 500). Each search query is charged separately.

### 🔒 What are hidden business emails?

Some YouTube creators set up a business email through YouTube's built-in feature. When they do, a "View email address" button appears on their About page. But YouTube hides this email behind a verification wall: you have to be signed into Google and sometimes solve a CAPTCHA to see it.

The scraper detects when a channel has this hidden email and flags it with `hasHiddenEmail: true`. The status message explains what's going on:

> "No public email found. This channel has a business email, but YouTube hides it behind a verification wall. You can see it by visiting the channel's About page and clicking 'View email address' while signed into Google. We are building automatic reveal for a future update."

We are actively building a feature to reveal these emails automatically. It will be available as an optional toggle soon.

### 📊 Output fields (35 fields)

#### Channel metadata
| Field | Type | Description |
|-------|------|-------------|
| `channelName` | String | Display name |
| `channelHandle` | String | @handle (e.g., @mkbhd) |
| `channelId` | String | Unique YouTube channel ID |
| `channelUrl` | String | Channel URL |
| `description` | String | Channel description |
| `subscriberCount` | Integer | Subscriber count (e.g., 20900000) |
| `viewCount` | Integer | Total view count |
| `videoCount` | Integer | Total videos |
| `country` | String | Channel country |
| `joinedDate` | String | Join date (YYYY-MM-DD) |
| `thumbnailUrl` | String | Profile image URL |
| `isVerified` | Boolean | Whether the channel has a YouTube verification badge |

#### Email fields
| Field | Type | Description |
|-------|------|-------------|
| `youtubeEmail` | String/null | Email found in the YouTube description only |
| `youtubeEmailValidation` | String/null | `valid`, `invalid`, or `disposable` (only shown when youtubeEmail exists and validation is enabled) |
| `emails` | Array | All emails with `source` and `validation` fields |
| `hasEmail` | Boolean | Whether any email was found |
| `hasHiddenEmail` | Boolean | Whether a hidden business email exists behind YouTube's verification |

#### Social link fields
| Field | Type | Description |
|-------|------|-------------|
| `websiteUrl` | String/null | Primary website URL |
| `instagramUrl` | String/null | Instagram profile URL |
| `xUrl` | String/null | X (Twitter) profile URL |
| `linkedinUrl` | String/null | LinkedIn profile URL |
| `facebookUrl` | String/null | Facebook page URL |
| `tiktokUrl` | String/null | TikTok profile URL |
| `discordUrl` | String/null | Discord server URL |
| `telegramUrl` | String/null | Telegram channel URL |
| `hasLinks` | Boolean | Whether the channel has external links |
| `primaryAggregatorUrl` | String/null | Link aggregator URL (Linktree, Beacons, etc.) |
| `socialLinks` | Object | All social links grouped by platform |
| `allLinks` | Array | All links with title, URL, and type |

#### Meta
| Field | Type | Description |
|-------|------|-------------|
| `status` | String | Success, error message, or hidden email explanation |
| `scrapedAt` | String | ISO 8601 timestamp of extraction |
| `inputUrl` | String | Original input URL/handle |
| `error` | String/null | Error details if the channel failed |

### 🌐 Proxy settings

By default, the scraper uses Apify's datacenter proxies.

- **Automatic (default)**: Apify picks the best proxy for you
- **Datacenter**: Fast and cheap. Works for most channels.
- **Residential**: Use this if you get frequent blocks or rate limit errors, especially with large batches
- **Own proxies**: Provide your own proxy URLs
- **No proxy**: Disable proxies entirely

### 💰 Pricing

You only pay for results. Channels where no email is found are free.

- **Email found**: Charged once per email address found (from any source)
- **Email validated** (optional): Charged once per email when validation is enabled
- **Keyword search**: Charged once per search query

**Example**: You process 100 channels. 30 of them have at least one email. You have email validation turned on.
- 30 email charges (one per email found)
- 30 validation charges (one per email validated)
- Total: 60 charges

If some channels have multiple emails, you pay per email. A channel with 2 emails counts as 2 extraction charges and 2 validation charges.

### ⚠️ Known limitations

- **Hidden business emails** behind YouTube's verification wall cannot be extracted automatically yet. The scraper flags them with `hasHiddenEmail: true` so you know they exist. Automatic reveal is coming soon.
- **Large batches** (300+ channels) may encounter YouTube rate limits. If this happens, switch to residential proxies.
- **Email validation** checks if the domain has working mail servers (MX records). It does not verify that the specific email address or mailbox exists.
- **Deleted or private channels** return an error status and are not charged.

### ❓ FAQ

**Why did a channel show "No email found"?**
The channel has no email in their description, video descriptions, or linked websites. Check the `hasHiddenEmail` field: if it says `true`, the channel does have a business email, but YouTube hides it behind a sign-in wall. See the "What are hidden business emails?" section above.

**Why did a channel fail?**
The channel was deleted, renamed, or YouTube is temporarily blocking requests. The error message tells you what happened. Try again later or switch to residential proxies.

**Which proxy should I use?**
Start with the default (Automatic). If you are processing more than 100 channels at once or see rate limit errors, switch to Residential.

**What does email validation check?**
Two things. First, MX records: it checks if the email domain has working mail servers, which confirms the domain can receive mail. Second, disposable email detection: it flags throwaway email services like Mailinator, Tempmail, and Guerrillamail. Each email gets a result: `valid`, `invalid`, or `disposable`. Note: this does not verify if the specific mailbox exists, only that the domain is set up to receive mail.

**What is the difference between `youtubeEmail` and `emails`?**
`youtubeEmail` only contains emails found directly in the YouTube channel description. This is usually the creator's primary business email. `emails` contains every email found from all sources (description, video descriptions, pinned comments, linked websites) along with where each one was found. Use `youtubeEmail` when you want the most reliable contact. Use `emails` when you want the broadest reach.

**Can I process video URLs?**
Yes. If you paste a video URL, the scraper figures out which channel uploaded the video, then extracts that channel's contact info.

**How does keyword search work?**
Type a topic (like "AI tools" or "vegan cooking") in the Keyword Search field. The scraper searches YouTube for that topic, finds matching channels, and extracts their contact info. Each search finds 5 to 20 channels depending on the topic.

### ⚖️ Disclaimer

This tool is intended for personal, research, and educational use. You are responsible for complying with YouTube's Terms of Service and applicable laws in your jurisdiction, including anti-spam regulations (CAN-SPAM, GDPR, etc.) when using extracted email addresses. The developer is not liable for misuse. Data availability depends on YouTube at run time.

**Keywords:** youtube email scraper, youtube channel email, youtube contact scraper, youtube email extractor, youtube business email, youtube social links, youtube creator email, influencer email finder

# Actor input Schema

## `urls` (type: `array`):

YouTube channel URLs, @handles, channel IDs, or video URLs.
## `searchQueries` (type: `array`):

Search YouTube for channels by keyword. Discovers channels from both channel and video results. Charged per search query.
## `maxResultsPerQuery` (type: `integer`):

How many channels to find and process per keyword search. Lower this to save costs, raise it to discover more creators.
## `country` (type: `string`):

Filter keyword search results by country. Leave empty to search all countries.
## `language` (type: `string`):

Language for keyword search results. Leave empty to search all languages.
## `joinedDateFrom` (type: `string`):

Only include channels that joined YouTube after this date. Channels older than this are skipped (not charged).
## `joinedDateTo` (type: `string`):

Only include channels that joined YouTube before this date. Channels newer than this are skipped (not charged).
## `scanLinkedWebsites` (type: `boolean`):

Visit websites linked on the channel's About page (including /contact and /about pages) and scan them for email addresses.
## `validateEmails` (type: `boolean`):

Check if email addresses have valid mail servers and flag disposable/throwaway addresses. Charged per email validated.
## `concurrency` (type: `integer`):

Number of channels to process at the same time (1-5). Higher values are faster but may cause occasional timeouts on YouTube API calls.
## `proxyConfig` (type: `object`):

Select proxies for accessing YouTube.

## Actor input object example

```json
{
  "urls": [
    "@mkbhd"
  ],
  "searchQueries": [],
  "maxResultsPerQuery": 20,
  "country": "",
  "language": "",
  "scanLinkedWebsites": true,
  "validateEmails": true,
  "concurrency": 3,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
````

# Actor output Schema

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

No description

## `contacts` (type: `string`):

No description

## `metadata` (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 = {
    "urls": [
        "@mkbhd"
    ],
    "searchQueries": [],
    "proxyConfig": {
        "useApifyProxy": true,
        "apifyProxyGroups": []
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/youtube-channel-email-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 = {
    "urls": ["@mkbhd"],
    "searchQueries": [],
    "proxyConfig": {
        "useApifyProxy": True,
        "apifyProxyGroups": [],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/youtube-channel-email-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 '{
  "urls": [
    "@mkbhd"
  ],
  "searchQueries": [],
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}' |
apify call lurkapi/youtube-channel-email-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Channel Email Scraper",
        "description": "Extract business emails, contact info, and social media links from YouTube channel About pages. Supports @handles, channel URLs, and channel IDs.",
        "version": "0.0",
        "x-build-id": "X7xAbVMnncN6UZMxW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lurkapi~youtube-channel-email-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lurkapi-youtube-channel-email-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/lurkapi~youtube-channel-email-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lurkapi-youtube-channel-email-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/lurkapi~youtube-channel-email-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lurkapi-youtube-channel-email-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": {
                    "urls": {
                        "title": "YouTube URLs, @handles, or Channel IDs",
                        "maxItems": 500,
                        "type": "array",
                        "description": "YouTube channel URLs, @handles, channel IDs, or video URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQueries": {
                        "title": "Search Keywords",
                        "maxItems": 20,
                        "type": "array",
                        "description": "Search YouTube for channels by keyword. Discovers channels from both channel and video results. Charged per search query.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResultsPerQuery": {
                        "title": "Max Channels Per Search",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "How many channels to find and process per keyword search. Lower this to save costs, raise it to discover more creators.",
                        "default": 20
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "",
                            "United States",
                            "United Kingdom",
                            "Canada",
                            "Australia",
                            "Germany",
                            "France",
                            "Spain",
                            "Italy",
                            "Netherlands",
                            "Belgium",
                            "Switzerland",
                            "Austria",
                            "Sweden",
                            "Norway",
                            "Denmark",
                            "Finland",
                            "Ireland",
                            "Portugal",
                            "Poland",
                            "Czech Republic",
                            "Romania",
                            "Hungary",
                            "Greece",
                            "Turkey",
                            "Russia",
                            "Ukraine",
                            "Israel",
                            "India",
                            "Japan",
                            "South Korea",
                            "China",
                            "Taiwan",
                            "Thailand",
                            "Indonesia",
                            "Malaysia",
                            "Philippines",
                            "Vietnam",
                            "Singapore",
                            "Brazil",
                            "Mexico",
                            "Argentina",
                            "Colombia",
                            "Chile",
                            "South Africa",
                            "Nigeria",
                            "Kenya",
                            "Egypt",
                            "Saudi Arabia",
                            "United Arab Emirates",
                            "New Zealand"
                        ],
                        "type": "string",
                        "description": "Filter keyword search results by country. Leave empty to search all countries.",
                        "default": ""
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "",
                            "English",
                            "Spanish",
                            "French",
                            "German",
                            "Italian",
                            "Portuguese",
                            "Dutch",
                            "Russian",
                            "Japanese",
                            "Korean",
                            "Chinese",
                            "Arabic",
                            "Hindi",
                            "Bengali",
                            "Turkish",
                            "Polish",
                            "Ukrainian",
                            "Romanian",
                            "Czech",
                            "Hungarian",
                            "Swedish",
                            "Norwegian",
                            "Danish",
                            "Finnish",
                            "Greek",
                            "Hebrew",
                            "Thai",
                            "Vietnamese",
                            "Indonesian",
                            "Malay",
                            "Filipino",
                            "Swahili",
                            "Persian",
                            "Urdu"
                        ],
                        "type": "string",
                        "description": "Language for keyword search results. Leave empty to search all languages.",
                        "default": ""
                    },
                    "joinedDateFrom": {
                        "title": "Joined After",
                        "type": "string",
                        "description": "Only include channels that joined YouTube after this date. Channels older than this are skipped (not charged)."
                    },
                    "joinedDateTo": {
                        "title": "Joined Before",
                        "type": "string",
                        "description": "Only include channels that joined YouTube before this date. Channels newer than this are skipped (not charged)."
                    },
                    "scanLinkedWebsites": {
                        "title": "Scan Linked Websites for Emails",
                        "type": "boolean",
                        "description": "Visit websites linked on the channel's About page (including /contact and /about pages) and scan them for email addresses.",
                        "default": true
                    },
                    "validateEmails": {
                        "title": "Validate Emails (MX + Disposable Check)",
                        "type": "boolean",
                        "description": "Check if email addresses have valid mail servers and flag disposable/throwaway addresses. Charged per email validated.",
                        "default": true
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Number of channels to process at the same time (1-5). Higher values are faster but may cause occasional timeouts on YouTube API calls.",
                        "default": 3
                    },
                    "proxyConfig": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Select proxies for accessing YouTube.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": []
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
