YouTube Channel Search Scraper
Pricing
from $2.70 / 1,000 channels
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é
Maintained by CommunityActor stats
9
Bookmarked
1.9K
Total users
342
Monthly active users
5 days ago
Last modified
Categories
Features
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.
- Build a niche YouTube creator list from topics, products, or audience interests.
- Run influencer discovery before reviewing creators for a campaign.
- Do YouTube competitor research for a market or content category.
- Create a channel prospect list for later review and outreach research.
- Collect YouTube channel metrics to compare public audience size.
- Set up YouTube channel monitoring with scheduled discovery runs.
📦 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 statusmetrics: subscriber, video, and total view counts, plus the count text shown by YouTubeprofile: 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 URLimages: banner and avatar sizesdiscoverySource: the submitted value, discovery method, and, for result lists, the rank and results URL of the first saved matchsourceVideo: the video from the first saved match, ornullwhen no video result found the channelrecentVideos: recent public long-form videos, when you turn on Include recent videosmonitoring: 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.
▶️ Run a YouTube channel search
- Choose a method in Find channels by.
- For a search method, add keywords or public YouTube
/resultsURLs. For Channel details, add handles, channel IDs, channel URLs, or video URLs. For Featured channels or Seed channel keywords, add seed channels. - Set the limits for each search and the whole run.
- Add filters if you need them, such as subscriber or video ranges, verified channels, countries, creation dates, recent uploads, or channels to exclude.
- Turn on recent videos if you want each channel's latest long-form videos.
- 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
| Field | Type | What it does |
|---|---|---|
discoveryMode | string | Picks 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. |
searchTerms | string array | Keywords 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. |
searchUrls | object array | Public 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[].url | string | One public YouTube search-result URL. |
channelReferences | string array | For channelReferences. Handles such as @Google, channel IDs, channel URLs, or video URLs. A video URL returns its channel. |
seedChannels | string array | For featuredChannels and seedKeywords. Handles, channel IDs, or channel URLs to start from. |
maxChannelsPerSearchTerm | integer | Stops 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. |
maxTotalResults | integer | Stops 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. |
languageHint | string | Language 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. |
countryHint | string | Two-letter country code YouTube uses for search, such as US or DE. Defaults to US. It does not filter channels by their profile country. |
searchOrder | string | relevance or viewCount for channel-only search and seedKeywords. Defaults to relevance. |
useAutocomplete | boolean | Also searches YouTube autocomplete suggestions for each keyword. Defaults to false. |
minSubscribers | integer | Saves channels with at least this many public subscribers. Channels with no public count do not match. |
maxSubscribers | integer | Saves channels with no more than this many public subscribers. Channels with no public count do not match. |
minVideos | integer | Saves channels with at least this many public videos. Channels with no public video count do not match. |
maxVideos | integer | Saves channels with no more than this many public videos. Channels with no public video count do not match. |
verifiedOnly | boolean | Saves only channels YouTube marks as verified. Defaults to false. |
channelCountries | string array | Saves only channels whose profile states one of these two-letter countries, such as DE or US. Channels with no public country do not match. |
createdAfter | string | Saves only channels created on or after this YYYY-MM-DD date. Channels with no public creation date do not match. |
createdBefore | string | Saves only channels created on or before this YYYY-MM-DD date. Channels with no public creation date do not match. |
recentUploadDays | integer | Saves only channels with a dated public long-form video from the past number of days. Minimum 1. |
businessEmailButtonOnly | boolean | Saves only channels whose profile shows YouTube's business-email button. It does not reveal the email behind it. Defaults to false. |
excludedChannels | string array | Leaves out channels given as a handle, channel ID, or full channel URL. The Actor matches each channel by its identity. |
includeRecentVideos | boolean | Adds each saved channel's recent public long-form videos. Each added video is charged. Defaults to false. |
maxRecentVideos | integer | Adds 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
| Field | Type | What it does |
|---|---|---|
channel.id | string | Stable YouTube channel ID. |
channel.handle | string or null | Public handle. |
channel.title | string | Public channel name. |
channel.url | string or null | Main public channel URL. |
channel.description | string or null | Public channel description. |
channel.isVerified | boolean or null | Says if YouTube marks the channel as verified. |
channel.isFamilySafe | boolean or null | YouTube's public family-safety signal. |
channel.searchSnippet | string or null | Channel description text shown in the first matching search result, when shown. |
channel.visibility | string or null | Channel visibility stated by YouTube, such as public, when shown. |
channel.isIndexed | boolean or null | Says if YouTube states that the channel can be indexed. null when YouTube gives no such statement. |
channel.isUnlisted | boolean | Says if YouTube states that the channel is unlisted, when read. |
channel.isAutoGenerated | boolean | Says if YouTube created the channel automatically. Present only when YouTube states it. |
metrics.subscribers | integer or null | Public subscriber count when shown. YouTube rounds large counts, so this number can be approximate. |
metrics.subscribersText | string or null | Subscriber count text as shown by YouTube, such as 2.76M subscribers. |
metrics.videos | integer or null | Public video count when shown. |
metrics.videosText | string or null | Video count text as shown by YouTube. |
metrics.totalViews | integer or null | Total public view count when shown. |
metrics.totalViewsText | string or null | Total view count text as shown by YouTube. |
profile.country | string or null | Country shown on the channel. |
profile.joinedText | string or null | Join text shown by YouTube. |
profile.tags | string array | Public channel tags, when shown by YouTube. |
profile.tabs | object array | Public channel tabs. |
profile.tabs.title | string | Tab name. |
profile.tabs.url | string | Public tab URL. |
profile.externalLinks | string array | Public links shared by the channel. |
profile.emails | string array | Email addresses the channel writes in its own public profile text. Empty when none is written there. |
profile.hasBusinessEmailButton | boolean | Says if the profile shows YouTube's business-email button. It does not give the email behind it. Present when read. |
profile.availableCountryCodes | string array | Country codes where the channel is available. |
profile.unavailableCountryCodes | string array | Country codes where YouTube states the channel is unavailable. |
profile.alternateUrls | string array | Other public URLs for the channel. |
profile.ownerUrls | string array | Public owner links shown by YouTube. |
profile.feedUrl | string | Public video feed link shown by YouTube. |
images.bannerUrl | string or null | Public banner URL. |
images.avatarImages | object array | Available public avatar sizes. |
images.avatarImages.url | string | Public avatar image URL. |
images.avatarImages.width | integer or null | Image width in pixels. |
images.avatarImages.height | integer or null | Image height in pixels. |
discoverySource.value | string | Keyword or search URL that first found the channel. |
discoverySource.discoverySurface | string | Always video_results for this form. |
discoverySource.rank | integer | Position 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.sourceUrl | string | Results URL where the first saved match appeared. |
sourceVideo | object | Video from the first saved match. |
sourceVideo.videoId | string | Stable source video ID. |
sourceVideo.url | string | Public URL of the matching YouTube video. |
sourceVideo.title | string or null | Source video title. |
sourceVideo.publishedText | string or null | Publication text shown by YouTube. |
sourceVideo.viewText | string or null | View-count text shown by YouTube. |
recentVideos | object array | Recent public long-form videos. Present only when Include recent videos is on. |
recentVideos.videoId | string | Stable video ID. |
recentVideos.url | string | Public video URL. |
recentVideos.title | string | Video title. |
recentVideos.views | integer | Public view count. |
recentVideos.publishedText | string | Publication text shown by YouTube. |
monitoring | object | Present only when a repeated run with the same settings finds a channel that the last complete run did not find. |
monitoring.firstFoundAt | string | Date and time this run found the channel. |
monitoring.comparedSearchAt | string | Date 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
| Field | Type | What it does |
|---|---|---|
channel.id | string | Stable YouTube channel ID. |
channel.handle | string or null | Public handle. |
channel.title | string | Public channel name. |
channel.url | string or null | Main public channel URL. |
channel.description | string or null | Public channel description. |
channel.isVerified | boolean or null | Says if YouTube marks the channel as verified. |
channel.isFamilySafe | boolean or null | YouTube's public family-safety signal. |
channel.searchSnippet | string or null | Channel description text shown in the first matching search result, when shown. |
channel.visibility | string or null | Channel visibility stated by YouTube, such as public, when shown. |
channel.isIndexed | boolean or null | Says if YouTube states that the channel can be indexed. null when YouTube gives no such statement. |
channel.isUnlisted | boolean | Says if YouTube states that the channel is unlisted, when read. |
channel.isAutoGenerated | boolean | Says if YouTube created the channel automatically. Present only when YouTube states it. |
metrics.subscribers | integer or null | Public subscriber count when shown. YouTube rounds large counts, so this number can be approximate. |
metrics.subscribersText | string or null | Subscriber count text as shown by YouTube, such as 2.76M subscribers. |
metrics.videos | integer or null | Public video count when shown. |
metrics.videosText | string or null | Video count text as shown by YouTube. |
metrics.totalViews | integer or null | Total public view count when shown. |
metrics.totalViewsText | string or null | Total view count text as shown by YouTube. |
profile.country | string or null | Country shown on the channel. |
profile.joinedText | string or null | Join text shown by YouTube. |
profile.tags | string array | Public channel tags, when shown by YouTube. |
profile.tabs | object array | Public channel tabs. |
profile.tabs.title | string | Tab name. |
profile.tabs.url | string | Public tab URL. |
profile.externalLinks | string array | Public links shared by the channel. |
profile.emails | string array | Email addresses the channel writes in its own public profile text. Empty when none is written there. |
profile.hasBusinessEmailButton | boolean | Says if the profile shows YouTube's business-email button. It does not give the email behind it. Present when read. |
profile.availableCountryCodes | string array | Country codes where the channel is available. |
profile.unavailableCountryCodes | string array | Country codes where YouTube states the channel is unavailable. |
profile.alternateUrls | string array | Other public URLs for the channel. |
profile.ownerUrls | string array | Public owner links shown by YouTube. |
profile.feedUrl | string | Public video feed link shown by YouTube. |
images.bannerUrl | string or null | Public banner URL. |
images.avatarImages | object array | Available public avatar sizes. |
images.avatarImages.url | string | Public avatar image URL. |
images.avatarImages.width | integer or null | Image width in pixels. |
images.avatarImages.height | integer or null | Image height in pixels. |
discoverySource.value | string | Keyword, search URL, handle, channel ID, channel URL, video URL, or seed channel that first found the channel. |
discoverySource.discoverySurface | string | How the channel was found: channel_filter, handle_lookup, channel_lookup, video_lookup, featured_channels, or seed_keywords. |
discoverySource.rank | integer | Position 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.sourceUrl | string | Results URL where the first saved match appeared. Present for channel-only search and seed channel keywords. |
sourceVideo | null | Always null for this form. |
recentVideos | object array | Recent public long-form videos. Present only when Include recent videos is on. |
recentVideos.videoId | string | Stable video ID. |
recentVideos.url | string | Public video URL. |
recentVideos.title | string | Video title. |
recentVideos.views | integer | Public view count. |
recentVideos.publishedText | string | Publication text shown by YouTube. |
monitoring | object | Present only when a repeated run with the same settings finds a channel that the last complete run did not find. |
monitoring.firstFoundAt | string | Date and time this run found the channel. |
monitoring.comparedSearchAt | string | Date 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
searchTermsFilesinput, so terms in uploaded TXT or CSV files are no longer used. There is no file upload replacement. Put those terms insearchTermsinstead, up to 500 terms. - Adds new ways to find channels in
discoveryMode:channelReferencesreads the handles, channel IDs, channel URLs, or video URLs you list.featuredChannelsfinds the featured channels ofseedChannels.seedKeywordssearches with the public keywords ofseedChannels. - YouTube search URLs now keep their supported search filters, so results from a URL with filters can change.
- Adds
searchOrderto sort channel-only search by relevance or view count, anduseAutocompleteto also search YouTube autocomplete ideas. languageHintnow accepts longer language codes, such aszh-CNorfil.- Adds filters:
maxVideos,channelCountries,createdAfter,createdBefore,recentUploadDays, andbusinessEmailButtonOnly. - Set
includeRecentVideosto add each channel's recent long-form videos inrecentVideos.maxRecentVideossets how many. Each added video is charged. - Rows can now include
channel.isUnlisted,channel.isAutoGenerated,profile.hasBusinessEmailButton,profile.feedUrl,profile.ownerUrls, andprofile.unavailableCountryCodes. - Repeated runs with the same settings add
monitoringto channels that the last complete run did not find. - Reliability improvements.
v6.1 (26-10-2026)
- Rows now include
channel.searchSnippet,channel.visibility, andchannel.isIndexed. - Rows now include the count text shown by YouTube in
metrics.subscribersText,metrics.videosText, andmetrics.totalViewsText. profile.tagsnow 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)
excludedChannelsnow 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
maxChannelsPerSearchTermormaxTotalResultsto0to remove that limit. - Search URLs now accept
m.youtube.com/resultslinks. - Reliability improvements.
v5.0 (20-10-2026)
- Results no longer include
sourceVideo.urlbecause it can be made fromsourceVideo.videoId. Update exports that read the removed key. For a video link, add the ID tohttps://www.youtube.com/watch?v=. - Counts now read more local number units. A count such as
1.4with 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, anddiscoverySource.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: falseinstead ofnull. - 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.
duplicateHandlingwas 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.
matchedSourcesis replaced by thediscoverySourceobject 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.
sourceVideosis replaced bysourceVideo, one object ornull, 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 🫡
🔗 Related Actors
- YouTube Channel Scraper: Get a public channel profile and recent videos when you already know the channel.
- YouTube Channel Statistics Scraper: Check public subscriber, view, and video counts for known channels.
- YouTube Similar Channels Finder: Find related public channels from a topic or channel you are studying.
- YouTube Channel Leads Scraper: Check discovered channels for public creator email leads.
- Youtube Keywords Discovery Tool: Collect YouTube autocomplete ideas before choosing channel search terms.
Made with ❤️ by Maxime Dupré