# YouTube Channel Contact Scraper — Email, Website & Socials (`haketa/youtube-contact-scraper`) Actor

Find YouTube creators and get their contact details in bulk. Search by keyword or paste channel URLs and get channel name, subscribers, views, country, business email, website and all social links. Fast, keyless YouTube influencer & creator lead generation.

- **URL**: https://apify.com/haketa/youtube-contact-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Lead generation, Social media
- **Features:** Limited permissions
- **Stats:** 659 total users, 95 monthly users, 99.7% runs succeeded, 3 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / 1,000 results

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

<h1 align="center">YouTube Channel Contact Scraper — Email, Website & Social Links</h1>

<p align="center"><strong>Find YouTube creators by niche or keyword and extract verified business emails, websites, social media links, subscriber counts, views, and country data in bulk — 1,000+ channels per run, no API key required.</strong></p>

<p align="center">
  <img src="https://img.shields.io/badge/YOUTUBE-CREATOR_LEADS-FF0000?style=for-the-badge&logo=youtube&logoColor=white" alt="YouTube Creator Leads">
  <img src="https://img.shields.io/badge/ENRICHMENT-EMAIL_WEBSITE_SOCIALS-00C853?style=for-the-badge" alt="Email Website Socials">
  <img src="https://img.shields.io/badge/SCALE-1%2C000%2B_CHANNELS-00B4D8?style=for-the-badge" alt="1000+ Channels">
  <img src="https://img.shields.io/badge/OUTPUT-JSON_CSV_EXCEL_API-1677FF?style=for-the-badge" alt="Export Formats">
  <img src="https://img.shields.io/badge/KEYLESS-PURE_HTTP-FFB000?style=for-the-badge" alt="Keyless Pure HTTP">
</p>

***

### ⚡ At a glance

| Feature | Details |
|---|---|
| **Target Data** | YouTube Creator & Brand Channels (`@handles`, `UC...` IDs, Channel About Pages & Linked Websites) |
| **Discovery Modes** | 20 One-Click Niche Presets + Custom Search Keywords + Direct Channel URLs / `@handles` |
| **Contact Extraction** | Business `email`, external `website`, `socialLinks` (Instagram, TikTok, X, LinkedIn, Discord, Twitch, Patreon, etc.) |
| **Website Fallback** | Optional automatic website crawl (`enrichFromWebsite`) when no email is listed on YouTube |
| **Scale & Pagination** | Deep continuation pagination + automatic keyword expansion supporting **1,000+ unique channels** |
| **Filtering** | Filter by `minSubscribers`, `maxChannelsPerKeyword`, and overall `maxChannels` |
| **Export & Sync** | Dataset (JSON, CSV, Excel, HTML) + automatic `OUTPUT` Key-Value Store mirror for `run-sync` API calls |

***

**Find YouTube creators and pull their contact details in bulk.** This **YouTube contact scraper** searches [YouTube](https://www.youtube.com) by keyword or niche preset — or takes a list of channels you already have — and extracts for every creator their **business email, linked website, social media profiles, subscriber count, total views, video count, country, and join date**. It is the fastest, most reliable way to **scrape YouTube** creator leads without opening hundreds of channel *About* tabs by hand — no YouTube Data API quota limits, no login, and no coding required.

Export your creator lead lists directly to **JSON, CSV, Excel, or the Apify API**.

> Built for **influencer marketing agencies, brand partnership and sponsorship managers, B2B creator-economy SaaS teams, talent scouts, PR teams, and growth marketers** who need clean, outreach-ready **YouTube lead generation** data at scale.

***

### 🔎 Why scrape YouTube channel contacts?

YouTube is the largest creator and video commerce ecosystem in the world. Almost every professional creator, educator, reviewer, and media brand publishes a **public business inquiry email, an official website, and cross-platform social links** (Instagram, TikTok, X/Twitter, Discord, LinkedIn, Patreon, Twitch) so sponsors and partners can reach them.

However, building a qualified outreach list manually is a major bottleneck:

- Contact details are split across the channel header, the *About* modal, description text, and external redirect links.
- Official YouTube API keys carry strict daily quota ceilings and do not return business emails or scrape external websites.
- Many creators omit their email from the YouTube description but display it prominently on the homepage of their linked personal website.

This **YouTube email extractor** and **channel contact scraper** automates the entire workflow in one fast, keyless run:

1. It discovers matching channels across your target niches or keywords using deep multi-page continuation pagination.
2. It visits each channel's *About* profile to extract subscriber counts, view metrics, country, description, external website, and social links.
3. If no business email is present on YouTube and `enrichFromWebsite: true` is enabled, it automatically fetches the creator's linked website to recover a verified domain contact address — while stripping out fake placeholder emails and Sentry/analytics tracking strings.

#### Common reasons teams scrape YouTube contacts

- **Influencer sponsorship & brand deals** — build niche creator shortlists filtered by `minSubscribers` with verified business emails and social handles in a single spreadsheet.
- **Creator agency & MCN lead generation** — prospect fast-growing YouTubers who need video editing, thumbnail design, sponsorship management, or merchandising services.
- **B2B SaaS & affiliate recruitment** — recruit tech reviewers, finance educators, and tutorial creators for affiliate programs and product launches.
- **Multi-channel outreach sequences** — combine direct `email` outreach with warm follow-ups on Instagram, TikTok, X, or LinkedIn using the extracted `socialLinks`.
- **CRM & media-kit enrichment** — paste an existing list of `@handles` or channel URLs into `channelUrls` and enrich every row with live subscriber counts, total views, country, and contact emails.
- **Competitive & niche mapping** — analyze which creators dominate a topic, how fast their view-to-subscriber ratios grow, and where they drive external traffic.

***

### ✨ What this YouTube scraper does

- ✅ **Three combinable input methods** — pick from **20 ready-made creator niches** (`topicPreset`), type unlimited **custom search keywords** (`searchKeywords`), or paste **specific channel URLs / `@handles` / `UC...` IDs** (`channelUrls`) — or combine all three in a single run.
- ✅ **Unlocked 1,000+ channel pagination** — follows YouTube search continuation tokens deep across pages and automatically expands seed keywords when `maxChannels` is set to hundreds or **1,000+ channels**.
- ✅ **Automatic website email enrichment (`enrichFromWebsite`)** — when a creator's YouTube page does not expose an email, the Actor checks their linked official website (capped at 512 KB per page for speed and memory safety) and prioritizes emails matching the website's own domain.
- ✅ **Strict email hygiene & noise filtering** — automatically removes bogus placeholders (`your@email.com`, `example@domain.com`), image filenames, and script error-tracking DSNs (`@*.ingest.sentry.io`, `wixpress.com`, `bugsnag.com`) so your `email` column contains only genuine contact addresses.
- ✅ **Complete social graph extraction** — parses and normalizes external channel links into `website`, `socialLinks` (Instagram, TikTok, Twitter/X, Facebook, LinkedIn, Discord, Twitch, Patreon, Threads, Reddit, Snapchat, Telegram, Pinterest, Spotify), and `allLinks`.
- ✅ **Normalized numeric metrics** — converts human-formatted counts (`"710K subscribers"`, `"2,266 videos"`) into clean integer strings (`subscribers: "710000"`, `videoCount: "2266"`, `viewCount: "204206017"`) for effortless sorting and CRM filtering alongside raw `subscribersText`.
- ✅ **Zero-input sample mode** — leave all inputs blank and the Actor runs a curated multi-niche discovery mix to return **100 diverse creator channels** out of the box.
- ✅ **Dual storage output** — pushes every record to the default **Apify Dataset** AND mirrors `{ count, channels }` to the `OUTPUT` Key-Value Store record so synchronous `run-sync` API callers receive the full payload immediately.

***

### 🎯 High-value use cases

| Team / Role | Workflow | Key fields used |
|---|---|---|
| **Influencer Marketing Managers** | Find mid-tier and macro creators (`minSubscribers: 25000`) in beauty, fitness, gaming, or tech with direct emails. | `channelName`, `handle`, `subscribers`, `country`, `email`, `socialLinks` |
| **B2B Growth & Affiliate Teams** | Discover SaaS, AI, finance, and business channels to recruit as affiliate and launch partners. | `channelName`, `email`, `website`, `viewCount`, `videoCount`, `description` |
| **Creator Economy Agencies** | Build outbound prospect lists of active creators who have websites and social profiles. | `handle`, `channelUrl`, `email`, `website`, `socialLinks`, `joinedDate` |
| **PR & Communications Teams** | Identify journalists, podcasters, and independent commentators by topic and region. | `channelName`, `country`, `email`, `website`, `description`, `subscribers` |
| **Data & RevOps Engineers** | Enrich internal CRM tables of YouTube URLs/handles via automated API calls. | `channelId`, `handle`, `subscribers`, `viewCount`, `email`, `website` |

***

### 📥 Input configuration

All fields are optional. Pick a niche preset, enter custom keywords, paste channel URLs, or leave everything empty for a 100-channel multi-niche sample.

| Field | Type | Default / Prefill | Description |
|---|---|---|---|
| `topicPreset` | `array<string>` | `[]` | One-click dropdown of 20 popular niches (`"tech reviewer"`, `"gaming"`, `"beauty and makeup"`, `"fitness and workout"`, `"cooking and recipes"`, `"travel vlogger"`, `"personal finance"`, `"business and marketing"`, `"podcast"`, etc.). |
| `searchKeywords` | `array<string>` | `["tech reviewer"]` | Custom niches or search queries (e.g., `"vegan recipes"`, `"AI tools tutorial"`, `"drone reviews"`). Combine freely with `topicPreset`. |
| `channelUrls` | `array<string>` | `[]` | Specific channels to enrich — accepts full URLs (`https://www.youtube.com/@mkbhd`), `@handles` (`@LinusTechTips`), or `UC...` channel IDs. |
| `maxChannels` | `integer` | `0` (prefill `50`) | Overall cap on total channels returned across all niches and keywords. Set `0` for unlimited, or `1000`+ for bulk runs. |
| `maxChannelsPerKeyword` | `integer` | `0` (prefill `50`) | Maximum channels to collect per keyword (`0` = auto-scaled by `maxChannels` / unlimited). |
| `minSubscribers` | `integer` | `0` | Only save channels with at least this many subscribers (e.g., `10000` for 10K+ creators). `0` keeps all channels. |
| `enrichFromWebsite` | `boolean` | `true` | When no email is found on the YouTube channel page, automatically fetch the channel's linked `website` to extract a contact email. |
| `maxConcurrency` | `integer` | `10` | Number of channels to process in parallel (`1`–`30`). Default `10` is fast and gentle. |
| `proxyConfiguration` | `object` | `{ "useApifyProxy": false }` | Optional Apify Proxy configuration. Off by default for zero proxy cost; enable for very large 1,000+ channel runs. |

#### Example 1 — Discover 1,000+ creators across multiple niches

```json
{
  "searchKeywords": [
    "tech reviewer",
    "pc gaming setup",
    "ai software tutorial",
    "mechanical keyboard review",
    "smart home tech"
  ],
  "maxChannels": 1000,
  "maxChannelsPerKeyword": 250,
  "minSubscribers": 5000,
  "enrichFromWebsite": true,
  "maxConcurrency": 15
}
```

#### Example 2 — Enrich a list of known `@handles` and channel URLs

```json
{
  "channelUrls": [
    "@mkbhd",
    "https://www.youtube.com/@LinusTechTips",
    "@dave2d",
    "UC-v54XQalOcx5yco3aTixrg"
  ],
  "enrichFromWebsite": true
}
```

#### Example 3 — Zero-typing niche preset run for mid-to-large creators

```json
{
  "topicPreset": [
    "beauty and makeup",
    "fitness and workout",
    "fashion and style"
  ],
  "maxChannels": 300,
  "minSubscribers": 50000,
  "enrichFromWebsite": true
}
```

***

### 📤 Output schema & field reference

Each dataset item represents **one unique YouTube channel** with normalized audience metrics and enriched contact details.

#### Sample JSON output

```json
{
  "channelName": "Chigz Tech Reviews",
  "handle": "@ChigzTech",
  "channelUrl": "http://www.youtube.com/@ChigzTech",
  "channelId": "UC-v54XQalOcx5yco3aTixrg",
  "subscribers": "710000",
  "subscribersText": "710K subscribers",
  "videoCount": "2266",
  "viewCount": "204206017",
  "country": "United Kingdom",
  "joinedDate": "Oct 2, 2011",
  "email": "chigz@chigztech.com",
  "website": "https://chigztech.com",
  "socialLinks": "https://twitter.com/ChigzTechReview, https://facebook.com/ChigzTechReviews, https://tiktok.com/@chigztech, https://instagram.com/chigztechreview",
  "allLinks": "https://chigztech.com, https://twitter.com/ChigzTechReview, https://facebook.com/ChigzTechReviews, https://tiktok.com/@chigztech, https://instagram.com/chigztechreview",
  "description": "Honest Tech Reviews • Comparisons • Buying Advice. Business Enquiries: chigz@chigztech.com",
  "aboutUrl": "https://www.youtube.com/@ChigzTech/about",
  "error": "",
  "scrapedAt": "2026-11-08T15:10:29.794Z"
}
```

#### 🆔 Channel Identity & Audience Metrics

| Field | Type | Coverage | Description |
|---|---|---|---|
| `channelName` | `string` | 🟢 High (~99%) | Official display name of the YouTube channel. |
| `handle` | `string` | 🟢 High (~98%) | YouTube `@handle` (e.g., `@ChigzTech`). |
| `channelUrl` | `string` | 🟢 High (~99%) | Canonical URL of the channel. |
| `channelId` | `string` | 🟢 High (~99%) | Unique YouTube `UC...` identifier (24 characters). |
| `subscribers` | `string` | 🟢 High (~96%) | Subscriber count parsed as a plain integer string (e.g., `"710000"`). |
| `subscribersText` | `string` | 🟢 High (~96%) | Human-readable subscriber count as displayed on YouTube (`"710K subscribers"`). |
| `videoCount` | `string` | 🟢 High (~96%) | Total public videos published by the channel as an integer string (`"2266"`). |
| `viewCount` | `string` | 🟢 High (~95%) | Lifetime channel views as an integer string (`"204206017"`). |
| `country` | `string` | 🟡 Conditional (~80%) | Creator's declared country on their *About* page (when published). |
| `joinedDate` | `string` | 🟢 High (~95%) | Channel creation date (e.g., `"Oct 2, 2011"`). |

#### 📧 Contact, Social & Enrichment Fields

| Field | Type | Coverage | Description |
|---|---|---|---|
| `email` | `string` | 🟡 Conditional (~38–55%) | Public business/contact email from the channel description, *About* page, or linked `website` (via `enrichFromWebsite`). |
| `website` | `string` | 🟡 Conditional (~35–50%) | Primary external website or store URL linked on the channel profile. |
| `socialLinks` | `string` | 🟡 Conditional (~55–70%) | Comma-separated list of social media URLs (Instagram, TikTok, X/Twitter, Facebook, LinkedIn, Discord, Twitch, Patreon, etc.). |
| `allLinks` | `string` | 🟡 Conditional (~68%) | Comma-separated list of all external URLs published on the channel's *About* tab. |
| `description` | `string` | 🟢 High (~95%) | Full text of the channel's *About* description. |
| `aboutUrl` | `string` | 🟢 High (100%) | Normalized `/about` URL fetched for the channel. |
| `error` | `string` | 🟢 High (100%) | Empty string `""` on success; populated only if a channel page returned an HTTP error. |
| `scrapedAt` | `string` | 🟢 High (100%) | ISO 8601 timestamp when the channel was scraped. |

***

### 🔁 Pagination, deduplication & 1,000+ scale

This **YouTube contact scraper** is built to scale smoothly from a quick 50-channel test to **1,000+ creator leads**:

1. **Deep continuation pagination:** For every keyword or niche preset, the Actor queries YouTube's channel search filter and iterates through continuation pages automatically until `maxChannelsPerKeyword` or `maxChannels` is reached.
2. **Automatic query expansion for 1,000+ runs:** When `maxChannels` exceeds what your initial keyword list can return on its own, the Actor automatically appends high-signal creator modifiers (`channel`, `official`, `vlog`, `podcast`, `tutorial`, `review`, `guide`, `tips`, `studio`, `tv`, `media`) to your seed keywords so single-keyword runs can still discover **1,000+ unique channels**.
3. **Canonical handle/URL deduplication:** Every discovered channel and input URL is normalized to its canonical `/about` key before scraping, guaranteeing **0 duplicate channels** even when multiple keywords overlap.
4. **Parallel worker pool (`maxConcurrency`):** Channel profile extraction and website email enrichment run concurrently (default `10`, configurable up to `30`), processing 50 channels in ~20–30 seconds and 1,000 channels in a few minutes.

***

### ⚙️ How to use & automate

1. Open **YouTube Channel Contact Scraper** in the Apify Console.
2. Select one or more **Popular niches** (`topicPreset`), type **Search keywords** (`searchKeywords`), or paste **Specific channels** (`channelUrls`).
3. Set **Max channels (total)** (`maxChannels`, e.g., `50` for a quick preview or `1000` for bulk lead generation) and optional **Minimum subscribers** (`minSubscribers`).
4. Click **Start** and watch live progress messages as channels are discovered and enriched.
5. Download your lead list in **CSV, Excel, or JSON**, or integrate directly with **HubSpot, Salesforce, Instantly, Smartlead, Make, Zapier, or Google Sheets**.

#### Call via Apify API (cURL)

```bash
curl -X POST "https://api.apify.com/v2/acts/haketa~youtube-contact-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchKeywords": ["tech reviewer", "ai tools"],
    "maxChannels": 200,
    "minSubscribers": 10000,
    "enrichFromWebsite": true
  }'
```

#### Python (`apify-client`) example

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("haketa/youtube-contact-scraper").call(run_input={
    "topicPreset": ["tech reviewer", "business and marketing"],
    "maxChannels": 250,
    "minSubscribers": 25000,
    "enrichFromWebsite": True,
})

for ch in client.dataset(run["defaultDatasetId"]).iterate_items():
    if ch.get("email"):
        print(f"{ch['channelName']} ({ch['subscribersText']}) -> {ch['email']} | {ch['website']}")
```

#### Node.js (`apify-client`) example

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('haketa/youtube-contact-scraper').call({
  searchKeywords: ['fitness and workout', 'home gym review', 'calisthenics coach'],
  maxChannels: 500,
  minSubscribers: 10000,
  enrichFromWebsite: true,
  maxConcurrency: 15,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
const withEmail = items.filter((c) => Boolean(c.email));
console.log(`Collected ${items.length} channels (${withEmail.length} with verified emails)`);
```

#### Available 20 Niche Presets (`topicPreset`)

| Preset value | Creator vertical | Typical sponsors & B2B buyers |
|---|---|---|
| `tech reviewer` | Consumer electronics, smartphones, laptops, PC builds | SaaS, VPNs, hardware brands, peripherals, apps |
| `gaming` | Gameplay, esports, hardware, indie & AAA game reviews | Gaming gear, energy drinks, mobile games, Discord tools |
| `beauty and makeup` | Skincare, cosmetics, tutorials, product hauls | D2C beauty, skincare clinics, fashion & lifestyle brands |
| `fitness and workout` | Gym routines, home workouts, running, strength training | Supplements, activewear, fitness apps, wearables |
| `cooking and recipes` | Home cooking, baking, meal prep, kitchen gear | Cookware, grocery delivery, specialty foods, appliances |
| `travel vlogger` | Destination guides, digital nomad, flights, hotels | Travel cards, luggage, booking platforms, eSIMs |
| `personal finance` | Investing, budgeting, credit cards, real estate, taxes | FinTech apps, brokerages, neobanks, tax software |
| `business and marketing` | Entrepreneurship, B2B SaaS, agencies, e-commerce | CRM, marketing automation, AI tools, B2B services |
| `music` | Music production, gear reviews, covers, vocal coaching | Audio plugins, instruments, microphones, distribution |
| `education and tutorials` | Coding, languages, productivity, academic explainers | EdTech platforms, bootcamps, productivity apps |
| `fashion and style` | Streetwear, menswear, capsule wardrobes, styling | Apparel brands, footwear, accessories, marketplaces |
| `health and wellness` | Nutrition, mindfulness, sleep, longevity, biohacking | Wellness brands, telehealth, supplements, trackers |
| `podcast` | Video podcasts, interviews, commentary, storytelling | Host-read ad networks, B2C/B2B sponsors, podcast tools |
| `real estate` | Property tours, real-estate investing, mortgage advice | PropTech, mortgage lenders, real-estate coaching |
| `photography` | Camera reviews, lighting, editing, cinematography | Camera gear, lenses, editing software, cloud storage |
| `home and DIY` | Woodworking, renovation, gardening, organization | Power tools, home improvement, smart home devices |
| `automotive and cars` | Car reviews, detailing, EVs, restoration, motorsport | Auto parts, insurance, EV chargers, detailing products |
| `family and parenting` | Family vlogs, baby gear, homeschooling, kids activities | Toy brands, family apps, household goods, apparel |
| `comedy` | Sketches, commentary, stand-up, entertainment | Consumer apps, streaming, snacks, broad-reach brands |
| `science and technology` | Deep tech, space, engineering, physics, AI research | STEM platforms, learning subscriptions, tech brands |

***

### 🔌 CRM & cold-outreach automation workflows

- **Clay / Apollo / HubSpot enrichment:** Trigger the Actor via webhook with a batch of `channelUrls` or `searchKeywords`, map `email`, `website`, `subscribers`, and `socialLinks` directly into your lead table, and score leads by `Number(subscribers)` and `Number(viewCount)`.
- **Instantly / Smartlead / Lemlist sequences:** Filter your exported dataset to rows where `email !== ""`, then use `channelName`, `handle`, `subscribersText`, and `country` as personalized merge variables in your cold email copy.
- **Scheduled weekly niche monitoring:** Schedule the Actor on Apify to run every Monday across your core keywords and push newly discovered creators to Google Sheets or Slack via Make or Zapier.

***

### 💡 Pro tips for higher email coverage

- **Keep `enrichFromWebsite: true` enabled:** Roughly 20–30% of recovered business emails come from the creator's linked website when they don't write their email directly in the YouTube description.
- **Target mid-size and business-focused niches:** Channels with `minSubscribers: 5000` to `500000` in B2B, tech, finance, fitness, beauty, and education publish public inquiry emails at a much higher rate than casual gaming or meme channels.
- **Use specific vertical keywords:** Instead of just `"fitness"`, run `["kettlebell workout", "calisthenics coach", "marathon training", "mobility routine"]` to uncover hundreds of specialized creators your competitors miss.

***

### ⚠️ Honest limitations

- **Publicly published emails only:** Some YouTube emails sit behind an interactive reCAPTCHA "View email address" button inside logged-in sessions. This Actor does not solve CAPTCHAs; instead, it extracts emails published in channel descriptions, *About* metadata, and the creator's linked external website (`enrichFromWebsite`).
- **Creator opt-in availability:** Not every creator publishes an email or website. Across broad runs, ~68% of channels include at least one direct contact channel (`email`, `website`, or `socialLinks`), while 100% of reachable channels return full audience statistics (`subscribers`, `viewCount`, `videoCount`).

***

### ❓ Frequently Asked Questions (FAQ)

#### Do I need a YouTube Data API key or Google login?

No. This Actor is 100% keyless and requires no Google account, cookies, or API key.

#### How many channels can I scrape in a single run?

You can collect from **10 to 1,000+ channels** in a single run. Set `maxChannels` to your target number (or `0` for unlimited across your keyword list) and `maxChannelsPerKeyword: 0` so each keyword scales automatically.

#### How does website email enrichment work?

When a channel links to an external website (e.g., `https://chigztech.com`) on its *About* page and no email was found on YouTube, the Actor fetches the website homepage, filters out script/tracking noise, and selects the best contact email (preferring addresses on the website's own domain).

#### Can I enrich an existing list of `@handles` or channel URLs?

Yes! Paste any mix of `@handles`, `https://www.youtube.com/@...` URLs, or `UC...` channel IDs into `channelUrls`. Leave `searchKeywords` and `topicPreset` empty to scrape only your exact list.

#### Does this Actor work with synchronous `run-sync` API calls?

Yes. In addition to pushing each channel to the default Apify Dataset, the Actor mirrors `{ count, channels }` to the `OUTPUT` Key-Value Store record upon completion.

#### How are duplicate channels prevented across overlapping keywords?

Every discovered channel URL, `@handle`, and `UC...` ID is normalized to its canonical `/about` URL path in lowercase before scraping. Even if 10 different keywords surface the same creator, that channel is fetched and saved only once (`0% duplicates`).

#### What happens if I leave all inputs empty?

If `topicPreset`, `searchKeywords`, and `channelUrls` are all left empty, the Actor automatically seeds a curated 18-niche discovery mix (`tech reviewer`, `gaming`, `beauty and makeup`, `fitness and workout`, `cooking and recipes`, `travel vlogger`, `personal finance`, `podcast`, etc.) and collects `100` diverse creator channels (or your custom `maxChannels` target).

#### Are fake or tracking emails filtered out?

Yes. Automated scripts on external websites often embed error-tracking tokens that look like emails (e.g., `12345abc@o1.ingest.sentry.io`, `user@domain.com`, `example@mysite.com`, or `.png`/`.webp` asset names). The Actor strips all placeholder and analytics tracking strings so only real contact addresses are saved.

***

### 🔗 Related scrapers for influencer & B2B lead generation

- [YouTube Comments Scraper](https://apify.com/haketa/youtube-comments-scraper) — extract viewer comments, replies, likes, and author handles from any YouTube video.
- [Podcast Host Contact Scraper](https://apify.com/haketa/podcast-contact-scraper) — pull verified host emails, websites, and RSS metadata from Apple Podcasts.
- [Linktree Scraper](https://apify.com/haketa/linktree-scraper) — extract all social links, store URLs, and contact links from creator Linktree pages.
- [Patreon Scraper](https://apify.com/haketa/patreon-scraper) — discover Patreon creators, membership counts, earnings, and social links.
- [Email & Contact Extractor](https://apify.com/haketa/email-extractor) — crawl any list of domains for emails, phone numbers, and social profiles.
- [Bulk Email Verifier](https://apify.com/haketa/bulk-email-verifier) — verify MX records, disposable domains, and deliverability before launching outreach.

***

### 📋 Changelog

- **v1.2 (2026-11)** — Unlocked **1,000+ channel pagination**: removed the 500-item schema ceiling on `maxChannelsPerKeyword` (now defaults to `0` = auto-scaled), removed the empty-run `hardCap` clamp when `maxChannels` is explicitly provided, scaled continuation pagination depth dynamically with `limit`, added automatic creator query expansion for high-volume single-keyword runs, and set fast prefill (`maxChannels: 50`) for sub-45-second default runs.
- **v1.1 (2026-10)** — Added Sentry/analytics tracking DSN filtering (`isTrackingEmail`), 512 KB memory-safe website enrichment cap, and `OUTPUT` Key-Value Store mirroring.
- **v1.0 (2026-09)** — Initial release with 20 niche presets, keyword continuation search, `@handle` / URL enrichment, and website email recovery.

# Changelog

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

# Actor input Schema

## `topicPreset` (type: `array`):

Pick one or more popular creator niches and instantly get matching channels with their contact details. No typing needed — just tick the niches you want. Leave everything empty to get a ready-made mix of top niches.

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

Type your own niches or topics to find channels by (e.g. "vegan recipes", "home workout", "drone reviews"). Each keyword returns matching channels up to the limit below. Combine freely with the niches picker above.

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

Already know which channels you want? Add them here as full URLs, @handles or channel IDs (e.g. "@mkbhd", "https://youtube.com/@LinusTechTips"). Optional — most users just pick niches or type keywords above.

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

Overall cap on how many channels to return across all niches and keywords. Keeps runs fast and affordable. 0 = no overall cap.

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

How many channels to collect for each niche or keyword. Set 0 for auto / unlimited (governed by Max channels).

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

Only keep channels with at least this many subscribers, so you can focus on bigger creators. 0 = keep all.

## `enrichFromWebsite` (type: `boolean`):

If no email is on the channel page, open the channel's linked website and look for a contact email there — great for higher email coverage.

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

How many channels to process in parallel. Higher is faster.

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

Apify Proxy. Off by default; enable (and raise for large runs) if you need extra reliability on very big jobs.

## Actor input object example

```json
{
  "searchKeywords": [
    "tech reviewer"
  ],
  "maxChannels": 50,
  "maxChannelsPerKeyword": 50,
  "minSubscribers": 0,
  "enrichFromWebsite": true,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Channel name

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

@handle

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

Canonical channel URL

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

YouTube channel ID

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

Subscriber count (number)

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

Subscriber count as shown

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

Number of videos

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

Total channel views

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

Channel country

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

Join date

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

Business/contact email

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

Linked website

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

Social media links

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

All external links

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

Channel description

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

About page scraped

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

Error, if any

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

Timestamp

# 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 = {
    "searchKeywords": [
        "tech reviewer"
    ],
    "maxChannels": 50,
    "maxChannelsPerKeyword": 50,
    "maxConcurrency": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/youtube-contact-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 = {
    "searchKeywords": ["tech reviewer"],
    "maxChannels": 50,
    "maxChannelsPerKeyword": 50,
    "maxConcurrency": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/youtube-contact-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 '{
  "searchKeywords": [
    "tech reviewer"
  ],
  "maxChannels": 50,
  "maxChannelsPerKeyword": 50,
  "maxConcurrency": 10
}' |
apify call haketa/youtube-contact-scraper --silent --output-dataset

```

## MCP server setup

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