YouTube Channel Email & Lead Scraper
Pricing
from $60.00 / 1,000 channel records
YouTube Channel Email & Lead Scraper
Bulk-enrich YouTube channels with identity, activity stats, business email when public, and 8 social profile URLs. 97% reachable contact coverage across verified channels. Built for cold-outreach agencies and creator-economy sales teams.
Pricing
from $60.00 / 1,000 channel records
Rating
0.0
(0)
Developer
Nate Schnell
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Turn a list of YouTube channels into a clean lead-gen dataset. Pass channel handles, IDs, or URLs — get back identity, activity stats, business email (when public), and every social/website link the channel exposes.
Verified against 89 real channels (mega creators, mid-tier creators, edu, news, gaming, music) in May 2026:
- 97% of channels yielded at least one reachable contact path
- 12% had a plaintext business email in their description (e.g.
business@MKBHD.com) - 55% had a gated business email signal (YouTube confirms an email exists behind sign-in — high-value triage signal for manual lookup)
- 64% had Instagram, 62% had Twitter, 76% had a website link
- 100% of valid channels yielded full identity (channel ID, handle, name, joined date, avatar)
What you get per channel
{"channelId": "UCBJycsmduvYEL83R_U4JriQ","handle": "@mkbhd","name": "Marques Brownlee","subscriberCount": "21000000","videoCount": "1821","viewCount": "5395779547","country": "United States","businessEmail": "business@MKBHD.com","hasGatedBusinessEmail": "true","description": "MKBHD: Quality Tech Videos | YouTuber | Geek...","joinedDate": "Mar 21, 2008","vanityUrl": "http://www.youtube.com/@mkbhd","keywords": "MKBHD MarquesBrownlee Marques Brownlee","avatarUrl": "https://yt3.googleusercontent.com/...","rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=...","websiteUrl": null,"instagramUrl": "http://instagram.com/MKBHD","twitterUrl": "http://twitter.com/MKBHD","tiktokUrl": null,"facebookUrl": null,"patreonUrl": null,"linkedinUrl": null,"discordUrl": "http://discord.gg/MKBHD","linksJson": "[{\"title\":\"Twitter\",\"url\":\"http://twitter.com/MKBHD\",\"host\":\"twitter.com\"}, ...]"}
Numeric fields (subscriberCount, videoCount, viewCount) are normalized to integer strings — "21M subscribers" becomes "21000000". Compact suffixes (K, M, B), comma-grouped digits, and accessibility labels are all handled.
Social URLs are unwrapped from YouTube's /redirect proxy — you get the actual instagram.com/handle URL, not the obfuscated tracking link.
Common workflows
1. Cold outreach lead enrichment. Pass 1,000 creator handles → keep the 12% with plaintext email + the 55% with a gated email signal worth manual lookup + everyone with an Instagram/Twitter for DM outreach. Realistic conversion-ready list per 1,000 channels: ~600–700.
2. Influencer due-diligence. Verify a channel's join date, subscriber count, country, and social presence before sending a sponsorship offer. Useful for catching dead channels and bot inflation.
3. Creator-economy SaaS onboarding. Bulk-enrich a customer's competitor list with full social graph and activity stats — no manual copy-paste from YouTube About pages.
4. Newsletter / podcast partnership sourcing. Pull country + business email + website for a vertical (gaming, food, fitness) to build a tier-1 partnership pipeline.
Input
{"channels": ["@mkbhd", "@veritasium", "UCBJycsmduvYEL83R_U4JriQ", "https://www.youtube.com/@kurzgesagt"],"extractEmailOnly": false,"maxItems": 1000,"maxConcurrency": 4,"requestTimeoutSecs": 45,"proxyMode": "none"}
| Field | Type | Default | Notes |
|---|---|---|---|
channels | string[] | — | Handles (@mkbhd), channel IDs (UC...), or full URLs. The actor normalizes everything to a /about URL. |
startUrls | object[] | — | Alternative input form. Standard Apify { "url": "..." } objects. |
extractEmailOnly | boolean | false | If true, only emit records where businessEmail is non-null. |
maxItems | integer | 100 | Hard cap on records pushed to the dataset. |
maxConcurrency | integer | 4 | Browser concurrency. Increase if you bump memory; decrease if you see CPU throttling. |
requestTimeoutSecs | integer | 60 | Per-channel timeout. 404s fail in <1s regardless. |
proxyMode | enum | none | none works for YouTube at small/medium volume. Use apify_proxy_datacenter for higher throughput, apify_proxy_residential only if you see blocks. |
Output
Dataset is plain JSON, one record per channel. Field reference:
- Identity (100% reliable on valid channels):
channelId,handle,name,vanityUrl,joinedDate,avatarUrl,rssUrl - Activity (97% reliable):
subscriberCount,videoCount,viewCount,country,description,keywords - Contact (variable, see coverage notes):
businessEmail,hasGatedBusinessEmail - Social graph:
websiteUrl,instagramUrl,twitterUrl,tiktokUrl,facebookUrl,patreonUrl,linkedinUrl,discordUrl - Full link dump:
linksJson— JSON string array of every external link with title, url, host
Every field is string | null. Numeric fields are normalized integer strings. Boolean fields are "true" / "false" strings (for clean CSV export compatibility).
What this actor does NOT do
- It does not log in to YouTube. The plaintext
businessEmailfield is only populated when a creator puts their email in their public channel description (~12% of channels). When YouTube has a business email behind their "Sign in to see email address" gate, we surfacehasGatedBusinessEmail: "true"— but we don't bypass the gate. - It does not scrape video lists, comments, or analytics. One channel = one record. If you need video-level data, use a dedicated YouTube Video Scraper actor.
- It does not deduplicate. Pass each channel once.
Performance & cost
Validated on Apify cloud, May 2026, 100-channel run, 4096 MB:
- 3.8s per channel average (single-CPU concurrency; bump memory to 8192 MB for 4-6× concurrent)
- $0.001 per channel actual Apify compute cost
- 404 / missing channels fail in <1s (no 30s timeout drag)
- 0 crashes across 100 channels including 11 intentionally-bad handles
Quickstart
# Run locally (requires Apify CLI + node 22)apify call --input '{"channels": ["@mkbhd", "@veritasium"]}'# Or via the APIcurl -X POST 'https://api.apify.com/v2/acts/<actor-id>/runs?token=<your-token>' \-H 'Content-Type: application/json' \-d '{"channels": ["@mkbhd", "@veritasium"]}'
Maintenance
If YouTube changes the embedded ytInitialData structure (specifically channelMetadataRenderer or aboutChannelViewModel), the parser may stop yielding some fields. The actor will degrade gracefully — channelId, handle, and at least one of identity/activity will still resolve — but I'll ship an update within 48 hours of detection. Open an issue on Apify Console for any field that suddenly drops below its baseline.