# YouTube Lead Scraper (`maximedupre/youtube-lead-scraper`) Actor

YouTube Lead Scraper finds public creator emails from keywords or known channels. Export source evidence, channel identity, websites, social links, and visible channel context.

- **URL**: https://apify.com/maximedupre/youtube-lead-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 scraped leads

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 email scraper for creator leads

YouTube Lead Scraper finds public creator and business email leads from [YouTube](https://www.youtube.com/) keywords or known channels. Add a niche such as `fitness coach`, or add channel URLs, @handles, or channel IDs, then export contactable leads with source evidence, channel identity, websites, social links, and visible channel context.

- Use a [YouTube channel email scraper](https://apify.com/maximedupre/youtube-lead-scraper/examples/youtube-channel-email-scraper) to check known channel URLs, @handles, or channel IDs for public contact emails.
- Use a [YouTube lead scraper](https://apify.com/maximedupre/youtube-lead-scraper/examples/youtube-lead-scraper-keyword-discovery) to discover contactable creator leads from niche keywords and location-focused searches.
- Build [YouTube creator outreach lists](https://apify.com/maximedupre/youtube-lead-scraper/examples/youtube-creator-outreach-lists) with email, source URL, channel title, website, social links, and public evidence text.
- Research [influencer partnerships](https://apify.com/maximedupre/youtube-lead-scraper/examples/influencer-partnership-research) by exporting source-backed channel context before sending creator or sponsorship outreach.
- Create [B2B lead generation datasets](https://apify.com/maximedupre/youtube-lead-scraper/examples/youtube-b2b-lead-generation-datasets) from public YouTube channels and linked public websites without a YouTube API key.

#### 📦 YouTube leads you can export

Each dataset row is one accepted public email lead. The Actor saves rows only when it finds at least one public email address, so the dataset stays focused on contactable leads.

| Field              | What it means                                                          |
| ------------------ | ---------------------------------------------------------------------- |
| `email`            | Normalized public email address for the lead.                          |
| `matchedInput`     | Search keyword or channel target that produced the row.                |
| `sourceUrl`        | Public URL where the email was found or evidenced.                     |
| `sourceTitle`      | Channel or page title when visible.                                    |
| `emailSource`      | Product-level source surface where the email was found.                |
| `sourceText`       | Short public text excerpt for audit when available.                    |
| `youtubeChannel`   | Channel ID, handle, title, and canonical URL when known.               |
| `publicWebsiteUrl` | Public website linked from the channel when visible.                   |
| `socialLinks`      | Public social/profile links exposed by the channel.                    |
| `channelContext`   | Description, location, subscriber count, and video count when visible. |

You can export the dataset as JSON, CSV, Excel, XML, RSS, or HTML, or read the same rows through the Apify API.

#### ▶️ How to run it

1. Open the Input tab.
2. Fill exactly one target section: **Search keywords** or **YouTube channels**.
3. For keyword runs, choose **Discovery scope** and set **Max leads per search keyword**.
4. Optionally add a location, such as `United States` or `London`.
5. Optionally add email domains, such as `gmail.com` or `company.com`, if you only want matching addresses.
6. Keep **Check linked websites** on when you want the Actor to check public websites linked from channels.
7. Start the run and open the dataset.

Use **Search keywords** when you want the Actor to discover channels from a niche. Use **YouTube channels** when you already know the channels you want to check. If you want both workflows, make two runs so each run has one clear target type.

For known-channel enrichment:

```json
{
	"channelTargets": [
		"@mkbhd",
		"https://www.youtube.com/@veritasium"
	],
	"includeLinkedSites": true
}
```

For keyword discovery:

```json
{
	"searchKeywords": ["fitness coach", "real estate investing"],
	"resultScope": "channelPages",
	"maxLeadsPerSearch": 25,
	"emailDomains": [],
	"includeLinkedSites": true
}
```

#### ⚙️ Input options

- **Search keywords**: niches, roles, products, or places used to discover YouTube leads.
- **YouTube channels**: known channel URLs, @handles, or channel IDs to enrich.
- **Discovery scope**: channel pages for focused discovery, or all YouTube results for broader keyword runs.
- **Max leads per search keyword**: accepted email leads to save for each keyword.
- **Location**: optional city, country, or region added to keyword searches.
- **Email domains**: optional domains to keep. Leave empty to keep all email domains.
- **Check linked websites**: also check the main public website linked from each channel.

If both target sections are filled, the Actor asks you to keep only one. Proxy routing, retries, deduplication, and source access are handled by the Actor and are not public inputs.

#### 🧾 Output example

```json
{
	"email": "hello@example.com",
	"matchedInput": "fitness coach",
	"sourceUrl": "https://www.youtube.com/@example/about",
	"sourceTitle": "Example Fitness Coach",
	"emailSource": "youtubeChannel",
	"sourceText": "For coaching inquiries email hello@example.com.",
	"youtubeChannel": {
		"id": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
		"handle": "@example",
		"title": "Example Fitness Coach",
		"url": "https://www.youtube.com/@example"
	},
	"publicWebsiteUrl": "https://example.com",
	"socialLinks": ["https://www.instagram.com/example"],
	"channelContext": {
		"description": "Public channel description text when visible.",
		"location": "United States",
		"subscriberCount": 125000,
		"videoCount": 320
	}
}
```

Some fields can be `null` or empty when YouTube or the linked website does not expose that data publicly.

#### 💸 Pricing

This Actor uses pay-per-result pricing. You are charged only when a unique lead row is saved with at least one public contact email. You are not charged for keywords searched, source pages checked, duplicate leads skipped, channels without public emails, or Actor startup.

The current price is `$0.004` per accepted lead.

#### 🔌 Integrations

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

- Use the Apify API to send YouTube lead rows into your own app, database, or enrichment pipeline.
- Export finished datasets as CSV, Excel, JSON, XML, RSS, or HTML for spreadsheets and CRM imports.
- Schedule repeat runs for saved keyword lists or channel lists.
- Trigger webhooks after a run to pass new public leads into downstream tools.

#### ❓ FAQ

##### Can I scrape emails from a list of YouTube channels?

Yes. Add channel URLs, @handles, or channel IDs in **YouTube channels** and leave **Search keywords** empty.

##### Can I discover leads from a niche keyword?

Yes. Add one or more phrases in **Search keywords**, such as `fitness coach`, `wedding planner`, or `tech reviewer contact email`. The Actor checks public YouTube results and saves only contactable rows.

##### Can it find emails on websites linked from YouTube channels?

Yes, when **Check linked websites** is enabled. The Actor checks the main non-social public website linked from the channel and saves emails found there.

##### Why did my run return fewer leads than the limit?

The limit is a cap, not a guarantee. The Actor saves only channels or linked websites where it finds a public email, and many channels do not publish one.

##### Does it need a YouTube login or API key?

No. The Actor uses public YouTube pages and public linked websites. It does not need YouTube cookies, a private account, or a Google API key.

##### Why not use the YouTube API?

The YouTube API is useful for official channel and video metadata, but it does not provide public creator email leads from channel text or linked websites. This Actor is built for public contact discovery and source evidence.

##### What are YouTube alternatives?

For broader creator discovery across several platforms, use an influencer scraper. For channel metadata without email discovery, use a YouTube channel scraper. For website-only contact discovery, use a website email scraper.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~youtube-lead-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [YouTube Channel Search Scraper ↗](https://apify.com/maximedupre/youtube-channel-search-scraper) - Find public YouTube channels from keywords before checking contact details.
- [YouTube Channel Scraper ↗](https://apify.com/maximedupre/youtube-channel-scraper) - Export public channel profiles and recent video rows.
- [Influencer Scraper ↗](https://apify.com/maximedupre/influencer-scraper) - Find influencer profiles across TikTok, Instagram, and YouTube.
- [YouTube Description Extractor ↗](https://apify.com/maximedupre/youtube-description-extractor) - Extract full public YouTube video descriptions and links.
- [Website Emails Scraper ↗](https://apify.com/maximedupre/website-emails-scraper) - Extract public contact emails from known websites.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `searchKeywords` (type: `array`):

Enter niches, roles, products, or places to discover YouTube leads.

## `channelTargets` (type: `array`):

Enter channel URLs, @handles, or channel IDs when you already know which channels to check.

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

Choose focused channel pages or broader YouTube results for keyword runs.

## `maxLeadsPerSearch` (type: `integer`):

Caps accepted email leads for each search keyword.

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

Add a city, country, or region when leads should match a place.

## `emailDomains` (type: `array`):

Keep only emails from these domains. Leave empty to keep all domains.

## `includeLinkedSites` (type: `boolean`):

Also look for contact emails on public websites linked from the channel.

## Actor input object example

```json
{
  "channelTargets": [
    "https://www.youtube.com/@IndigoMarketingAgency",
    "https://www.youtube.com/channel/UCztor5qbjvs2y45LTx-9Dsw",
    "https://www.youtube.com/@TECHNICALVARUNPANDEY",
    "https://www.youtube.com/@mkbhd",
    "https://www.youtube.com/@veritasium"
  ],
  "resultScope": "channelPages",
  "maxLeadsPerSearch": 25,
  "location": "United States",
  "emailDomains": [],
  "includeLinkedSites": true
}
```

# Actor output Schema

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

Open the dataset of accepted YouTube lead rows.

# 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 = {
    "channelTargets": [
        "https://www.youtube.com/@IndigoMarketingAgency",
        "https://www.youtube.com/channel/UCztor5qbjvs2y45LTx-9Dsw",
        "https://www.youtube.com/@TECHNICALVARUNPANDEY",
        "https://www.youtube.com/@mkbhd",
        "https://www.youtube.com/@veritasium"
    ],
    "location": "United States"
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/youtube-lead-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 = {
    "channelTargets": [
        "https://www.youtube.com/@IndigoMarketingAgency",
        "https://www.youtube.com/channel/UCztor5qbjvs2y45LTx-9Dsw",
        "https://www.youtube.com/@TECHNICALVARUNPANDEY",
        "https://www.youtube.com/@mkbhd",
        "https://www.youtube.com/@veritasium",
    ],
    "location": "United States",
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/youtube-lead-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 '{
  "channelTargets": [
    "https://www.youtube.com/@IndigoMarketingAgency",
    "https://www.youtube.com/channel/UCztor5qbjvs2y45LTx-9Dsw",
    "https://www.youtube.com/@TECHNICALVARUNPANDEY",
    "https://www.youtube.com/@mkbhd",
    "https://www.youtube.com/@veritasium"
  ],
  "location": "United States"
}' |
apify call maximedupre/youtube-lead-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/yc6AzhfarFmzVJ950/builds/1pN6Qrf11XiMyPQUE/openapi.json
