YouTube Channel Search Scraper avatar

YouTube Channel Search Scraper

Pricing

from $2.70 / 1,000 channels

Go to Apify Store
YouTube Channel Search Scraper

YouTube Channel Search Scraper

Find public YouTube channels from keywords, search URLs, channel references, or seed channels. Get channel IDs, handles, public metrics, profile details, and optional recent videos. Each row shows how the channel was first found.

Pricing

from $2.70 / 1,000 channels

Rating

5.0

(2)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

9

Bookmarked

1.9K

Total users

342

Monthly active users

5 days ago

Last modified

Features

Limited permissions

Share

🔎 Find YouTube channels for your next creator list

YouTube Channel Search Scraper helps marketers, creator researchers, and analysts find public YouTube channels from keywords, YouTube search-result URLs, channel references, or seed channels. Get channel IDs, handles, public metrics, profile details, optional recent videos, and the match that first found each channel. Filters for subscribers, videos, country, creation date, and recent uploads keep your list focused.

📦 Review YouTube channel data

Each dataset row is one unique saved public channel with:

  • channel: ID, handle, name, URL, description, search snippet, verification, family-safe status, visibility, indexing, and unlisted status
  • metrics: subscriber, video, and total view counts, plus the count text shown by YouTube
  • profile: country, joined text, tags, tabs, public links, public emails the channel writes in its profile text, business-email button, country codes, alternate URLs, owner links, and video feed URL
  • images: banner and avatar sizes
  • discoverySource: the submitted value, discovery method, and, for result lists, the rank and results URL of the first saved match
  • sourceVideo: the video from the first saved match, or null when no video result found the channel
  • recentVideos: recent public long-form videos, when you turn on Include recent videos
  • monitoring: when a repeated run with the same settings finds a channel that the last complete run did not find

Optional values can be null or empty when YouTube does not show them. profile.tags is always an array and is empty when YouTube exposes no tags.

  1. Choose a method in Find channels by.
  2. For a search method, add keywords or public YouTube /results URLs. For Channel details, add handles, channel IDs, channel URLs, or video URLs. For Featured channels or Seed channel keywords, add seed channels.
  3. Set the limits for each search and the whole run.
  4. Add filters if you need them, such as subscriber or video ranges, verified channels, countries, creation dates, recent uploads, or channels to exclude.
  5. Turn on recent videos if you want each channel's latest long-form videos.
  6. Run the Actor and open the dataset.

The Actor saves the first eligible match for each stable channel ID right away. If the same channel appears again from another keyword, URL, handle, ID, or discovery method, that later match is ignored. The saved row keeps its first discovery evidence.

⚙️ Input

FieldTypeWhat it does
discoveryModestringPicks the method. both runs video results, then channel-only search. videoResults and channelFilter run one of them. channelReferences reads the channels you list. featuredChannels reads the featured channels of seed channels. seedKeywords searches with the public keywords of seed channels. The form pre-fills both. It is also used if the value is missing. With both, video results run first and can fill the per-search limit before channel-only search starts.
searchTermsstring arrayKeywords or phrases to search for, up to 500. Hashtags and YouTube search expressions are accepted. Repeated terms are used once. Used by both, videoResults, and channelFilter.
searchUrlsobject arrayPublic YouTube /results URLs with a search_query value. The query and supported YouTube search filters are kept. Search language and country come from the settings below. Used with search terms in the same run.
searchUrls[].urlstringOne public YouTube search-result URL.
channelReferencesstring arrayFor channelReferences. Handles such as @Google, channel IDs, channel URLs, or video URLs. A video URL returns its channel.
seedChannelsstring arrayFor featuredChannels and seedKeywords. Handles, channel IDs, or channel URLs to start from.
maxChannelsPerSearchTermintegerStops each keyword or search URL after this many eligible channels. Used by the search methods and seedKeywords. A channel saved from an earlier search still counts here but is not saved twice. Filtered and excluded channels do not count. Use 0 or leave it empty for no per-search limit.
maxTotalResultsintegerStops after this many unique saved channels in the run. Use 0 or leave it empty for no total limit. Filtered and excluded channels do not count.
languageHintstringLanguage code for YouTube search pages, such as en, de, zh-CN, or fil. Defaults to en. It does not make sure every channel uses that language.
countryHintstringTwo-letter country code YouTube uses for search, such as US or DE. Defaults to US. It does not filter channels by their profile country.
searchOrderstringrelevance or viewCount for channel-only search and seedKeywords. Defaults to relevance.
useAutocompletebooleanAlso searches YouTube autocomplete suggestions for each keyword. Defaults to false.
minSubscribersintegerSaves channels with at least this many public subscribers. Channels with no public count do not match.
maxSubscribersintegerSaves channels with no more than this many public subscribers. Channels with no public count do not match.
minVideosintegerSaves channels with at least this many public videos. Channels with no public video count do not match.
maxVideosintegerSaves channels with no more than this many public videos. Channels with no public video count do not match.
verifiedOnlybooleanSaves only channels YouTube marks as verified. Defaults to false.
channelCountriesstring arraySaves only channels whose profile states one of these two-letter countries, such as DE or US. Channels with no public country do not match.
createdAfterstringSaves only channels created on or after this YYYY-MM-DD date. Channels with no public creation date do not match.
createdBeforestringSaves only channels created on or before this YYYY-MM-DD date. Channels with no public creation date do not match.
recentUploadDaysintegerSaves only channels with a dated public long-form video from the past number of days. Minimum 1.
businessEmailButtonOnlybooleanSaves only channels whose profile shows YouTube's business-email button. It does not reveal the email behind it. Defaults to false.
excludedChannelsstring arrayLeaves out channels given as a handle, channel ID, or full channel URL. The Actor matches each channel by its identity.
includeRecentVideosbooleanAdds each saved channel's recent public long-form videos. Each added video is charged. Defaults to false.
maxRecentVideosintegerAdds up to this many recent videos to each channel when recent videos are on. Defaults to 5. Use 0 for all available recent videos.

The Input tab pre-fills both work limits with 10 for a first run. The schema has no default for either field. If an API, CLI, or scheduled run leaves a limit out, that limit is not added. Zero also removes it. The Actor tries to read all available matches within the limits, but a source access failure or a platform run limit can stop work earlier.

All filters apply to every method and are off when left out. If the chosen method has no search terms, URLs, channel references, or seed channels, the run stops with a message that says what to add. Filters that conflict, such as a minimum above a maximum, also stop the run with a message.

Example input from a successful current-beta default-input run

{
"maxTotalResults": 10,
"discoveryMode": "both",
"searchTerms": [
"coffee roasting"
],
"maxChannelsPerSearchTerm": 10,
"useAutocomplete": false,
"verifiedOnly": false,
"businessEmailButtonOnly": false,
"includeRecentVideos": false,
"maxRecentVideos": 5
}

🧾 Output

Output fields

Each saved row is one channel. Rows have two forms. A row first found in video results has a sourceVideo object. A row found any other way has sourceVideo: null. Fields that YouTube does not show can be null, empty, or left out.

Channel row from video results

FieldTypeWhat it does
channel.idstringStable YouTube channel ID.
channel.handlestring or nullPublic handle.
channel.titlestringPublic channel name.
channel.urlstring or nullMain public channel URL.
channel.descriptionstring or nullPublic channel description.
channel.isVerifiedboolean or nullSays if YouTube marks the channel as verified.
channel.isFamilySafeboolean or nullYouTube's public family-safety signal.
channel.searchSnippetstring or nullChannel description text shown in the first matching search result, when shown.
channel.visibilitystring or nullChannel visibility stated by YouTube, such as public, when shown.
channel.isIndexedboolean or nullSays if YouTube states that the channel can be indexed. null when YouTube gives no such statement.
channel.isUnlistedbooleanSays if YouTube states that the channel is unlisted, when read.
channel.isAutoGeneratedbooleanSays if YouTube created the channel automatically. Present only when YouTube states it.
metrics.subscribersinteger or nullPublic subscriber count when shown. YouTube rounds large counts, so this number can be approximate.
metrics.subscribersTextstring or nullSubscriber count text as shown by YouTube, such as 2.76M subscribers.
metrics.videosinteger or nullPublic video count when shown.
metrics.videosTextstring or nullVideo count text as shown by YouTube.
metrics.totalViewsinteger or nullTotal public view count when shown.
metrics.totalViewsTextstring or nullTotal view count text as shown by YouTube.
profile.countrystring or nullCountry shown on the channel.
profile.joinedTextstring or nullJoin text shown by YouTube.
profile.tagsstring arrayPublic channel tags, when shown by YouTube.
profile.tabsobject arrayPublic channel tabs.
profile.tabs.titlestringTab name.
profile.tabs.urlstringPublic tab URL.
profile.externalLinksstring arrayPublic links shared by the channel.
profile.emailsstring arrayEmail addresses the channel writes in its own public profile text. Empty when none is written there.
profile.hasBusinessEmailButtonbooleanSays if the profile shows YouTube's business-email button. It does not give the email behind it. Present when read.
profile.availableCountryCodesstring arrayCountry codes where the channel is available.
profile.unavailableCountryCodesstring arrayCountry codes where YouTube states the channel is unavailable.
profile.alternateUrlsstring arrayOther public URLs for the channel.
profile.ownerUrlsstring arrayPublic owner links shown by YouTube.
profile.feedUrlstringPublic video feed link shown by YouTube.
images.bannerUrlstring or nullPublic banner URL.
images.avatarImagesobject arrayAvailable public avatar sizes.
images.avatarImages.urlstringPublic avatar image URL.
images.avatarImages.widthinteger or nullImage width in pixels.
images.avatarImages.heightinteger or nullImage height in pixels.
discoverySource.valuestringKeyword or search URL that first found the channel.
discoverySource.discoverySurfacestringAlways video_results for this form.
discoverySource.rankintegerPosition in the YouTube results list, starting at 1. Numbers keep going across all pages of that search. Video results and channel-only search are numbered separately. Results removed by your filters or excluded channels still get a number.
discoverySource.sourceUrlstringResults URL where the first saved match appeared.
sourceVideoobjectVideo from the first saved match.
sourceVideo.videoIdstringStable source video ID.
sourceVideo.urlstringPublic URL of the matching YouTube video.
sourceVideo.titlestring or nullSource video title.
sourceVideo.publishedTextstring or nullPublication text shown by YouTube.
sourceVideo.viewTextstring or nullView-count text shown by YouTube.
recentVideosobject arrayRecent public long-form videos. Present only when Include recent videos is on.
recentVideos.videoIdstringStable video ID.
recentVideos.urlstringPublic video URL.
recentVideos.titlestringVideo title.
recentVideos.viewsintegerPublic view count.
recentVideos.publishedTextstringPublication text shown by YouTube.
monitoringobjectPresent only when a repeated run with the same settings finds a channel that the last complete run did not find.
monitoring.firstFoundAtstringDate and time this run found the channel.
monitoring.comparedSearchAtstringDate and time of the earlier complete run used for the comparison.

Example channel row from video results

This row is real data from a recent successful run of this Actor. It is shortened: most profile.availableCountryCodes values are replaced with "...".

{
"channel": {
"id": "UCAS24xDyFtGuOxGN0-aK7lQ",
"handle": "@TheCoffeeShowKirk",
"title": "The Coffee Show with Kirk Pearson",
"url": "https://www.youtube.com/@TheCoffeeShowKirk",
"description": "",
"isVerified": false,
"isFamilySafe": true,
"searchSnippet": null,
"visibility": "public",
"isIndexed": true,
"isUnlisted": false
},
"metrics": {
"subscribersText": "1.85K subscribers",
"videosText": "167 videos",
"totalViewsText": "115,628 views",
"subscribers": 1850,
"videos": 167,
"totalViews": 115628
},
"profile": {
"country": null,
"joinedText": "Joined Apr 13, 2025",
"tags": [],
"tabs": [
{
"title": "Videos",
"url": "https://www.youtube.com/@TheCoffeeShowKirk/videos"
},
{
"title": "Shorts",
"url": "https://www.youtube.com/@TheCoffeeShowKirk/shorts"
},
{
"title": "Podcasts",
"url": "https://www.youtube.com/@TheCoffeeShowKirk/podcasts"
},
{
"title": "Posts",
"url": "https://www.youtube.com/@TheCoffeeShowKirk/posts"
},
{
"title": "Search",
"url": "https://www.youtube.com/@TheCoffeeShowKirk/search"
}
],
"externalLinks": [],
"emails": [],
"availableCountryCodes": [
"US",
"TR",
"ZW",
"..."
],
"unavailableCountryCodes": [],
"alternateUrls": [
"https://m.youtube.com/channel/UCAS24xDyFtGuOxGN0-aK7lQ/about",
"https://www.youtube.com/feeds/videos.xml?channel_id=UCAS24xDyFtGuOxGN0-aK7lQ",
"android-app://com.google.android.youtube/http/www.youtube.com/channel/UCAS24xDyFtGuOxGN0-aK7lQ",
"ios-app://544007664/vnd.youtube/www.youtube.com/channel/UCAS24xDyFtGuOxGN0-aK7lQ"
],
"ownerUrls": [
"https://www.youtube.com/@TheCoffeeShowKirk"
],
"feedUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCAS24xDyFtGuOxGN0-aK7lQ"
},
"images": {
"bannerUrl": null,
"avatarImages": [
{
"url": "https://yt3.googleusercontent.com/FV3UolVbDQ00xJv1GWveyXCSLXDolU7CuD-ONFSFZWFQSaUZilj5cL8z4VGap086ZR8Foi91=s72-c-k-c0x00ffffff-no-rj",
"width": 72,
"height": 72
},
{
"url": "https://yt3.googleusercontent.com/FV3UolVbDQ00xJv1GWveyXCSLXDolU7CuD-ONFSFZWFQSaUZilj5cL8z4VGap086ZR8Foi91=s120-c-k-c0x00ffffff-no-rj",
"width": 120,
"height": 120
},
{
"url": "https://yt3.googleusercontent.com/FV3UolVbDQ00xJv1GWveyXCSLXDolU7CuD-ONFSFZWFQSaUZilj5cL8z4VGap086ZR8Foi91=s160-c-k-c0x00ffffff-no-rj",
"width": 160,
"height": 160
}
]
},
"discoverySource": {
"value": "coffee roasting",
"discoverySurface": "video_results",
"rank": 2,
"sourceUrl": "https://www.youtube.com/results?search_query=coffee+roasting&hl=en&gl=US"
},
"sourceVideo": {
"videoId": "Tj8gVySzFDY",
"url": "https://www.youtube.com/watch?v=Tj8gVySzFDY",
"title": "How To Roast Coffee With Scott Rao",
"publishedText": "9mo ago",
"viewText": "16,910 views"
}
}

Channel row from channel-only search, channel details, featured channels, or seed channel keywords

FieldTypeWhat it does
channel.idstringStable YouTube channel ID.
channel.handlestring or nullPublic handle.
channel.titlestringPublic channel name.
channel.urlstring or nullMain public channel URL.
channel.descriptionstring or nullPublic channel description.
channel.isVerifiedboolean or nullSays if YouTube marks the channel as verified.
channel.isFamilySafeboolean or nullYouTube's public family-safety signal.
channel.searchSnippetstring or nullChannel description text shown in the first matching search result, when shown.
channel.visibilitystring or nullChannel visibility stated by YouTube, such as public, when shown.
channel.isIndexedboolean or nullSays if YouTube states that the channel can be indexed. null when YouTube gives no such statement.
channel.isUnlistedbooleanSays if YouTube states that the channel is unlisted, when read.
channel.isAutoGeneratedbooleanSays if YouTube created the channel automatically. Present only when YouTube states it.
metrics.subscribersinteger or nullPublic subscriber count when shown. YouTube rounds large counts, so this number can be approximate.
metrics.subscribersTextstring or nullSubscriber count text as shown by YouTube, such as 2.76M subscribers.
metrics.videosinteger or nullPublic video count when shown.
metrics.videosTextstring or nullVideo count text as shown by YouTube.
metrics.totalViewsinteger or nullTotal public view count when shown.
metrics.totalViewsTextstring or nullTotal view count text as shown by YouTube.
profile.countrystring or nullCountry shown on the channel.
profile.joinedTextstring or nullJoin text shown by YouTube.
profile.tagsstring arrayPublic channel tags, when shown by YouTube.
profile.tabsobject arrayPublic channel tabs.
profile.tabs.titlestringTab name.
profile.tabs.urlstringPublic tab URL.
profile.externalLinksstring arrayPublic links shared by the channel.
profile.emailsstring arrayEmail addresses the channel writes in its own public profile text. Empty when none is written there.
profile.hasBusinessEmailButtonbooleanSays if the profile shows YouTube's business-email button. It does not give the email behind it. Present when read.
profile.availableCountryCodesstring arrayCountry codes where the channel is available.
profile.unavailableCountryCodesstring arrayCountry codes where YouTube states the channel is unavailable.
profile.alternateUrlsstring arrayOther public URLs for the channel.
profile.ownerUrlsstring arrayPublic owner links shown by YouTube.
profile.feedUrlstringPublic video feed link shown by YouTube.
images.bannerUrlstring or nullPublic banner URL.
images.avatarImagesobject arrayAvailable public avatar sizes.
images.avatarImages.urlstringPublic avatar image URL.
images.avatarImages.widthinteger or nullImage width in pixels.
images.avatarImages.heightinteger or nullImage height in pixels.
discoverySource.valuestringKeyword, search URL, handle, channel ID, channel URL, video URL, or seed channel that first found the channel.
discoverySource.discoverySurfacestringHow the channel was found: channel_filter, handle_lookup, channel_lookup, video_lookup, featured_channels, or seed_keywords.
discoverySource.rankintegerPosition in the list that first showed the channel, starting at 1. Present for channel-only search, featured channels, and seed channel keywords. Results removed by your filters or excluded channels still get a number.
discoverySource.sourceUrlstringResults URL where the first saved match appeared. Present for channel-only search and seed channel keywords.
sourceVideonullAlways null for this form.
recentVideosobject arrayRecent public long-form videos. Present only when Include recent videos is on.
recentVideos.videoIdstringStable video ID.
recentVideos.urlstringPublic video URL.
recentVideos.titlestringVideo title.
recentVideos.viewsintegerPublic view count.
recentVideos.publishedTextstringPublication text shown by YouTube.
monitoringobjectPresent only when a repeated run with the same settings finds a channel that the last complete run did not find.
monitoring.firstFoundAtstringDate and time this run found the channel.
monitoring.comparedSearchAtstringDate and time of the earlier complete run used for the comparison.

Example channel row from channel-only search with recent videos

This row is real data from a recent successful run of this Actor. It is shortened: most profile.availableCountryCodes values are replaced with "...".

{
"channel": {
"id": "UCd6TiAWzTgmlEmFrYjh8nmQ",
"handle": "@MustafaHanif",
"title": "Mustafa Hanif",
"url": "https://www.youtube.com/@MustafaHanif",
"description": "Daily vlogger | Travel vlogger | Social Worker\n\nFor Business query:\nEmail: mustafahanif90@outlook.com\nInstagram: Mustafahanif26\n",
"isVerified": true,
"isFamilySafe": true,
"searchSnippet": "... vlogger | Travel vlogger | Social Worker For Business query: Email: mustafahanif90@outlook.com Instagram: Mustafahanif26.",
"visibility": "public",
"isIndexed": true,
"isUnlisted": false
},
"metrics": {
"subscribersText": "2.76M subscribers",
"videosText": "1,994 videos",
"totalViewsText": "1,174,079,402 views",
"subscribers": 2760000,
"videos": 1994,
"totalViews": 1174079402
},
"profile": {
"country": "Pakistan",
"joinedText": "Joined Aug 6, 2017",
"tags": [],
"tabs": [
{
"title": "Home",
"url": "https://www.youtube.com/@MustafaHanif/featured"
},
{
"title": "Videos",
"url": "https://www.youtube.com/@MustafaHanif/videos"
},
{
"title": "Shorts",
"url": "https://www.youtube.com/@MustafaHanif/shorts"
},
{
"title": "Live",
"url": "https://www.youtube.com/@MustafaHanif/streams"
},
{
"title": "Playlists",
"url": "https://www.youtube.com/@MustafaHanif/playlists"
},
{
"title": "Posts",
"url": "https://www.youtube.com/@MustafaHanif/posts"
},
{
"title": "Search",
"url": "https://www.youtube.com/@MustafaHanif/search"
}
],
"externalLinks": [],
"emails": [
"mustafahanif90@outlook.com"
],
"availableCountryCodes": [
"ET",
"FO",
"CV",
"..."
],
"unavailableCountryCodes": [],
"alternateUrls": [
"https://m.youtube.com/channel/UCd6TiAWzTgmlEmFrYjh8nmQ/about",
"https://www.youtube.com/feeds/videos.xml?channel_id=UCd6TiAWzTgmlEmFrYjh8nmQ",
"android-app://com.google.android.youtube/http/www.youtube.com/channel/UCd6TiAWzTgmlEmFrYjh8nmQ",
"ios-app://544007664/vnd.youtube/www.youtube.com/channel/UCd6TiAWzTgmlEmFrYjh8nmQ"
],
"ownerUrls": [
"https://www.youtube.com/@MustafaHanif"
],
"hasBusinessEmailButton": true,
"feedUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCd6TiAWzTgmlEmFrYjh8nmQ"
},
"images": {
"bannerUrl": "https://yt3.googleusercontent.com/ImFHNhqEiovl56qFFRoaPymsSIZ9e891CfSWP2DZs29fiQ9QHMC28aHaqGTWu1u4XMNv53B3Pw=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
"avatarImages": [
{
"url": "https://yt3.googleusercontent.com/TZ3B-Ks_e8V3YdzCrzXvV3S_cB8J7FOcbIDPDwGTmcjIhKGo0ZGRH8fsAYEa3x-ReqEdqtkfpOk=s72-c-k-c0x00ffffff-no-rj",
"width": 72,
"height": 72
},
{
"url": "https://yt3.googleusercontent.com/TZ3B-Ks_e8V3YdzCrzXvV3S_cB8J7FOcbIDPDwGTmcjIhKGo0ZGRH8fsAYEa3x-ReqEdqtkfpOk=s120-c-k-c0x00ffffff-no-rj",
"width": 120,
"height": 120
},
{
"url": "https://yt3.googleusercontent.com/TZ3B-Ks_e8V3YdzCrzXvV3S_cB8J7FOcbIDPDwGTmcjIhKGo0ZGRH8fsAYEa3x-ReqEdqtkfpOk=s160-c-k-c0x00ffffff-no-rj",
"width": 160,
"height": 160
}
]
},
"discoverySource": {
"value": "travel vlog",
"discoverySurface": "channel_filter",
"rank": 2,
"sourceUrl": "https://www.youtube.com/results?search_query=travel+vlog&hl=de&gl=DE&sp=CAMSAhAC"
},
"sourceVideo": null,
"recentVideos": [
{
"videoId": "gCkZPDKTJVI",
"url": "https://www.youtube.com/watch?v=gCkZPDKTJVI",
"title": "Aaj Heavy adventure hogaya police ke sath 😳🇺🇸",
"views": 234000,
"publishedText": "5h ago"
},
{
"videoId": "V9GhkH_G-UA",
"url": "https://www.youtube.com/watch?v=V9GhkH_G-UA",
"title": "I TRIED DRIVERLESS TAXI IN AMERICA 🇺🇸😳",
"views": 577000,
"publishedText": "1d ago"
}
]
}

💳 Pricing

This Actor uses pay-per-event pricing. One channel event is charged for each unique eligible public channel saved to the dataset. A repeated match does not create another row or event. When Include recent videos is on, one recent video event is also charged for each video added to a channel row. Channels left out by filters are not charged. See the Store for the current price for your plan.

🔌 Integrations

Open the run's default dataset to review the saved channel rows.

❓ FAQ

Can a successful run leave a search unfinished?

Yes. A run can save valid channels and still warn that it could not finish a submitted source. It keeps saved rows and continues other searches. Check the run log for warnings about unfinished sources. A successful status and a saved-row count do not prove that every source was fully processed.

How do maximum subscribers and hidden counts work?

Set maxSubscribers to skip channels above your chosen public count. You can use it with minSubscribers to make a range. If either subscriber limit is set, channels with no public subscriber count are skipped.

How do I exclude channels I already know?

Add one YouTube handle, channel ID, or full channel URL to excludedChannels for each channel to leave out. The Actor resolves the channel identity, so matching does not rely only on the URL text.

Can the same channel appear more than once?

No. The first eligible match is saved at once. Later matches for the same channel are ignored, even when they come from another keyword or search URL. They do not change the saved row.

How do I find only new channels on a schedule?

Run the same input again, for example as a scheduled task. When a complete earlier run with the same settings exists, a channel it did not find gets a monitoring object with both times. Channels without monitoring were already found before or have no earlier run to compare.

Can I start from channels I already know?

Yes. Use Channel details to read handles, channel IDs, channel URLs, or video URLs. Use Featured channels to get the channels that seed channels feature. Use Seed channel keywords to search with the public keywords of seed channels.

Why is a subscriber count approximate or missing?

YouTube rounds large counts, so subscribers can be an approximate number. If YouTube does not show a count, subscribers is null.

Can I paste YouTube search-result URLs?

Yes. Add public YouTube /results URLs alone or with search terms.

What happens when I leave a result limit empty?

An empty limit or 0 adds no boundary for that limit. The Actor tries to read all available matches. Source access failures and platform run limits can still stop work before a source is finished.

Does it return every requested channel?

Not always. YouTube may limit, remove, localize, or deduplicate public search data. Your filters and limits can also reduce saved rows.

Does it scrape videos?

It saves source-video evidence when the first saved match comes from a video result. With Include recent videos on, it also adds each channel's recent public long-form videos. It does not export comments or transcripts.

Do I need to sign in to YouTube?

No. The Actor reads public YouTube search and channel pages, so you do not need a YouTube login, cookies, or an API key.

📝 Changelog

v7.0 (09-11-2026)

  • Removes the searchTermsFiles input, so terms in uploaded TXT or CSV files are no longer used. There is no file upload replacement. Put those terms in searchTerms instead, up to 500 terms.
  • Adds new ways to find channels in discoveryMode: channelReferences reads the handles, channel IDs, channel URLs, or video URLs you list. featuredChannels finds the featured channels of seedChannels. seedKeywords searches with the public keywords of seedChannels.
  • YouTube search URLs now keep their supported search filters, so results from a URL with filters can change.
  • Adds searchOrder to sort channel-only search by relevance or view count, and useAutocomplete to also search YouTube autocomplete ideas.
  • languageHint now accepts longer language codes, such as zh-CN or fil.
  • Adds filters: maxVideos, channelCountries, createdAfter, createdBefore, recentUploadDays, and businessEmailButtonOnly.
  • Set includeRecentVideos to add each channel's recent long-form videos in recentVideos. maxRecentVideos sets how many. Each added video is charged.
  • Rows can now include channel.isUnlisted, channel.isAutoGenerated, profile.hasBusinessEmailButton, profile.feedUrl, profile.ownerUrls, and profile.unavailableCountryCodes.
  • Repeated runs with the same settings add monitoring to channels that the last complete run did not find.
  • Reliability improvements.

v6.1 (26-10-2026)

  • Rows now include channel.searchSnippet, channel.visibility, and channel.isIndexed.
  • Rows now include the count text shown by YouTube in metrics.subscribersText, metrics.videosText, and metrics.totalViewsText.
  • profile.tags now keeps every public channel tag instead of only the first 20.
  • Search terms and limits now appear at the top of the input form.
  • Reliability improvements.

v6.0 (24-10-2026)

  • excludedChannels now uses strings so you can enter full channel URLs, bare handles, or channel IDs. Replace each {"url":"..."} object in saved inputs with its URL string.
  • Video-result rows now include sourceVideo.url, the public link to the matching video.
  • Rows now need a non-empty channel.title. Channels with no name in either the search result or profile are skipped.
  • Set maxChannelsPerSearchTerm or maxTotalResults to 0 to remove that limit.
  • Search URLs now accept m.youtube.com/results links.
  • Reliability improvements.

v5.0 (20-10-2026)

  • Results no longer include sourceVideo.url because it can be made from sourceVideo.videoId. Update exports that read the removed key. For a video link, add the ID to https://www.youtube.com/watch?v=.
  • Counts now read more local number units. A count such as 1.4 with no known number unit is left empty.
  • Public profile links keep their destination when YouTube wraps them in a redirect link. Links back to YouTube are still left out.
  • Reliability improvements.

v4.0 (18-10-2026)

  • Results no longer include these fields: channel.isUnlisted, channel.isNoindex, metrics.subscriberText, metrics.videoText, metrics.totalViewText, profile.keywords, profile.rssUrl, profile.ownerUrls, images.thumbnailUrl, images.avatarUrl, and discoverySource.sourceKind. Update exports that read these keys. There are no direct replacements.
  • Adds profile.emails, the email addresses that the channel writes in its public profile text.
  • Two channels from the same search and result type no longer share a discoverySource.rank.
  • Subscriber counts written in lakh or crore, such as 1.38 lakh, are now converted to the full number, such as 138,000.
  • When the About page header is available, channels with no verified badge in search results or on their About page return isVerified: false instead of null.
  • The Verified channels only option uses the same verified badge check.
  • Reliability improvements.

v3.0 (07-10-2026)

  • Channel profile keywords and tags no longer repeat YouTube's generic keyword list across unrelated channels.
  • Results no longer include metrics.subscriberCountIsExact. Update exports that read it. There is no replacement for the exact-count flag.

v2.0

  • More reliable large searches with clearer first-match evidence.
  • Large multi-source searches preserve completed rows when a run must stop.
  • Each saved channel has one clear first-match discovery record with optional source-video evidence. duplicateHandling was removed to keep one saved row per channel. Remove this setting from saved inputs. Separate rows for each source are no longer available, and there is no replacement for that option.

v1.0

  • Search by public YouTube search-result URL.
  • Get the first matching channel output. matchedSources is replaced by the discoverySource object to keep one first match. Update exports to read this object instead of an array; it does not hold every former match.
  • See source-video evidence for the first match. sourceVideos is replaced by sourceVideo, one object or null, to keep only the video from that match. Update exports for this new shape; it does not hold every former video.
  • Get public profile data.
  • Filter channels by subscriber range.
  • Exclude channels from the results.

v0.1

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré