Youtube Creator Leads Finder avatar

Youtube Creator Leads Finder

Pricing

from $4.80 / 1,000 creator leads

Go to Apify Store
Youtube Creator Leads Finder

Youtube Creator Leads Finder

YouTube Creator Leads Finder discovers YouTube creators by keyword/niche, filters channels by region and subscriber size, then extracts public contact signals from About pages—emails, websites, and social links—to build outreach-ready lead lists.

Pricing

from $4.80 / 1,000 creator leads

Rating

0.0

(0)

Developer

Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

1

Bookmarked

67

Total users

8

Monthly active users

7 days ago

Last modified

Share

Find the right creators. Then find the best way to reach them.

Discover YouTube creators by niche and export outreach-ready leads — business emails, Instagram, X, TikTok, LinkedIn and websites — alongside exact subscriber, view and video counts. Filter to the creator size you actually sell to before you spend anything.

YouTube Creator Leads Finder


What it does

  • Discovers creators from keyword/niche searches — you don't need a channel list to start
  • Enriches channels you already have — paste handles, URLs, IDs or even video links
  • Qualifies them by subscriber range, so you only keep creators in your target tier
  • Extracts public contact details from each channel's About page
  • Tells you when it can't — a detected-but-gated email is reported, not silently dropped

What it does NOT do

  • Does not reveal YouTube's protected business email. Some channels hide their address behind a "View email address" verification wall. This Actor does not bypass that — it reports hasHiddenEmail: true so you know one exists, and moves on.
  • ⚠️ Search Region is not a country filter. It changes how YouTube ranks results for a market; it does not guarantee the creators returned are based there. For a real filter on the creator's own declared country, use Creator Country — see the caveat below.
  • Does not scrape private, deleted or age-gated channels. These are reported and skipped.
  • ⚠️ isVerified is not currently populated — it is always null. No data source available to this Actor reports the verified badge reliably: the YouTube Data API does not expose it at all, and the browserless extraction path returns it inconsistently (it reports unverified for channels that are plainly verified). Rather than fill the column with a confident false that would be wrong for many large creators, we return null, which means "unknown" — not "unverified". Treat the field as reserved; do not filter or score on it.

Why this Actor

Most YouTube tools answer one question: "Given this channel, can I find an email?"

This one answers the whole workflow: find creators that fit your campaign, then find every public route to reach them.

This ActorTypical YouTube email scraper
Subscriber range targetingminSubscribers / maxSubscribers
Niche classification✅ 23 categories from YouTube's own topic data
Metric accuracyExact integers via YouTube Data API v3 (4480)⚠️ Parsed from display text ("4.4K")
Stable primary keychannelId + handle + URL⚠️ Often URL only
Output shape✅ Flat — imports straight into Sheets/CRM⚠️ Often nested objects

At a Glance

FeatureValue
ArchitectureYouTube Data API v3 + browserless HTML parsing (no Chromium)
Memory1 GB default (up to 4 GB if you force browser mode)
Throughput~100 channels in a few minutes
Output Fields44 structured fields per creator
Contact Success40-60% have social links, 10-20% have a visible email
Concurrency20 parallel requests
DeduplicationAutomatic by channelId
Login / cookiesNone required

How It Works

  1. Search YouTube — enter keywords or niches (e.g. "AI tools", "Shopify dropshipping")
  2. Discover channels — from both channel results and video results
  3. Fetch metadata — YouTube Data API v3 returns exact subscribers, views, country and niche
  4. Filter by size — min/max subscriber thresholds applied before anything is saved
  5. Extract contacts — the About page is parsed for email, website and social profiles
  6. Export — structured dataset ready for CRM import or outreach

Input

Supply Search Keywords, Channel Inputs, or both. At least one is required.

ParameterTypeDefaultDescription
searchQueriesArray[]Keywords to discover creators you don't know yet. Max 20 per run
channelInputsArray[]Channels you already have, to enrich. Max 500 per run. Searching is free either way
maxChannelsInteger10Max channels per keyword (1–500)
maxTotalChannelsInteger100Spend cap — hard ceiling on leads saved across the whole run. 0 = no limit
minSubscribersInteger0Minimum subscriber count
maxSubscribersInteger0Maximum subscriber count (0 = no limit)
regionCodeString"US"Search Region — ISO 3166-1 alpha-2 code. Ranking/localization only, not a creator-country filter
searchLanguageString"en"ISO 639-1 language for YouTube's search interface. Pair with Search Region for non-English markets
channelCountryArray[]Creator Country — a real filter. Keeps only creators declaring one of these ISO codes, e.g. ["DE","AT","CH"]
joinedAfterString""Keep channels created on/after this date (YYYY-MM-DD)
joinedBeforeString""Keep channels created on/before this date (YYYY-MM-DD)
excludeKeywordsString[][]Skip creators matching any of these words — for ambiguous search terms. Skipped before contact extraction, so they cost nothing
includeSocialLinksBooleantrueExtract Contacts — visit the About page for email, website and socials
scanLinkedWebsitesBooleantrueIf YouTube has no email, scan the creator's site(s) — bounded: up to 3 sites, 6 pages each
scanVideoDescriptionsBooleantrueLast resort — check the 50 most recent video descriptions
validateEmailsBooleanfalseMX + disposable/role check on each address found

maxTotalChannels is your budget control. Without it, a run costs up to keywords × maxChannels. With it, you know the ceiling before you press Start.

Accepted Channel Input formats

Mix these freely in the same list — duplicates across formats are collapsed automatically.

FormatExample
Handle@mkbhd
Channel URLhttps://www.youtube.com/@veritasium
Channel IDUCBJycsmduvYEL83R_U4JriQ
Channel ID URLhttps://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ
Video URLhttps://www.youtube.com/watch?v=dQw4w9WgXcQ → resolved to the uploader
Short video URLhttps://youtu.be/dQw4w9WgXcQ
Shorts / Livehttps://www.youtube.com/shorts/...
Legacyhttps://www.youtube.com/c/Name, /user/Name

Anything unrecognised is listed in the run log and skipped — never silently dropped.

Search Region vs Creator Country

These are different things and it matters:

What it doesGuarantees the creator is there?
Search Region (regionCode)Localizes and ranks YouTube's search results for a market❌ No
Creator Country (channelCountry)Filters on the creator's own declared country, after extraction✅ Yes

⚠️ Read this before using Creator Country. Many creators never set a country on their channel. While the filter is active, those channels are skipped — we can't claim a match for a country that was never declared. The run log reports exactly how many were dropped for this reason, so you can decide whether to widen the filter.

Example — German-speaking creators, established channels only

{
"searchQueries": ["technik reviews"],
"regionCode": "DE",
"searchLanguage": "de",
"channelCountry": ["DE", "AT", "CH"],
"joinedBefore": "2022-01-01",
"minSubscribers": 5000
}

regionCode + searchLanguage shape what YouTube shows us; channelCountry then filters what we keep.

Example 1 — Find AI creators

{
"searchQueries": ["AI tools"],
"maxChannels": 10,
"maxTotalChannels": 100,
"regionCode": "US"
}

Example 2 — Micro-influencers with an email, outreach-ready

{
"searchQueries": ["fitness workouts", "home gym"],
"maxChannels": 50,
"maxTotalChannels": 100,
"minSubscribers": 10000,
"maxSubscribers": 500000
}

Example 3 — Enrich a list you already have (no search, no search charge)

{
"channelInputs": [
"@mkbhd",
"https://www.youtube.com/@veritasium",
"UCBJycsmduvYEL83R_U4JriQ",
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
],
"maxTotalChannels": 500
}

Example 4 — Discover and enrich in one run

{
"searchQueries": ["AI automation tools"],
"channelInputs": ["@mkbhd", "@LinusTechTips"],
"maxChannels": 50,
"maxTotalChannels": 100,
"minSubscribers": 10000
}

Output

Every run returns 44 structured fields per creator. Below is one real record from a live run, shown through each of the three dataset views you can switch between in the Apify UI.

Output views

Overview

Key columns for a quick scan — who the creator is, how big they are, and whether you can reach them.

{
"channelName": "The Diary Of A CEO",
"channelHandle": "@thediaryofaceo",
"channelURL": "https://www.youtube.com/@thediaryofaceo",
"subscribers": 18600000,
"country": "GB",
"niche": "Lifestyle",
"email": "commercial@stevenbartlett.com",
"hasEmail": true,
"hasContact": true,
"contactabilityScore": 72,
"qualificationTier": "Warm",
"isQualified": true,
"status": "success",
"scrapedAt": "2026-07-29T14:17:00.134Z"
}

Contact Details

Everything needed for outreach — email, website and every social profile found. Import this view straight into a CRM.

{
"channelName": "The Diary Of A CEO",
"channelHandle": "@thediaryofaceo",
"channelURL": "https://www.youtube.com/@thediaryofaceo",
"email": "commercial@stevenbartlett.com",
"emailSource": "linked_website",
"emailConfidence": 70,
"emailValidationStatus": "mx_valid",
"emailCount": 4,
"hasEmail": true,
"hasHiddenEmail": false,
"website": "https://www.stevenbartlett.com/",
"instagram": "https://www.instagram.com/steven/",
"twitter": "https://twitter.com/StevenBartlett",
"tiktok": null,
"linkedin": "https://www.linkedin.com/in/steven-bartlett-56986834",
"facebook": "https://www.facebook.com/SteveBartlettShow/?ref=br_rs",
"primaryAggregatorUrl": null,
"contactLinks": [],
"hasLinks": true,
"hasContact": true,
"contactabilityScore": 72,
"qualificationTier": "Warm"
}

Creator Profile

Full channel profile and metrics for qualification and analysis, including how each lead was discovered.

{
"channelName": "The Diary Of A CEO",
"channelId": "UCGq-a57w-aPwyi3pW7XLiHw",
"channelHandle": "@thediaryofaceo",
"channelURL": "https://www.youtube.com/@thediaryofaceo",
"thumbnailUrl": "https://yt3.ggpht.com/JHCZDz37bsTmwoE1o4LEodF5vhsHfk29kCEauDTFr27-7hHXsHHvvWGzcG77v32ERrkpfInkGQ=s800-c-k-c0x00ffffff-no-rj",
"subscribers": 18600000,
"videoCount": 835,
"totalViews": 1627761334,
"avgViewsPerVideo": 1949415,
"isVerified": null,
"country": "GB",
"niche": "Lifestyle",
"joinedDate": "2019-03-22",
"channelDescription": "64% of our viewers don't realise they don't subscribe, please double check, thank you!!",
"keywords": [],
"searchKeyword": null,
"searchRank": 5,
"discoverySource": "direct_channel",
"status": "success",
"errorMessage": null,
"scrapedAt": "2026-07-29T14:17:00.134Z"
}

Full record

The raw export contains all 44 fields, including the nested emails array with per-address provenance:

{
"emails": [
{
"email": "commercial@stevenbartlett.com",
"sourceType": "linked_website",
"sourceUrl": "https://www.stevenbartlett.com/enquiries",
"validationStatus": "mx_valid",
"isDisposable": false,
"isPrimary": true
},
{
"email": "bookings@stevenbartlett.com",
"sourceType": "linked_website",
"sourceUrl": "https://www.stevenbartlett.com/enquiries",
"validationStatus": "mx_valid",
"isDisposable": false,
"isPrimary": false
},
{
"email": "press@stevenbartlett.com",
"sourceType": "linked_website",
"sourceUrl": "https://www.stevenbartlett.com/enquiries",
"validationStatus": "role_valid",
"isDisposable": false,
"isPrimary": false
},
{
"email": "events@stevenbartlett.com",
"sourceType": "linked_website",
"sourceUrl": "https://www.stevenbartlett.com/enquiries",
"validationStatus": "mx_valid",
"isDisposable": false,
"isPrimary": false
}
],
"emailCount": 4,
"externalLinks": [
"https://www.stevenbartlett.com/",
"https://www.instagram.com/steven/",
"https://twitter.com/StevenBartlett",
"https://www.facebook.com/SteveBartlettShow/?ref=br_rs",
"https://www.linkedin.com/in/steven-bartlett-56986834",
"https://smarturl.it/DOACbook",
"https://link.thediaryofaceo.com/FmnyJ9b"
],
"keywords": []
}

Flat by design — every field is a scalar except contactLinks, externalLinks, keywords and emails, so CSV headers stay stable for CRM import.

Field reference (44 fields)

Identity

FieldTypeDescription
channelNameStringChannel display name
channelIdStringUnique YouTube channel ID (UC...) — stable primary key
channelURLStringFull channel URL
channelHandleString@handle
thumbnailUrlStringChannel avatar

Metrics

FieldTypeDescription
subscribersIntegerExact subscriber count
videoCountIntegerTotal videos published
totalViewsIntegerLifetime channel views
avgViewsPerVideoIntegertotalViews / videoCount — reach proxy
isVerifiedBoolean | nullVerified badge. Currently always null — see "What it does NOT do"

Qualification

FieldTypeDescription
countryStringThe creator's actual country, as declared on the channel
nicheStringDetected category (23 niches from YouTube topic data)
joinedDateStringChannel creation date (YYYY-MM-DD)
channelDescriptionStringChannel About text
keywordsArrayChannel-declared keywords, useful for niche matching

Contact

FieldTypeDescription
emailStringPrimary business email, or null
emailSourceStringWhere it was found — channel_about · channel_description · linked_website · video_description
emailConfidenceInteger0-100 — how much the extractor trusts this address, based on source and context
emailValidationStatusStringDomain-level deliverability signal — see below. Not mailbox verification
emailsArrayEvery address found, each with sourceType, sourceUrl, validationStatus, isDisposable, isPrimary
emailCountIntegerHow many distinct addresses were found
hasEmailBooleanA usable email was found
hasHiddenEmailBooleanAn email exists but YouTube gates it — we detect, we do not bypass
websiteStringWebsite URL
instagram / twitter / tiktokStringProfile URLs
linkedin / facebookStringProfile URLs
contactLinksArrayOverflow — Discord, Telegram and anything uncategorised
primaryAggregatorUrlStringLink hub — Linktree, Beacons, Bio.link and similar
externalLinksArrayEvery link found, flat — the raw material behind the categorised columns
hasLinksBooleanAt least one external link was found
hasContactBooleanAny actionable route exists (email, website or social)

Provenance & status

FieldTypeDescription
searchKeywordStringWhich keyword surfaced this lead
discoverySourceStringkeyword_search · direct_channel · video_to_channel
inputUrlStringThe exact value you supplied in Channel Inputs; null for keyword discovery
searchRankIntegerPosition in the search results that surfaced this lead
statusStringSee the status contract below
errorMessageStringWhy extraction failed; null on success
scrapedAtStringISO 8601 timestamp

Lead qualification

FieldTypeDescription
contactabilityScoreInteger0–100 outreach-readiness score. Email presence and confidence (max 60) + alternative contact routes (max 28) + credibility (max 12)
qualificationTierStringHot (72+) · Warm (60–71) · Cold (40–59) · Unqualified (<40)
isQualifiedBooleanWhether the score clears your minQualificationScore

The score is computed from deterministic, published rules — not AI — so it is predictable, free, and explainable to anyone who asks why a lead ranked where it did. Sort by it to work your best leads first.

Status contract

Every row carries a status, and failures appear in the dataset instead of vanishing.

StatusMeaningCharged?
successExtracted, and at least one contact route was foundcreator-lead
no_contactExtracted fine — full metrics — but no email, website or socialcreator-lead
blockedYouTube blocked the request (CAPTCHA / rate limit)❌ Never
timeoutThe channel page did not load in time❌ Never
not_foundChannel does not exist❌ Never
private_channelPrivate or unavailable❌ Never
errorAny other failure — see errorMessage❌ Never

Failure rows carry the same columns as any other row, so CSV exports stay rectangular. To work with leads only, filter to status == "success" (or include no_contact if socials-free leads are still useful to you).

Previously a channel that 404'd or timed out simply disappeared — you counted rows, found fewer than expected, and had no way to tell whether YouTube had run out of results or something had broken. These rows close that gap, and the run log prints a breakdown by reason.


Contact extraction

Where emails come from

Email discovery runs as a cascade — each step runs only when the cheaper ones found nothing, so a run never pays for work it doesn't need:

StepSourceemailSource valueCost
1Email shown on the About pagechannel_aboutfree
2Channel descriptionchannel_descriptionfree
3The creator's own website — home, /contact, /aboutlinked_website~1–3 cheap HTTP requests
4Recent video descriptions (3 most recent)video_description1 YouTube API unit

Steps 3 and 4 are the reason this Actor finds emails that About-page-only scrapers miss — many creators publish their business address on their own site, not on YouTube. Both can be turned off individually.

Step 3 is strictly bounded: max 3 pages, 3s per request, 8s total per channel, HTTP only, no browser, never follows off-site links.

Every address is reported with the source it came from, so you can judge how much to trust it.

Multiple emails

email is the primary address — a deliverable, non-disposable one is preferred over a role inbox, which is preferred over an unverifiable one. The full emails[] array carries every address found, each with its source and source URL — useful via the API, while the flat columns keep CSV exports clean.

Deliverability signal

We do not claim to verify emails, and there is no verification option or charge. Verifying that a specific mailbox exists is impossible without actually sending mail, so selling it as a feature would be dishonest.

What we do provide is a cheap, honest signal in emailValidationStatus, used to rank which address becomes the primary and to inform the contactability score:

ValueMeaning
mx_validThe domain publishes mail servers
role_validDomain accepts mail, but it's a role inbox (info@, sales@)
no_mxDomain publishes no mail servers — likely undeliverable
disposableKnown throwaway provider
unknownLookup failed or timed out — deliberately not treated as bad

This tells you about the domain, never the individual mailbox. Treat it as a ranking hint, not a guarantee.

Other contacts

Contacts come from the channel About page:

  • Email — from publicly visible text and the channel description
  • Website, Instagram, X / Twitter, TikTok, LinkedIn, Facebook — first-class columns
  • Overflow (in contactLinks) — Discord, Telegram, and link aggregators: Linktree, Beacons, Bio.link, Lnk.bio, AllMyLinks, Tap.bio, Campsite.bio, Solo.to, Koji, Shorby, Many.link

About the gated business email. Many channels put their address behind YouTube's "View email address" verification wall. This Actor does not attempt to defeat that — no login, no cookies, no CAPTCHA solving. Instead it sets hasHiddenEmail: true, so a blank email is never ambiguous: either no address is published, or one exists that YouTube won't release.


Pricing

Pay-per-event — you are billed per event, not for platform usage.

You pay for leads you can act on

EventFires when
creator-leadOnce per creator delivered to your dataset
email-validatedPer address checked, only when Validate Emails is on

Searching is free — there is no per-keyword fee and no run start fee, so a run that finds nothing costs nothing. Failure rows are never charged: channels that were blocked, timed out, could not be found, or whose contact lookup failed are delivered so you can see what happened, but never billed.

Live rates are on the Pricing tab of this Actor's page. This README deliberately quotes no figures — rates change and a second copy only goes stale.

Estimating a run

Event counts are fully predictable from your input and your results:

creator-lead = creators delivered (never more than maxTotalChannels)
email-validated = addresses checked (0 when Validate Emails is off)
(free) = every failure row

So maxTotalChannels is a hard ceiling on your creator-lead count — set it and you know the maximum before you press Start.

email-validated counts addresses, not leads: a creator publishing four contact addresses bills four, and a creator with none bills zero. In a measured 16-lead run, 9 leads with email produced 12 validation events.

What you are NOT charged for

  • ✅ Channels filtered out by minSubscribers / maxSubscribers — skipped before saving
  • ✅ Channels filtered out by channelCountry, joinedAfter or joinedBefore
  • ✅ Channels beyond your maxTotalChannels cap
  • Leads with no contact route at all (status: "no_contact") — delivered with full metrics, free
  • Every failure row — blocked, timed-out, not-found, private
  • ✅ Failed and retried requests
  • ✅ Website and video-description scanning — bundled, never a separate charge, because they can legitimately find nothing
  • ✅ Proxy, compute and platform infrastructure — all included

Known limitations

  1. Gated business emails cannot be extracted. Where YouTube hides an address behind verification, you get hasHiddenEmail: true, not the address.
  2. Email availability is creator-dependent. Roughly 10–20% of channels publish an email on YouTube itself; the website and video-description steps lift this, but no tool can find an address a creator never published. 40–60% expose at least one social link.
  3. Search Region is a ranking hint, not a country filter. Use Creator Country for a real filter, or the country output field to filter downstream.
  4. Creator Country skips channels with no declared country. YouTube does not require creators to set one. The run log reports how many were dropped for this reason.
  5. Keyword discovery is not exhaustive. It returns what YouTube ranks for your keyword, not every channel in the niche. Use several related keywords for broader coverage.
  6. Very large runs may hit YouTube rate limiting. The Actor backs off automatically, but throughput degrades.

FAQ

Why do some rows have no email? The Actor checks four sources in order — About page, channel description, the creator's own website, then recent video descriptions. If all four come up empty, the creator most likely publishes no address at all. Check hasHiddenEmailtrue means one exists but YouTube gates it. Also check hasContact: a lead with no email but an active Instagram is still reachable.

How is email chosen when several are found? A validated, non-disposable address wins. Otherwise the cascade order decides, since earlier sources are more authoritative. Every address is in emails[] with isPrimary marking the chosen one.

Do you verify that emails actually work? No, and we don't offer it as a feature or charge for it. Proving a mailbox exists requires sending mail. What you get in emailValidationStatus is a domain-level signal — does the domain publish mail servers, is it a throwaway provider, is it a role inbox — used to rank which address becomes primary. Treat it as a hint, not a guarantee.

Can you get the hidden "View email address" email? No, and this is deliberate. Retrieving it requires defeating YouTube's verification wall. We report its existence instead.

How is niche determined? From YouTube's own topic metadata, mapped to 23 categories (Technology, Fitness, Gaming, Education, …). It is the channel's classification, not a guess from its title.

Can I feed in my own list of channels? Yes — use Channel Inputs, which accepts handles, channel URLs, channel IDs and video URLs (up to 500, mixed freely). Searching is free either way, so this costs no more than keyword discovery. You can combine it with Search Keywords in the same run; each lead records which route found it via discoverySource and inputUrl.

My keyword means two different things — how do I get rid of the wrong ones? Use Exclude Keywords. Searching Gemini returns astrology and tarot channels next to the AI ones, because Gemini is also a zodiac sign; adding tarot, zodiac and horoscope removes them. Terms are matched as whole words against the channel name, description and channel keywords, case-insensitively — so ai will not match "said".

Excluded creators are skipped before their contact details are fetched, so they cost you nothing. Worth knowing what it cannot do: it filters on the words a creator actually publishes, so a channel with a sparse description and no keywords may slip through. In a real 10-result Gemini search it removed 7 of the 9 off-target channels while keeping the one genuine AI channel.

How do I get only leads I can actually contact? Filter your export on hasEmail (email specifically) or hasContact (email, website or any social profile). Every row carries both flags, plus contactabilityScore and qualificationTier if you would rather rank than filter. Sorting or filtering after export is free and non-destructive — you keep the full result set and can widen your criteria without re-running.

Am I charged for creators with no contact details? Yes — every creator delivered is charged one creator-lead event, with or without contact details, because the channel profile itself (exact subscriber, view and video counts, niche, country, join date) is the deliverable. What is never charged is a row we failed to extract: blocked, timed out, not found, private, or whose contact lookup failed.

What is the largest run I can do? Up to 500 channels per keyword and 20 keywords, bounded by maxTotalChannels. Start small — maxChannels: 10 — to sanity-check results before scaling.

Is this GDPR / CAN-SPAM safe? The Actor collects only publicly published business contact information. How you use it is your responsibility — outreach is regulated by GDPR, CAN-SPAM, CCPA and local law depending on your and the recipient's jurisdiction.

How do I get this into my CRM? Export the Contact Details view as CSV. Output is flat, so headers are stable. See Integrations below.


Integrations & export

Export as JSON, CSV, Excel or HTML from the dataset tab, or pull via API.

Because the output is flat (every field is a scalar except contactLinks), it drops directly into:

  • Google Sheets / Excel
  • Airtable
  • HubSpot, Pipedrive and other CRM importers
  • Zapier / Make automations
  • The Apify API and MCP server
# Fetch the contact view as CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&view=contacts"

Use cases

Marketing agencies — build influencer shortlists in any niche, filtered to the subscriber tier your client pays for.

SaaS companies — find creators who review tools in your category and reach out for partnerships.

eCommerce brands — find creators in your product niche and build an ambassador pipeline.

Creator marketplaces — maintain a creator database at scale, filtered by size, niche and contactability.


Performance

ChannelsEstimated time
10~30-40 seconds
50~2-3 minutes
100~3-5 minutes

Architecture

  • YouTube Data API v3 — channel metadata in ~200ms (exact subscribers, views, country, niche)
  • Browserless HTML parsing — search results and About-page contacts are read straight from YouTube's initial payload. No Chromium, so runs are cheaper and faster
  • Browser only when needed — video URLs need the watch page to resolve their uploader, so those runs use Puppeteer automatically. Force it with YT_FORCE_BROWSER=1
  • Session pooling and adaptive backoff (2s → 30s on errors)
  • Layered fallbacks — API → HTML payload → DOM

Best practices

  1. Set maxTotalChannels — it is your spend ceiling; never run uncapped while testing
  2. Start at maxChannels: 10 to validate results before scaling
  3. Use specific keywords — "AI automation tools" beats "AI"
  4. Filter by subscribers — target the tier you actually sell to
  5. Filter your export on hasEmail for outreach lists, hasContact for broader campaigns
  6. Run several related keywords — one keyword never covers a niche

Compliance

  • Collects only publicly available YouTube channel data
  • Uses the YouTube Data API v3 within Google's usage policies
  • No login, cookies, sessions or CAPTCHA bypass
  • Does not access gated or private content
  • Intended for legitimate creator discovery, influencer research and business outreach
  • You are responsible for complying with applicable law in your jurisdiction when contacting anyone

Changelog

v1.9

  • Email fill rate raised from 3/6 to 5/6 on a benchmark set. Video-description scan widened from 3 to 50 videos (costs the same single API unit, since playlistItems bills per call and caps at 50); website scan now covers up to 3 linked sites, follows the site's own contact links rather than only guessing paths, decodes Cloudflare-obfuscated data-cfemail addresses, and recognises UK-English /enquiries pages
  • Recurrence gate (an address must appear in ≥2 video descriptions) and brand affinity (prefer a domain matching the channel) keep precision as the scan widens — a sponsor's one-off address no longer gets picked up as the creator's
  • Default memory cut to 1 GB (from 2 GB). The browserless path never needs more, and Apify bills allocated memory × time — so this roughly halves compute cost per run. Ceiling raised to 4 GB so forced browser runs still have headroom
  • Input reorganised into five clearer sections: Search Keywords · Channel Inputs · Filters & Settings · Contact Extraction · CRM & Integrations
  • Search Region, Search Language and Creator Country are now dropdowns instead of free text — no more guessing ISO codes. Creator Country is multi-select for regional targeting
  • "Validate emails" reworded, not removed. It performs an MX lookup plus disposable- and role-address detection, and is now described as a domain-level deliverability check rather than verification — proving a specific mailbox exists is impossible without sending mail. Off by default; when on it also improves which address is chosen as primary and lifts the contactability score

v1.8

  • Added lead scoring — every lead now carries a 0–100 contactabilityScore, a fixed-band qualificationTier (Hot 72+ / Warm 60+ / Cold 40+ / Unqualified), and an isQualified flag against your own minQualificationScore. Deterministic rules, no AI
  • Added webhook delivery — set webhookUrl and every lead is POSTed as JSON in real time for Zapier / Make / n8n / CRM inserts. Best-effort: a failed POST never fails the run
  • Richer email validation — statuses are now mx_valid, role_valid, no_mx, disposable, unknown, so a role inbox (info@, sales@) is distinguishable from a personal one
  • New output fields: keywords, emailConfidence, emailValidationStatus, externalLinks, primaryAggregatorUrl, hasLinks, searchRank
  • Primary-email selection now prefers a real mailbox over a role inbox over an unvalidated address, instead of taking the first one found

v1.7

  • Fixed mostly-empty emails. YouTube does not server-render the About-page links or the full channel description — they arrive via a continuation request. Contact data is now fetched through TikHub's channel-description endpoint, which returns the complete payload. HTML parsing remains only as a degraded fallback
  • Fully browserless. Video URLs are now resolved to their uploader through TikHub too, so no run needs Chromium. The browser survives only behind YT_FORCE_BROWSER=1
  • Verified status now comes from TikHub, which reports it authoritatively (the Data API does not expose it)
  • Aligned with the youtube-channel-contacts-scraper architecture: BROWSERLESS=true, 2 GB memory, shared @tikhub_api_key secret

v1.6

  • Runs without a browser by default. Search results, channel metadata and About-page contacts are all read from YouTube's initial HTML payload, so no Chromium is launched. Default memory drops from 4 GB to 1 GB and runs are substantially faster
  • The browser path is kept and used automatically when a run includes video URLs (resolving a video to its uploader needs the watch page), or when forced with YT_FORCE_BROWSER=1
  • Contact parsing rewritten to collect every external-link view-model in the payload rather than traversing to a single node — the old depth-limited traversal reached an empty placeholder and fell back to DOM scraping more often than intended
  • Emails are now extracted from the parsed description rather than raw HTML, eliminating a class of corrupted addresses caused by JSON escape sequences

v1.5

  • Billing restructured: you now pay for leads you can act on. The single creator-lead event is replaced by lead-with-email and lead-with-contact, priced differently because a verified email and a bare TikTok link are not worth the same
  • Leads with no contact route are now delivered free — you keep the full channel profile at no charge. Previously every saved row was billed regardless of whether it was usable
  • Failure rows are never billed
  • Added email-validated, charged per address only when Validate Emails is enabled
  • Website and video-description scanning are bundled into the lead price — never charged separately, since they can legitimately find nothing
  • Run log now reports what was actually billed and shouts NOT BILLED if any event fails to charge

v1.4

  • Failures now appear in the dataset as rows with status and errorMessage, instead of silently disappearing. Same columns as any other row, so CSV exports stay rectangular
  • status distinguishes success (contact found) from no_contact (extracted fine, nothing actionable) and from the five failure states
  • Failure rows are never charged — a failed extraction is our problem, not yours
  • Run log now prints a breakdown of both skipped and failed channels with counts and reasons

v1.3

  • Email discovery is now a 4-step cascade — About page → channel description → the creator's own websiterecent video descriptions. Each step runs only when the cheaper ones found nothing
  • Website scanning (scanLinkedWebsites, on by default) checks the home, /contact and /about pages. Strictly bounded: 3 pages, 3s per request, 8s per channel, HTTP only
  • Video-description scanning (scanVideoDescriptions, on by default) as a last resort on the 3 most recent uploads
  • Every email now reports its source via emailSource, and the full emails[] array carries sourceType, sourceUrl, validationStatus, isDisposable and isPrimary
  • Optional email validation (validateEmails) — MX lookup plus disposable-provider detection, with per-domain caching so repeated domains cost one lookup. Documented honestly as domain-level, not mailbox-level
  • Added emailCount; mailto: links are now filtered through the same blacklist as plain-text addresses

v1.2

  • Added Creator Country (channelCountry) — a real filter on the creator's declared country, distinct from Search Region. Accepts multiple codes for regional targeting like ["DE","AT","CH"]
  • Added Joined After / Joined Before — target emerging or established creators by channel age
  • Added Search Language — YouTube's search interface was hardcoded to English, making non-English targeting structurally impossible
  • Run log now reports every skip reason with counts, so filtered-out channels are visible instead of looking like "there was no more data"
  • Added Channel Inputs — enrich channels you already have. Accepts handles, channel URLs, channel IDs, video URLs, Shorts/Live links and legacy /c/ /user/ paths, up to 500 per run, mixed freely with keyword discovery
  • Direct inputs incur no search-query charge — no search runs
  • Duplicates across formats are collapsed; unrecognised entries are reported in the log rather than silently dropped
  • discoverySource now reports keyword_search / direct_channel / video_to_channel, and inputUrl records exactly what you supplied
  • Search Keywords is no longer strictly required — supply keywords, channel inputs, or both

v1.1

  • Output expanded from 16 to 30 fields — added thumbnailUrl, isVerified, joinedDate, channelDescription, avgViewsPerVideo, hasEmail, hasHiddenEmail, hasContact, searchKeyword, discoverySource, status and more
  • LinkedIn and Facebook promoted to first-class columns (previously inside contactLinks)
  • Added maxTotalChannels — a hard spend cap across the whole run
  • maxChannels ceiling raised 100 → 500; keywords capped at 20 per run
  • Search Region clarified — documented as ranking/localization only, and now accepts any ISO 3166-1 country code instead of a 10-country list
  • Corrected the business-email documentation — the Actor detects gated emails via hasHiddenEmail and does not attempt to reveal them
  • Removed includeChannelStats, which reduced no cost and only blanked columns
  • Added three preset dataset views and a published output schema

v1.0

  • Initial release — keyword discovery, subscriber filters, contact extraction, 16-field output

Support

  • Issues: GitHub or Apify support
  • Feature requests: open an issue with your use case

Built by Coregent Digital Studio — production-ready creator discovery and outreach