# YouTube Channel Email Scraper — Creator Leads (`inovaflow/youtube-channel-email-scraper`) Actor

Find YouTube creators by keyword or paste channels, and get their public e-mails — from the channel description, recent video descriptions, their website and link-in-bio page — with subscribers, views, country, last upload and every social link. No login, no API key.

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

## Pricing

from $4.00 / 1,000 emails

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

**Find YouTube creators by keyword and get the public e-mail they put out for sponsors — with the numbers you need to decide who to pitch.**

If you run influencer campaigns, you know the routine: search YouTube for your niche, open fifty channels one by one, click "…more", scroll the description for an address, check the latest videos for "business inquiries", then paste subscriber counts into a spreadsheet. Half the channels turn out to be dead, the other half are in the wrong country.

We built this for our own outreach first, and now we're sharing it. Give it a few keywords (or the channels you already have) and it returns one row per creator: the **public e-mails** they wrote in their channel description, their links and recent video descriptions — each one tagged with where it was found — next to **subscribers, total views, video count, country, joined date, last upload and average recent views**, plus every social link sorted into its own column. It also opens the creator's own website and link-in-bio page (Linktree, Beacons, Stan…) to catch the addresses they keep off YouTube — that roughly doubles the share of creators you can e-mail.

YouTube also lets creators store a business e-mail that is shown only to signed-in viewers behind a CAPTCHA. We do not reveal it — but every row tells you whether the channel has one (`hasHiddenBusinessEmail`), so you know a sign-in click on that channel will get you an address.

### Who it's for

- **Brands and agencies booking sponsorships** — *"skincare creators in the US with 10K–500K subscribers who posted this month, with an e-mail."*
- **Influencer marketplaces and CRMs** — a steady feed of creator leads with reach and activity numbers to rank them.
- **Affiliate and partnership managers** — *"which of these 300 channels list a business address, and where?"*
- **AI agents and automations** — one call, flat JSON rows, no login and no API key.

### What you get per channel

`title`, `handle`, `channelUrl`, `email` (the best address), `emails` (all of them), `emailDetails` (each address with its source — channel description, channel links, a video description, website or link-in-bio — the page it came from, and whether its domain accepts mail), `hasHiddenBusinessEmail`, `subscribers`, `totalViews`, `videoCount`, `country`, `joinedDate`, `description`, `lastUploadAt`, `uploadsLast30Days`, `recentAvgViews`, `recentMedianViews`, `website`, `linkInBio`, `instagram`, `tiktok`, `twitter`, `facebook`, `linkedin`, `twitch`, `discord`, `patreon`, `otherLinks`, `verified`, `avatarUrl`.

Two table views are built in: **Creator leads** (who, how big, where, the e-mail) and **Links & socials**.

### Options

- **Keywords** — by default each keyword finds the creators behind the videos YouTube ranks for it (collaborations included, 200+ channels per keyword). Switch *How keywords find channels* to `channels` for YouTube's channel-name search instead.
- **Channel URLs** — `@handle`, `/channel/UC…`, `/c/…`, `/user/…` URLs, bare IDs, or any video / Shorts link (its channel is used).
- **Maximum channels per keyword** — caps rows and spend.
- **Minimum / maximum subscribers** — applied before a channel is opened, so it also saves time.
- **Countries** — names or two-letter codes. The creator's own country setting is used; channels that list none are skipped when this is set.
- **Only channels with a public e-mail** — hide (and don't pay for) channels without one.
- **Read the latest videos** (on) — e-mails under recent videos, last upload date, uploads in the last 30 days, recent average views.
- **Visit website and link-in-bio page** (on) — home page plus up to two contact pages; shops, tip jars and affiliate links are skipped. Turn it off for a faster, YouTube-only run.
- **Check e-mail domains** (on) — MX lookup, free, nothing is sent.

### How to set it up

1. Type a few keywords for your niche — or paste the channels you already have.
2. Set the subscriber range and countries you care about. Tick *Only channels with a public e-mail* if you only want contactable creators.
3. Run it, then export the **Creator leads** view to CSV, Excel or your CRM.

And that’s it. A run of 100 channels takes a minute or two.

### Pricing

You pay per channel delivered and per public e-mail found — see the Pricing tab. Channels removed by your filters, duplicates and inputs that don't exist are never charged, and a channel is never charged twice for the same address.

> **Tip:** set the subscriber range first. It is checked on the search results, before a channel is opened, so it keeps both the run time and the bill down.

### Notes

- Only e-mails the creator published themselves are returned. The sign-in-only business e-mail on YouTube is flagged, never revealed. Use the addresses in line with anti-spam laws (CAN-SPAM, GDPR) — personalised, relevant outreach only.
- Subscriber counts are rounded by YouTube itself (21.3M, 11.2K). Total views and video counts are exact.
- `uploadsLast30Days` counts the 15 most recent uploads, so 15 means "15 or more".
- Found a bug or need another field? Open an issue on the **Issues** tab — we answer fast, and we build custom versions on request.

# Actor input Schema

## `keywords` (type: `array`):

What the creators you want talk about, one per line — `skincare routine`, `home workout`, `budget travel`. Each keyword finds the creators behind the videos YouTube ranks for it (see the next option); add more keywords for bigger lists.

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

`videos` (recommended) = the creators behind the videos YouTube ranks for the keyword — real creators in your niche, collaborations included, 200+ channels per keyword. `channels` = YouTube's channel search, which matches channel names and often ranks tiny name-alike channels first (about 150 per keyword).

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

Channels you already know, one per line: `https://www.youtube.com/@mkbhd`, `@mkbhd`, `UCBJycsmduvYEL83R_U4JriQ`, a `/c/` or `/user/` URL — or any video / Shorts link (its channel is used).

## `maxChannelsPerKeyword` (type: `integer`):

Stop a keyword after this many channels are delivered. Also caps what you pay.

## `minSubscribers` (type: `integer`):

Skip channels below this subscriber count (YouTube rounds counts, e.g. 11.2K). Channels that hide their count are skipped when a subscriber filter is set.

## `maxSubscribers` (type: `integer`):

Skip channels above this subscriber count — handy for micro-influencer lists.

## `countries` (type: `array`):

Keep only creators whose channel lists one of these countries — names or two-letter codes, one per line (`United States`, `GB`, `Germany`). The first country also steers the keyword search. Channels that list no country are skipped when this is set.

## `onlyWithEmail` (type: `boolean`):

On = deliver (and charge) only channels where a public e-mail was found. Off = every channel, with its links and stats even when it shows no e-mail.

## `includeRecentVideos` (type: `boolean`):

Reads the channel's latest 15 uploads: e-mails written in the video descriptions, plus the last upload date, uploads in the last 30 days and the average views of recent videos. One small extra request per channel.

## `scanWebsites` (type: `boolean`):

Opens the website and the link-in-bio page (Linktree, Beacons, Stan…) linked on the channel and collects the e-mails published there (home page plus up to two contact pages). Roughly doubles the share of channels with an e-mail; adds a few seconds per channel. Shops, tip jars and affiliate links are never opened.

## `checkEmailDomains` (type: `boolean`):

Looks up each address's mail server (MX record) and marks it in `emailDetails.domainAcceptsMail`. No e-mail is sent. Free.

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

Channels processed at the same time.

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

Apify datacenter proxy by default — YouTube's channel pages answer it. Switch to residential only if you see blocks in the log.

## Actor input object example

```json
{
  "keywords": [
    "skincare routine",
    "vegan recipes"
  ],
  "searchMode": "videos",
  "channelUrls": [
    "https://www.youtube.com/@mkbhd",
    "https://www.youtube.com/@LabMuffinBeautyScience"
  ],
  "maxChannelsPerKeyword": 10,
  "minSubscribers": 10000,
  "maxSubscribers": 500000,
  "countries": [
    "United States",
    "GB"
  ],
  "onlyWithEmail": false,
  "includeRecentVideos": true,
  "scanWebsites": true,
  "checkEmailDomains": true,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per channel: public e-mails, subscribers, views, videos, country, last upload, website and socials.

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

Every link on each channel, sorted into columns by platform.

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

Channels delivered and charged, e-mails found by source, filters, keywords report, inputs not found.

# 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 = {
    "keywords": [
        "skincare routine"
    ],
    "channelUrls": [
        "https://www.youtube.com/@mkbhd",
        "https://www.youtube.com/@LabMuffinBeautyScience"
    ],
    "maxChannelsPerKeyword": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("inovaflow/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 = {
    "keywords": ["skincare routine"],
    "channelUrls": [
        "https://www.youtube.com/@mkbhd",
        "https://www.youtube.com/@LabMuffinBeautyScience",
    ],
    "maxChannelsPerKeyword": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("inovaflow/youtube-channel-email-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 '{
  "keywords": [
    "skincare routine"
  ],
  "channelUrls": [
    "https://www.youtube.com/@mkbhd",
    "https://www.youtube.com/@LabMuffinBeautyScience"
  ],
  "maxChannelsPerKeyword": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call inovaflow/youtube-channel-email-scraper --silent --output-dataset

```

## MCP server setup

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