# YouTube Channel Email Scraper - Channels & Videos (`pnda/youtube-scraper`) Actor

Find public YouTube channel emails from channel URLs, plus subscribers, views and links. Also scrapes video data with transcripts. No login, no API key. Pay only when an email is found.

- **URL**: https://apify.com/pnda/youtube-scraper.md
- **Developed by:** [PNDA](https://apify.com/pnda) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $39.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.

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 Channel Email Scraper: creator emails & videos

Paste YouTube channel URLs and get each creator's **public business email**, plus subscribers, total views, video count, description and external links. The same Actor also scrapes **videos** (views, likes, transcript, tags, chapters).

- ✅ **No login.** No YouTube account, no cookies, no CAPTCHA.
- ✅ **No API key.** No Google Cloud project, no YouTube Data API quota.
- ✅ **You only pay for an email when one is found.** Channels without a public email cost the channel price only.
- 💳 **Paid Apify plans only.** Runs from a free plan stop immediately with an upgrade message, at no cost.
- ✅ **Failed URLs are free.** Deleted, private or unavailable pages are skipped: they are not saved and not charged.

***

### Who is it for?

- **Influencer marketing teams** building creator lists with subscriber counts and contact emails.
- **Sales, growth and sponsorship teams** turning YouTube channels into outreach leads.
- **Agencies and brands** benchmarking competitor channels and videos.
- **Content and SEO teams** mining titles, tags and transcripts for topic research.
- **Researchers and AI builders** collecting transcripts for sentiment analysis, RAG or classification.

***

### Two modes

| Mode | Accepted URLs | What you get |
|---|---|---|
| **Channel** | `youtube.com/@handle`, `/channel/UC…`, `/c/…`, `/user/…` | Channel name, handle, subscribers, total views, video count, creation date, description, external links, top videos, **`channel_email`** |
| **Video** | `youtube.com/watch?v=…`, `youtu.be/…`, `/shorts/…`, `/live/…` | Title, views, likes, comment count, duration, publish date, description, tags, hashtags, chapters, **transcript**, channel name, subscribers, thumbnail, related videos |

#### How the email is found

In **Channel** mode the Actor looks for a public business email in the channel description and "About" links. If none is found there, it opens up to **2 of the creator's linked websites** (YouTube links are ignored) and looks for an email on those pages. It never clicks YouTube's logged-in "View email address" button, so no account is needed and nothing is bypassed.

In our test on 5 well-known tech and productivity channels, **4 out of 5 returned an email** (MKBHD, Linus Tech Tips, Veritasium, Matt D'Avella). Hit rates vary by niche: business-oriented creators publish emails much more often than hobby channels.

Set `includeChannelEmail` to `false` if you only need channel stats.

***

### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `type` | string | ✅ | `Channel` or `Video` (default) |
| `urls` | array | ✅ | YouTube URLs matching the selected mode. URLs that don't match are skipped with a warning. |
| `includeChannelEmail` | boolean | — | Channel mode: look for the public business email (default `true`) |

#### Example: channel emails

```json
{
  "type": "Channel",
  "urls": [
    "https://www.youtube.com/@mkbhd",
    "https://www.youtube.com/@veritasium",
    "https://www.youtube.com/@mattdavella"
  ],
  "includeChannelEmail": true
}
```

#### Example: video details and transcripts

```json
{
  "type": "Video",
  "urls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "https://youtu.be/jNQXAC9IVRw"
  ]
}
```

***

### Output

Results go to the default dataset. Export them as **JSON, CSV, Excel, XML or HTML**, or send them to Google Sheets, HubSpot, n8n, Make, Zapier or your own API.

#### Channel mode (real output, trimmed)

```json
{
  "url": "https://www.youtube.com/@mkbhd",
  "name": "Marques Brownlee",
  "handle": "@mkbhd",
  "subscribers": 21300000,
  "views": 5689453522,
  "videos_count": 1853,
  "Description": "MKBHD: Quality Tech Videos | YouTuber | Geek | Consumer Electronics ...",
  "Links": ["twitter.com/MKBHD", "instagram.com/MKBHD", "..."],
  "channel_email": "business@MKBHD.com"
}
```

`channel_email` is `null` when no public email was found. You are not charged the email event in that case.

#### Video mode (real output, trimmed)

```json
{
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "video_id": "dQw4w9WgXcQ",
  "title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
  "youtuber": "@RickAstleyYT",
  "subscribers": 4540000,
  "views": 1819372242,
  "likes": 19411497,
  "num_comments": 2457546,
  "video_length": 213,
  "date_posted": "2009-10-25T06:57:33.000Z",
  "tags": ["..."],
  "transcript": "...",
  "chapters": []
}
```

#### Main fields

| Field | Mode | Meaning |
|---|---|---|
| `channel_email` | Channel | Public business email, or `null` |
| `name`, `handle` | Channel | Channel name and @handle |
| `subscribers` | Channel, Video | Subscriber count |
| `views` | Channel, Video | Total channel views / video views |
| `videos_count` | Channel | Number of uploaded videos |
| `Description`, `Links` | Channel | "About" description and external links |
| `title`, `likes`, `num_comments` | Video | Title and engagement counters |
| `video_length` | Video | Duration in seconds |
| `transcript`, `formatted_transcript` | Video | Captions as plain text and with timestamps |
| `tags`, `hashtags`, `chapters` | Video | Metadata for SEO and topic research |

***

### Pricing

**Available on paid Apify plans only.** Pay per event: you only pay for results saved to your dataset. No start fee, no monthly rental.

| Event | When it is charged | Price per 1,000 |
|---|---|---|
| `channel-result` | One channel saved (stats, description, links) | $5.00 |
| `email-found` | A public email was found for that channel | $39.00 |
| `video-result` | One video saved (with transcript when available) | $4.80 |

**Examples**

- 1,000 channels, 60% with a public email: 1,000 × $0.005 + 600 × $0.039 = **$28.40**, or about $0.047 per email lead.
- 1,000 channels with `includeChannelEmail: false`: **$5.00**.
- 500 videos with transcripts: **$2.40**.

Inputs that return no data (deleted, private or unavailable) are **never charged**. Set a **maximum cost per run** in Run options to cap spending: duplicate URLs are removed and the Actor only processes as many URLs as your limit can pay for (in Channel mode with email lookup, each channel is budgeted at channel + email price). The rest are skipped and listed in the log.

***

### Tips

- **Timeout.** The default run timeout is 15 minutes, which is enough for channel and video batches.
- **Batch your URLs.** One run with 200 channels is faster and cheaper than 200 runs with one channel.
- **Deduplicate.** Pass each channel once. Different URL forms of the same channel (`/@handle` and `/channel/UC…`) count as two results.

***

### FAQ

**Do I need a YouTube API key or a Google account?**
No. Paste URLs and run.

**Will it find every creator's email?**
No. It only returns emails the creator made public: in the channel description, in the About links, or on up to 2 linked websites. Emails that are only shown behind YouTube's "View email address" button (which requires a login and a CAPTCHA) are not collected. You are only charged `email-found` when an email is actually returned.

**Can I search channels by keyword?**
Not yet. Give the Actor channel or video URLs. You can get channel URLs from any YouTube search or from the Video mode output (`channel_url`).

**Can I use it on the free Apify plan?**
No. This Actor is available on paid Apify plans only ([pricing](https://apify.com/pricing)).

**Why was a URL skipped?**
It did not match the selected mode (for example a channel URL in Video mode), or the page is unavailable. Skipped URLs are listed in the run log and not charged.

**Is it legal?**
The Actor only collects publicly available data. You are responsible for how you use it, in particular personal data such as emails, under GDPR, CAN-SPAM and similar laws. Only contact creators for legitimate business purposes and honour opt-out requests.

***

### Integrations

Run it from the Apify API, the Apify CLI, Apify Schedules, n8n, Make, Zapier or any HTTP client, and send results to Google Sheets, a CRM or a webhook when the run finishes.

# Actor input Schema

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

What kind of YouTube URLs are you providing?

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

YouTube URLs matching the selected content type. Video: watch, youtu.be, shorts or live URLs. Channel: @handle, /channel/, /c/ or /user/ URLs.

## `includeChannelEmail` (type: `boolean`):

Channel mode only. Finds the creator's public business email in the channel description and About links, then on up to 2 linked websites. You are charged the email-found event only when an email is found.

## Actor input object example

```json
{
  "type": "Video",
  "urls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "includeChannelEmail": true
}
```

# Actor output Schema

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

All scraped records (JSON, CSV, Excel).

# 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 = {
    "type": "Video",
    "urls": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pnda/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 = {
    "type": "Video",
    "urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
}

# Run the Actor and wait for it to finish
run = client.actor("pnda/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 '{
  "type": "Video",
  "urls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ]
}' |
apify call pnda/youtube-scraper --silent --output-dataset

```

## MCP server setup

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