YouTube Channel Email Scraper
Find the business emails creators publish in their YouTube channel description, plus their linked site's contact pages. $1.50 per 1,000 channels.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
channelUrls,maxChannels,crawlLinkedWebsites(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0015 per resolved YouTube channel = $1.5 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Resolved YouTube channel | One resolved YouTube channel with public contact attribution. | $0.0015 |
| Linked website audit | Bounded audit of up to two linked public websites for contact pages. | $0.0025 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-07-27, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
channelUrls | Channel URLs, @handles, or UC channel IDs. Only public descriptions and linked public websites are inspected. | array |
maxChannels | Maximum number of unique channels to process in this run. | integer |
crawlLinkedWebsites | Optionally audit up to two linked public websites for contact pages. This add-on is billed separately from channel resolution. | boolean |
maxWebsitePages | Maximum public HTML pages to check per linked website, including the home page. The bound protects predictable cost. | integer |
What you get
A structured dataset — each result includes fields like:
channelNamechannelUrlprimaryEmailexternalWebsiteContactswebsiteUrlsprivacyNoteExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in YouTube & Creator Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
YouTube Scraper
Search YouTube or scrape a channel: title, channel, views, publish date, length and thumbnail. No API key or quota. $0.135 per 1,000 videos.
YouTube Channel Monitor — New Upload Tracker
Watch YouTube channels and get only their new uploads: title, URL, publish date, views, thumbnail. $0.01 per new video.
YouTube Video & Audio Downloader
Download YouTube videos as MP4 up to 8K, audio as MP3 or subtitles as .srt. No login or API key. You pay per megabyte delivered.
YouTube Video Uploader
Upload videos to your YouTube channel from a URL with OAuth. Set title, tags, category, thumbnail, privacy and publish time. $0.05 per upload.
AI Viral Clip Cutter — Long Video to Shorts
Turn a long podcast or interview into ranked vertical clips. AI scores each moment and captions follow every word. $0.20 per clip row, samples included.
AI Text-to-Speech Voiceover
Turn any script into an AI voiceover file: MP3, WAV, Opus or AAC. Pick the voice, speed and format. $40.00 per 1,000 voiceovers ($0.04 each).
Where this tool sits
- Categories
- YouTube & Creator Tools B2B Leads & Contact Data
- Platforms
- YouTube
YouTube Channel Email Scraper: the business address a creator published on their own channel
Give it channel links, @handles or UC... ids and you get one row per channel holding the e-mail addresses that creator wrote into their own description, each one tagged with the page it was read from. Linked websites are an optional second pass.
The awkward part first. Plenty of creators publish no address at all. Those channels still come back as a successful row with an empty emails list, and they still count, because resolving the channel is the work either way. Price a list of five hundred on that basis, not on the ones that hit.
| Input | Channel links, @handles or UC... channel ids |
| Output | One row per channel |
| Ceiling | 500 channels per run |
| Account needed | None from you |
| Price | $1.50 per 1,000 channels, flat on every plan |
🔍 What YouTube Channel Email Scraper does
It reads the public About view of every channel on your list and pulls out the addresses written into the description. https://www.youtube.com/@mkbhd, @mkbhd and a bare UC... id all mean the same channel, so you can paste whatever forms your list already has.
Each address arrives with a source. emailSources carries one entry per address with its sourceType and the exact sourceUrl, so you can open that page and see it yourself before anyone gets a message.
primaryEmail is only ever an address from the channel description. Anything picked up on a linked website stays in externalWebsiteContacts and is never promoted, because a shop's support inbox is not the creator's business contact, and treating it as one is how an outreach list goes bad.
📥 What you give it
{
"channelUrls": ["https://www.youtube.com/@mkbhd", "@Apify"],
"maxChannels": 50,
"crawlLinkedWebsites": false
}
| Field | Default | What it is |
|---|---|---|
channelUrls | none | One entry per channel: a youtube.com link, an @handle or a UC... id. Anything off youtube.com comes back as a BAD_INPUT row. |
maxChannels | 50 | Stop after this many entries, counting from the top of your list. Up to 500. |
crawlLinkedWebsites | false | Also look at the sites the channel links to. Costs extra, see below. |
maxWebsitePages | 2 | Pages read per linked site, home page included. The ceiling really is 2. |
proxyConfiguration | off | Leave it alone unless you have your own network you want the traffic to leave through. |
Run it with the input empty and you get one labelled sample row, free, so you can look at the shape before spending anything.
📤 What you get back
A real row from a real run. The fixed privacy note at the bottom is cut short so the block stays readable:
{
"ok": true,
"channelName": "Marques Brownlee",
"channelUrl": "https://www.youtube.com/@mkbhd/about",
"emails": ["[email protected]"],
"primaryEmail": "[email protected]",
"emailSources": [
{
"email": "[email protected]",
"sourceType": "channel_description",
"sourceUrl": "https://www.youtube.com/@mkbhd/about"
}
],
"externalWebsiteContacts": [],
"websiteUrls": ["http://shop.mkbhd.com/", "http://reddit.com/"],
"websitesChecked": [],
"privacyNote": "Only emails openly published in the channel description or linked public website pages are returned. ..."
}
| Field | What it is |
|---|---|
channelUrl | Where the row was actually read from, after redirects. Handy when a handle has been renamed. |
primaryEmail | The first address in the channel description, or null. Never an address off a website. |
emails | All the addresses on the row, description and linked sites together. |
emailSources | One entry per address: channel_description or linked_public_website, plus the page it came from. |
externalWebsiteContacts | Addresses found on a linked site, kept apart from the creator's own. Empty unless you turn the site pass on. |
websiteUrls | The sites the channel links to, reduced to their root. YouTube and Google links, social sites, shorteners and file hosts are dropped first. |
websitesChecked | What the site pass actually opened and what each page answered. Empty when the pass is off. |
🧾 Reading the output
Three kinds of row land in your dataset.
| Row | How to spot it | Billed |
|---|---|---|
| A real channel | ok: true with a channelUrl | yes |
| The sample row | _sample: true | no |
| A diagnostic | ok: false and an errorCode | no |
| Code | What it means |
|---|---|
BAD_INPUT | That entry was not a youtube.com link, a handle or a channel id. |
BLOCKED | YouTube answered 403 for that channel on this run. |
HTTP_404, HTTP_429 and other HTTP_ codes | YouTube answered with that status instead of the page. |
TIMEOUT | The page did not answer inside the request limit. |
RESPONSE_TOO_LARGE | The page came back bigger than the actor accepts. |
NETWORK | The connection itself failed. |
NO_RESULTS | Nothing in the whole list resolved to a channel. |
INTERNAL_ERROR | The run hit something unexpected. Send us the run id. |
A diagnostic row never fails the run and is never billed.
▶️ How to run it
1. Open YouTube Channel Email Scraper and click Try for free. 2. Paste your channels into YouTube channels, one per line. 3. Set Maximum channels low while you are testing, since you pay per channel. 4. Leave Check linked public websites off for the first run. Turn it on once you know the channel pass gives you what you need. 5. Click Start, then download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
💰 How much does it cost?
$1.50 per 1,000 channels. Flat on every Apify plan, no volume tiers.
The linked-site pass is the one extra. Tick Check linked public websites and a channel where a site was attempted costs $2.50 per 1,000 on top. Leave the box alone and you pay the channel price only.
A channel that publishes no address still counts as a channel. The sample row and every diagnostic row are free, and if nothing resolves, no rows are charged.
💡 What people use it for
- Building a sponsorship short list. Pull a few hundred channels in a niche, keep the ones with a
real business address, and open YouTube only for those.
- Checking a list you already bought or built, against what the creator actually publishes today.
- Finding the right inbox. A creator often lists one address for business and links a site with a
different one for support, and the row keeps them apart.
- Research on a niche: what share of channels publish any contact route at all.
🚧 What it does not do
- No hidden addresses. YouTube keeps some behind a click-to-reveal check. This never touches
that button, so if the creator did not write the address in plain text, it is not in the output.
- No guessing. It never invents
firstname@domainand never falls back to a bought contacts
database.
- A written-out address is converted, and that conversion is literal.
name at domain dot com
is read as an address, which also means ordinary prose like "available at Amazon.com" can produce one. Check emailSources and open the page before you mail anyone.
- Addresses with non-ASCII characters are dropped rather than returned half-right.
- The About view only. No videos, no comments, no subscriber history.
- Two linked sites per channel, two pages each, same host. The bound is deliberate and it is
not raisable.
maxChannelscounts your raw list, before duplicates are collapsed, so the same channel
written as a handle and as a UC... id takes two slots and is read twice.
- Channels are read one at a time and the run stops after five minutes. A list in the hundreds
may not reach the end. Split it across runs.
- It does not send anything. No mail, no messages, no contact form.
🧭 Which YouTube actor do you need?
| If you want | Use |
|---|---|
| The business address a channel publishes | This one |
| Videos from a channel or a keyword search | YouTube Scraper |
| Shorts from a channel or a keyword | YouTube Shorts Scraper |
| Only the new uploads from a watch list | YouTube Upload Monitor |
| The video file itself | YouTube Downloader Pro |
❓ Questions people ask
Do I need a YouTube account or an API key? Neither. Channels are read the way a logged-out visitor sees them.
What happens on a channel with no address? A successful row with an empty emails list, and it counts as a channel. That is the main thing to budget for.
Can it get an address YouTube hides? No. The reveal button is behind a check meant to be passed by a person, and this leaves it alone.
Is this legal? It reads public channel pages and public website pages only. The output is personal contact data, which GDPR, CAN-SPAM and similar laws cover, so you need a lawful reason to collect it and to write to anyone. Apify's write-up on the legality of web scraping is a reasonable starting point, and we are not lawyers.
Can I run it on a schedule? Yes. Nothing is held between runs, so the same list is safe to repeat. Diff on channelUrl and primaryEmail to see what changed.
🆘 If something breaks
Open the Issues tab on the actor page. Include the channels you used and the run id, and the log is usually enough for us to see what happened.