# YouTube Channel Email Scraper 📧 (creator contacts & links) (`tagadanar/youtube-channel-email-scraper`) Actor

Find YouTube creators in your niche and get their business email, Instagram, TikTok, website and links, with subscribers, views, country and join date. Filter by audience size and country. No API key, no login.

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

## Pricing

from $2.10 / 1,000 channel delivereds

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/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: creators in your niche, with their business email and links

Type the niche you sell to ("home espresso", "fitness coach", "indie game dev") and get back a list of YouTube creators with their **business email**, Instagram, TikTok, X, website and link-in-bio, plus subscribers, total views, video count, country and the date they joined. Filter by audience size and country, and keep only the channels that publish an email.

Already have a list of channels? Paste the URLs or @handles and the same fields come back for each.

Built for influencer-marketing agencies, brands running creator outreach, and anyone selling sponsorships: the output drops straight into a CRM or a mail-merge sheet. No API key, no login, no cookies, no proxy to configure.

### What you get

One row per channel:

| Field | Description |
| --- | --- |
| `title`, `handle`, `channelUrl`, `channelId` | Who the creator is |
| `emails` | Every business email found at or above your confidence level, de-duplicated |
| `primaryEmail` | The one to put in your CRM (a `business@` / `collab@` / `hello@`-style mailbox first) |
| `emailConfidence`, `emailConfidenceReason` | How sure we are the primary email reaches this creator (`high` / `medium` / `low`) and why |
| `emailSource` | Where it was found: `description`, `website` or `link-in-bio` |
| `lowConfidenceEmails` | Doubtful addresses set aside (probably someone else's): not your primary email, not charged |
| `emailDetails` | Every address found, each with its source, the page it was on (`foundOn`), how (`foundVia`: mailto link / site's own domain / page text), confidence and reasons |
| `hasEmail` | True when at least one email was found |
| `hasYouTubeBusinessEmail` | True when the channel also has an email behind YouTube's "View email address" button (see FAQ) |
| `subscriberCountApprox`, `subscriberCountText` | Audience size as YouTube shows it ("455K subscribers" → 455000) |
| `totalViewCount` | Lifetime views, exact |
| `videoCount` | Videos published |
| `country`, `countryCode` | Country shown on the channel's About page |
| `joinedDate` | When the channel was created (YYYY-MM-DD) |
| `description` | The channel description (first 2,000 characters) |
| `links` | Every link on the channel, as `{ title, url, type }` with `type` = instagram, tiktok, x, facebook, linkedin, twitch, discord, patreon, youtube, link-in-bio, shop, website, … |
| `instagramUrl`, `tiktokUrl`, `xUrl`, `websiteUrl`, `linkInBioUrl` | The most-wanted links, ready as columns |
| `keyword` | The search keyword that found the channel |
| `avatarUrl`, `isVerified` | Profile picture and verified tick |
| `capturedAt` | When the row was collected |

#### Output example

A real row (run of 2026-10-15, channel found by `"home espresso"`, given here as `channels: ["UC_t7lJPh4kpIxgdRmTFi1Qg"]` with "Also look on their website" turned on):

```json
{
    "channelId": "UC_t7lJPh4kpIxgdRmTFi1Qg",
    "channelUrl": "https://www.youtube.com/@FlairEspresso",
    "handle": "@FlairEspresso",
    "title": "Flair Espresso",
    "emails": [
        "service@flairespresso.com"
    ],
    "primaryEmail": "service@flairespresso.com",
    "emailConfidence": "high",
    "emailConfidenceReason": "found on flairespresso.com, at that site's own domain; the site is linked from the channel",
    "emailSource": "website",
    "hasEmail": true,
    "hasYouTubeBusinessEmail": true,
    "subscriberCountApprox": 150000,
    "subscriberCountText": "150K subscribers",
    "totalViewCount": 86922740,
    "videoCount": 360,
    "country": "United States",
    "countryCode": "US",
    "joinedDate": "2016-10-19",
    "description": "Empowering you to make great tasting espresso, anywhere, anytime. You only need fresh roasted coffee, freshly ground and access to hot water... or brew cold pressed on a hot summer's day!\n\nFind out more at beacons.ai/flairespresso",
    "links": [
        {
            "title": "flairespresso.com",
            "url": "http://www.flairespresso.com",
            "type": "website"
        },
        {
            "title": "instagram",
            "url": "http://www.instagram.com/flairespressomaker",
            "type": "instagram"
        },
        {
            "title": "facebook",
            "url": "http://www.facebook.com/flairespresso",
            "type": "facebook"
        },
        {
            "title": "news & updates",
            "url": "https://beacons.ai/flairespresso",
            "type": "link-in-bio"
        }
    ],
    "instagramUrl": "http://www.instagram.com/flairespressomaker",
    "tiktokUrl": null,
    "xUrl": null,
    "websiteUrl": "http://www.flairespresso.com",
    "linkInBioUrl": "https://beacons.ai/flairespresso",
    "keyword": null,
    "avatarUrl": "https://yt3.googleusercontent.com/ytc/AIdro_kZtsW8Q0nT8HnITRRJhgvumCMQIk-EeS2phSvL_ue5G-I=s160-c-k-c0x00ffffff-no-rj",
    "isVerified": false,
    "capturedAt": "2026-10-15T21:54:47.263Z"
}
```

### Input

| Field | What it does |
| --- | --- |
| **Niche keywords** | What your creators talk about, one per line. Each keyword runs YouTube's own channel search and goes deep — up to ~500 channels per keyword, until YouTube has nothing more to show. |
| **Channels to enrich** | Optional list of channel URLs, @handles or UC… channel IDs. Enriched first, then the keywords run. |
| **Max channels** | How many channels to deliver (after your filters). Default 50, up to 2,000. |
| **Min / Max subscribers** | Audience-size window, e.g. 10,000 – 250,000 for micro-influencers. |
| **Country** | Two-letter code or English name (`US`, `United Kingdom`, `IN`); several separated by commas. |
| **Only channels with an email** | Deliver — and charge — only creators where an email was found. |
| **Also look on their website and link-in-bio page** | When the description has no email, open the creator's own website (homepage, then its contact page) or their Linktree / Beacons / Stan page and take the email published there. |

Find mid-size fitness creators in the US who publish an email:

```json
{
    "keywords": ["fitness coach", "home workout"],
    "maxChannels": 200,
    "minSubscribers": 10000,
    "maxSubscribers": 500000,
    "country": "US",
    "onlyWithEmail": true,
    "checkLinkedWebsites": true
}
```

Enrich a list you already have:

```json
{
    "channels": ["@LanceHedrick", "https://www.youtube.com/channel/UC2cDae0GAy9ytVEmkFi4i5g", "youtube.com/c/HoonsCoffee"]
}
```

### Pricing

Pay per result, platform usage included — the price below is all you pay.

| Event | Price | Bronze | Silver | Gold |
| --- | --- | --- | --- | --- |
| Channel delivered | $0.003 (**$3 per 1,000 channels**) | $0.0027 | $0.0024 | $0.0021 |
| Email found (once per channel that has one) | $0.004 (**$4 per 1,000 emails**) | $0.0036 | $0.0032 | $0.0028 |
| Run start | $0.001 per run | | | |

So a channel with an email costs $0.007 and a channel without one $0.003. Channels your filters skip (wrong audience size, wrong country, no email when you asked for emails only) are **never charged**, and neither is anything YouTube refused.

### Why this one

- **Find and enrich in one run.** Keyword channel search goes deep (a few hundred channels per keyword), so you do not need a separate search actor.
- **You pay for what you keep.** Subscriber, country and email filters run before charging; skipped channels cost nothing.
- **Every email says where it came from and how sure we are.** `emailConfidence` is `high`, `medium` or `low`, with the reason in plain words. Doubtful addresses (the web designer's, another company's, a spam site's) are set aside in `lowConfidenceEmails`: never your primary email, never charged.
- **Sponsor links are not mistaken for the creator's website**, so a brand's support address is not attributed to the creator.
- **No login, ever.** No YouTube session, no cookies, no API key.

### Frequently asked questions

**Where do the emails come from?**
From what the creator published themselves: the channel description ("for business inquiries: …", including the `name [at] domain [dot] com` spellings), and — when you turn it on — their own website or link-in-bio page. `emailSource` on every row says which.

**How sure is each email? Could it belong to someone else?**
Each address is graded:

- **high**: the creator wrote it in the channel description, linked it with `mailto:` on their link-in-bio page, it is at the domain of their own website or of a site linked from the channel, or it contains the channel's name.
- **medium**: plausible but unconfirmed, e.g. a Gmail address in a mailto link on the creator's site.
- **low**: probably someone else's, e.g. the web designer's or another company's domain, a gambling or spam-looking domain, or a free-mail address in the text of a site not named after the channel.

By default (**Minimum email confidence: medium**) low addresses are never used as `primaryEmail` and never charged. They stay listed in `lowConfidenceEmails`, with every address's source, grade and reasons in `emailDetails`, so you can judge for yourself. Set it to **high** for the strictest list, or **low** to get everything found.

**Does it click YouTube's "View email address" button?**
No. That button needs a signed-in Google account and a captcha for every address, and this actor never signs in to anything. `hasYouTubeBusinessEmail: true` tells you the creator has set one there, so you know a manual look is worth it for the channels you care most about.

**Why do some channels have no email?**
Many creators only put their address behind that button, or only on Instagram. Turn on "Also look on their website and link-in-bio page" to catch the ones that publish it elsewhere, and "Only channels with an email" to receive (and pay for) only those.

**How many channels can one keyword find?**
YouTube's channel search usually ends after 15–30 pages, i.e. a few hundred channels per keyword. For a bigger list, add more keywords: they are searched in turn and duplicates are removed. The run's status message says when a keyword ran out.

**Why is the subscriber count approximate?**
YouTube shows it rounded ("28.3K"), everywhere, to everyone. Total views are exact. Channels that hide their subscriber count are skipped when you set a subscriber filter, and counted as such in the run status.

**Is this legal / GDPR-compliant?**
The actor collects business contact details that creators publish on purpose for sponsorship and collaboration requests. You are responsible for how you use them: follow CAN-SPAM, GDPR/ePrivacy and your local rules for outreach — say who you are, why you are writing, and honour opt-outs. Do not use the data for spam or for anything other than a relevant business proposal.

**Do I need a YouTube API key or quota?**
No. There is no key, no quota and no Google Cloud project.

### Limits

- Only public information: nothing behind a login, no private channels.
- "Also look on their website" reads at most two pages per channel (homepage, then its contact page, or the link-in-bio page), so an email buried deep in a site will be missed.
- Country is whatever the creator chose to show; many channels show none.

### Related YouTube actors

- **[YouTube Search Scraper](https://apify.com/tagadanar/youtube-search-scraper)** — videos for any search, with views and dates.
- **[YouTube Channel Scraper](https://apify.com/tagadanar/youtube-channel-scraper)** — every video of a channel.
- **[YouTube Comments Scraper](https://apify.com/tagadanar/youtube-comments-scraper)** — comments and replies of any video.
- **[YouTube Shorts Scraper](https://apify.com/tagadanar/youtube-shorts-scraper)** — Shorts by keyword or channel.
- **[YouTube Transcript Scraper](https://apify.com/tagadanar/youtube-transcript-extractor)** — transcripts in bulk, any language.

***

YouTube email scraper, YouTube channel email extractor, YouTube influencer email finder, YouTube creator contact list, YouTuber business email, influencer outreach list, YouTube channel scraper with email, find YouTubers by niche, YouTube influencer database, YouTube sponsorship leads.

# Changelog

This Actor's version history is a separate document: https://apify.com/tagadanar/youtube-channel-email-scraper/changelog.md

# Actor input Schema

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

What your creators talk about, one per line, e.g. <code>home espresso</code>, <code>fitness coach</code>, <code>indie game dev</code>. Each keyword runs YouTube's own channel search and goes deep (up to ~500 channels per keyword). Several keywords are searched in turn and duplicates are removed.

## `channels` (type: `array`):

Already have a list? Paste channel URLs (<code>https://www.youtube.com/@LanceHedrick</code>, <code>/channel/UC…</code>, <code>/c/…</code>, <code>/user/…</code>), @handles or UC… channel IDs, one per line. They are enriched first, then the keywords are searched.

## `maxChannels` (type: `integer`):

Stop after this many channels are delivered (after your filters). You are only charged for channels delivered.

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

Skip channels below this audience size. Leave empty for no minimum.

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

Skip channels above this audience size — handy for micro-influencer campaigns. Leave empty for no maximum.

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

Only channels whose About page shows this country. Two-letter code or English name (<code>US</code>, <code>United Kingdom</code>, <code>IN</code>); several separated by commas. Channels that show no country are skipped when this is set. Leave empty for any country.

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

Deliver (and charge) only channels where a business email was found. Channels without one are skipped and never charged.

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

Every email is graded <b>high</b> (written in the channel description, a mailto on the creator's link-in-bio page, at the domain of the creator's own website, or containing the channel's name), <b>medium</b> (a free-mail address on the creator's site, plausible but unconfirmed) or <b>low</b> (probably someone else's: the web designer's or another company's domain, a gambling/spam-looking domain, or a free-mail address on a site not named after the channel). Addresses below this level are never used as the primary email and never charged; they are still listed in <code>lowConfidenceEmails</code> with the reason in <code>emailDetails</code>. <b>Only channels with an email</b> counts emails at or above this level.

## `checkLinkedWebsites` (type: `boolean`):

When the channel description has no email, open the creator's own website (homepage, then its contact page) or their link-in-bio page (Linktree, Beacons, Stan…) and pick up the email published there. Finds more emails; makes the run slower.

## Actor input object example

```json
{
  "keywords": [
    "home espresso"
  ],
  "maxChannels": 20,
  "minSubscribers": 10000,
  "onlyWithEmail": false,
  "minEmailConfidence": "medium",
  "checkLinkedWebsites": false
}
```

# Actor output Schema

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

One item per channel in the default dataset.

# 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": [
        "home espresso"
    ],
    "maxChannels": 20,
    "minSubscribers": 10000
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/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": ["home espresso"],
    "maxChannels": 20,
    "minSubscribers": 10000,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/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": [
    "home espresso"
  ],
  "maxChannels": 20,
  "minSubscribers": 10000
}' |
apify call tagadanar/youtube-channel-email-scraper --silent --output-dataset

```

## MCP server setup

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