YouTube Channel Search Scraper
Pricing
from $0.40 / 1,000 channels
YouTube Channel Search Scraper
Find public YouTube channels from search terms or public YouTube search-result URLs. Review channel IDs, handles, public metrics, and profile details. Each channel row keeps the first eligible search match.
Pricing
from $0.40 / 1,000 channels
Rating
5.0
(2)
Developer
Maxime Dupré
Maintained by CommunityActor stats
9
Bookmarked
1.5K
Total users
191
Monthly active users
0.052 hours
Issues response
6 hours ago
Last modified
Categories
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 or reusable YouTube search-result URLs. Get channel IDs, handles, public metrics, profile details, and the first eligible match saved for each channel.
- 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, verification, and family-safe statusmetrics: subscriber, video, and total view countsprofile: country, joined text, tags, tabs, public links, public emails the channel writes in its profile text, available country codes, and alternate URLsimages: banner and avatar sizesdiscoverySource: the keyword or search URL, discovery surface, rank, and results URL for the first saved matchsourceVideo: the video from the first saved match, ornullwhen channel-only search saved it
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
- Keep the sample keyword or add your own topics.
- You can also add public YouTube
/resultsURLs. - Choose video results, channel-only search, or both.
- Set the limits for each source and the whole run.
- You can set subscriber limits, a minimum video count, verified-only results, or channel URLs to exclude.
- 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 surface, that later match is ignored. The saved row keeps its first discovery evidence.
⚙️ Input
| Field | Type | What it does |
|---|---|---|
searchTerms | string array | Searches up to 500 topics, products, niches, or creator types. |
searchTerms[] | string | One topic, product, niche, or creator type to search. |
searchTermsFiles | string array | Loads terms from up to 20 TXT or CSV files. All inputs together can hold up to 500 terms. |
searchTermsFiles[] | string | One TXT or CSV file with search terms. |
searchUrls | object array | Runs public youtube.com/results URLs again. It keeps the search words and ignores the URL's language, country, and filter. Set those with Page language, Page country, and Find channels by. Each object has a url. |
searchUrls[].url | string | One public YouTube search-result URL to run. |
discoveryMode | string | Uses video results, channel-only search, or both. |
maxChannelsPerSearchTerm | integer | Stops each keyword or URL at this channel count. Repeat matches can count without being saved again. See the field help for how repeats and filters count. Leave it empty to return all available channels until that source is exhausted. |
maxTotalResults | integer | Stops after this many saved channels in the run. Leave it empty to return all available channels until every source is exhausted. |
minSubscribers | integer | Saves channels at or above this public subscriber count. Channels with no public count are skipped. |
maxSubscribers | integer | Saves channels at or below this public subscriber count. Channels with no public count are skipped. |
minVideos | integer | Saves channels at or above this public video count. Channels with no public video count are skipped. |
verifiedOnly | boolean | Saves only channels YouTube marks as verified. |
excludedChannels | object array | Leaves out YouTube handle URLs or /channel/UC... URLs. Each object has a url. |
excludedChannels[].url | string | One YouTube handle URL or /channel/UC... URL to leave out. |
languageHint | string | Sets a two-letter YouTube page language hint, such as en. |
countryHint | string | Sets a two-letter YouTube country hint, such as US. |
The Input tab pre-fills both work-limit fields with 10 for a convenient first run. The schema has no default for either field. If an API, CLI, or scheduled run omits a field, that boundary is not added. The Actor continues until the matching source or the whole run is exhausted.
Example input from a successful current-beta default-input run
{"discoveryMode": "both","searchTerms": ["coffee roasting"],"maxChannelsPerSearchTerm": 10,"maxTotalResults": 10,"verifiedOnly": false}
🧾 Output
Each saved row has one of two forms. A video-result match has a sourceVideo object. A channel-only match has sourceVideo: null. Both forms keep the first eligible discovery evidence.
Channel row with source-video evidence
| Field | Type | What it does |
|---|---|---|
channel.id | string | Stable YouTube channel ID. |
channel.handle | string or null | Public handle. |
channel.title | string or null | 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. |
metrics.subscribers | integer or null | Public subscriber count when shown. YouTube rounds large counts, so this number can be approximate. |
metrics.videos | integer or null | Public video count when shown. |
metrics.totalViews | integer or null | Total public view count when shown. |
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.availableCountryCodes | string array | Country codes where the channel is available. |
profile.alternateUrls | string array | Other public URLs for the channel. |
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 for the first saved match. |
discoverySource.discoverySurface | string | Result type of the first saved match: video_results or channel_filter. |
discoverySource.rank | integer | Position in the YouTube results list, starting at 1. Video results and channel-only search are numbered separately. Numbers keep going across all pages of that search. 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 when a video result first showed the channel. |
sourceVideo.videoId | string | Stable source video ID. |
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. |
Example channel row with source-video evidence
This row is real data from a recent successful run of this Actor.
{"channel": {"id": "UCMb0O2CdPBNi-QqPk5T3gsQ","handle": "@jameshoffmann","title": "James Hoffmann","url": "https://www.youtube.com/@jameshoffmann","description": "Hi! My name is James, and I make videos about anything and everything to do with coffee, occasionally food and sometimes business/entrepreneurship. I create how-tos, guides, reviews, vlogs, video essays and mini-documentary films. In the real world, I've started a few companies, I wrote \"The World Atlas of Coffee\" and \"How To Make The Best Coffee At Home\". I do a little advisory work for startups too.\n\nIf you want to get in touch, drop me a line but please read these two things first:\n\n1. I don't do paid reviews. I have a Patreon that helps me buy the products I want to review to prevent bias (then I give them away!)\n2. I get a lot of email, so sadly I can't help with queries about which equipment you should buy.\n\nTO GET IN TOUCH PLEASE REACH OUT VIA WEBSITE: https://www.jameshoffmann.co.uk/contact-me\nManagement: Ziggurat XYZ","isVerified": true,"isFamilySafe": true},"metrics": {"subscribers": 2570000,"videos": 411,"totalViews": 398313473},"profile": {"country": "United Kingdom","joinedText": "Joined Dec 8, 2014","tags": ["coffee","james hoffmann","jimseven","james hoffman"],"tabs": [{"title": "Home","url": "https://www.youtube.com/@jameshoffmann/featured"},{"title": "Videos","url": "https://www.youtube.com/@jameshoffmann/videos"},{"title": "Shorts","url": "https://www.youtube.com/@jameshoffmann/shorts"},{"title": "Live","url": "https://www.youtube.com/@jameshoffmann/streams"},{"title": "Playlists","url": "https://www.youtube.com/@jameshoffmann/playlists"},{"title": "Posts","url": "https://www.youtube.com/@jameshoffmann/posts"},{"title": "Store","url": "https://www.youtube.com/@jameshoffmann/store"},{"title": "Search","url": "https://www.youtube.com/@jameshoffmann/search"}],"externalLinks": ["https://www.jameshoffmann.co.uk/contact-me","http://linktree.com/jimseven"],"emails": [],"availableCountryCodes": ["SB","SE","VC","MP","SL","VI","VU","HR","GI","PM","TZ","AE","MG","MS","UA","GM","WS","KN","NC","CF","PG","EG","GY","LT","BT","MO","ET","NR","GL","NZ","ZA","BG","KZ","AD","BF","NP","ME","GA","HK","CW","MC","SR","MH","AL","MR","OM","AQ","HM","SA","SK","RO","PR","HU","VA","CN","AX","HN","NF","SX","CC","SO","LB","PH","CV","QA","PY","IS","NU","AG","SY","MT","JO","MN","MU","CL","CY","GU","BJ","GD","YE","SG","CK","GH","SN","PN","BO","CH","GW","UY","CO","EH","SD","IN","AM","BA","CD","MD","FM","AW","NI","TK","BI","CZ","MM","TR","BL","CU","FO","LY","GB","TH","LS","KY","AI","LU","FK","FI","RE","PK","DJ","AR","VN","IM","KE","RU","CA","GE","MW","TG","TW","KM","JM","KW","TO","AT","ML","MV","BZ","KR","CR","PT","TM","NA","PF","TT","LC","LA","LI","PL","TV","KP","MQ","GQ","GR","IR","PE","LV","HT","TL","VG","IO","EE","SH","ST","PW","NL","BH","BQ","DM","BM","SV","TJ","CG","UG","NG","ZW","WF","AF","SZ","MY","IE","BN","TN","GT","MZ","PA","MX","KG","IL","MA","PS","TF","UM","RS","AS","BY","SJ","AO","EC","GS","CM","SS","ES","BS","KI","GF","ZM","JP","BR","MF","VE","IT","DZ","SI","AU","RW","TD","YT","CI","GG","DK","GP","KH","MK","GN","BV","TC","BE","NO","DE","ER","UZ","FR","LK","NE","DO","BB","SC","US","AZ","ID","IQ","SM","CX","JE","BD","BW","LR","FJ"],"alternateUrls": ["https://m.youtube.com/@jameshoffmann/about","https://www.youtube.com/feeds/videos.xml?channel_id=UCMb0O2CdPBNi-QqPk5T3gsQ","android-app://com.google.android.youtube/http/www.youtube.com/channel/UCMb0O2CdPBNi-QqPk5T3gsQ","ios-app://544007664/vnd.youtube/www.youtube.com/channel/UCMb0O2CdPBNi-QqPk5T3gsQ"]},"images": {"bannerUrl": null,"avatarImages": [{"url": "https://yt3.googleusercontent.com/2k3-P8cX-0sawteUmQSzaQb7pLaCOKcNtEYDEXy1y8Y5wv97Ecgzhgg50b6NYCwxm677h9bT=s72-c-k-c0x00ffffff-no-rj","width": 72,"height": 72},{"url": "https://yt3.googleusercontent.com/2k3-P8cX-0sawteUmQSzaQb7pLaCOKcNtEYDEXy1y8Y5wv97Ecgzhgg50b6NYCwxm677h9bT=s120-c-k-c0x00ffffff-no-rj","width": 120,"height": 120},{"url": "https://yt3.googleusercontent.com/2k3-P8cX-0sawteUmQSzaQb7pLaCOKcNtEYDEXy1y8Y5wv97Ecgzhgg50b6NYCwxm677h9bT=s160-c-k-c0x00ffffff-no-rj","width": 160,"height": 160}]},"discoverySource": {"value": "coffee roasting","discoverySurface": "video_results","rank": 1,"sourceUrl": "https://www.youtube.com/results?search_query=coffee+roasting&hl=en&gl=US"},"sourceVideo": {"videoId": "N6BJVM5tvnw","title": "Coffee Roasting Explained","publishedText": "3y ago","viewText": "2,153,328 views"}}
Channel row from channel-only search
| Field | Type | What it does |
|---|---|---|
channel.id | string | Stable YouTube channel ID. |
channel.handle | string or null | Public handle. |
channel.title | string or null | 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. |
metrics.subscribers | integer or null | Public subscriber count when shown. YouTube rounds large counts, so this number can be approximate. |
metrics.videos | integer or null | Public video count when shown. |
metrics.totalViews | integer or null | Total public view count when shown. |
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.availableCountryCodes | string array | Country codes where the channel is available. |
profile.alternateUrls | string array | Other public URLs for the channel. |
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 for the first saved match. |
discoverySource.discoverySurface | string | Result type of the first saved match: video_results or channel_filter. |
discoverySource.rank | integer | Position in the YouTube results list, starting at 1. Video results and channel-only search are numbered separately. Numbers keep going across all pages of that search. Results removed by your filters or excluded channels still get a number. |
discoverySource.sourceUrl | string | Results URL where the first saved match appeared. |
sourceVideo | null | Always null when channel-only search first finds the channel. |
Example channel row from channel-only search
This row is real data from a recent successful run of this Actor.
{"channel": {"id": "UC3s4wfa7X33w2S2YD5aBFgA","handle": "@CryptoGlobalNewsTeam","title": "Crypto Global News Team","url": "https://www.youtube.com/@CryptoGlobalNewsTeam","description": "Crypto Global News are putting the fun back into the news, a team of industry professionals have teamed\nup to bring to you Breaking News as it happens, Reviews, Interviews and much much more. \n\nSubscribe and hit the notification bell, become part of the community! \n\nFor all business enquiries please contact: info@cryptognt.com","isVerified": false,"isFamilySafe": true},"metrics": {"subscribers": 23500,"videos": 247,"totalViews": 1748365},"profile": {"country": "United States","joinedText": "Joined May 19, 2018","tags": ["Cryptocurrency news","Cryptocurrency mining","Cryptocurrency reddit","Cryptocurrency list","Cryptocurrency stocks","Cryptocurrency exchange","Bitcoin news","bitcoin price","bitcoin to use","bitcoin mining","Ethereum price","Ethereum value","Ethereum classic","Ethereum to use","Ethereum mining","Ripple price","Ripple reddit","Rippke price chart","trading","forex"],"tabs": [{"title": "Home","url": "https://www.youtube.com/@CryptoGlobalNewsTeam/featured"},{"title": "Videos","url": "https://www.youtube.com/@CryptoGlobalNewsTeam/videos"},{"title": "Playlists","url": "https://www.youtube.com/@CryptoGlobalNewsTeam/playlists"},{"title": "Search","url": "https://www.youtube.com/@CryptoGlobalNewsTeam/search"}],"externalLinks": ["https://twitter.com/Cryptognt","https://t.me/CryptoGlobalNewsTeam","http://www.cryptognt.com"],"emails": ["info@cryptognt.com"],"availableCountryCodes": ["AR","JM","AI","ZM","ET","PG","BS","ME","TC","LI","SZ","MM","PH","SN","UM","GH","NO","EH","VI","FK","KP","NF","PM","UA","PN","PT","SV","BJ","RW","IT","KN","VN","BW","KG","NE","TD","TK","BQ","PE","ST","GR","TG","AX","AD","AL","OM","IN","SM","HN","UZ","CY","YT","KY","SC","BB","NI","ML","TR","CF","IR","EE","IL","TZ","PF","BR","FR","DK","MN","BL","VE","GF","NA","AE","WS","GT","MF","BA","FJ","GM","LC","QA","RU","CK","SY","TN","RE","HR","GB","FM","KR","LT","MU","BZ","GW","MS","TW","SA","WF","MY","MP","NP","DO","IO","CH","AG","CO","TL","UG","AU","LA","MV","DJ","AS","LS","AZ","VU","TO","LB","GD","IE","SX","BT","KE","PL","BG","BI","NU","SL","EG","NC","AO","KH","LY","GG","CU","NG","GE","BV","JP","GS","VA","DM","CG","ID","LV","ER","SJ","GY","CC","SD","CV","TH","ES","PS","GA","US","ZA","CX","FO","NL","MO","CW","HT","AF","HK","KM","CI","MT","LK","BN","BM","MA","VG","IM","SB","MR","CR","IQ","KI","KW","UY","BY","IS","CN","MG","MK","AQ","YE","MX","MZ","CA","AM","TV","NZ","SE","LR","MH","SI","FI","TF","RO","TM","GU","BH","DE","GN","KZ","EC","MW","SK","SO","JO","SS","BO","GP","AT","BD","TT","HM","LU","NR","GL","MC","SG","SH","TJ","HU","CD","PR","BF","PW","CM","MD","GQ","RS","CZ","GI","VC","SR","AW","MQ","PY","PK","JE","PA","DZ","BE","CL","ZW"],"alternateUrls": ["https://m.youtube.com/@CryptoGlobalNewsTeam/about","https://www.youtube.com/feeds/videos.xml?channel_id=UC3s4wfa7X33w2S2YD5aBFgA","android-app://com.google.android.youtube/http/www.youtube.com/channel/UC3s4wfa7X33w2S2YD5aBFgA","ios-app://544007664/vnd.youtube/www.youtube.com/channel/UC3s4wfa7X33w2S2YD5aBFgA"]},"images": {"bannerUrl": "https://yt3.googleusercontent.com/xyYWPPnyjKh5IAiGvq1QGHGZaeA8paB1bRr7YQXcZK_L2zrWLCSGGEhvtk7FpM2xWGV9ax6u=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj","avatarImages": [{"url": "https://yt3.googleusercontent.com/ytc/AIdro_nYbxzPvBazrMZcAFDxykZzBDgv1G8YaKiBvO1Xiy4V8HI=s72-c-k-c0x00ffffff-no-rj","width": 72,"height": 72},{"url": "https://yt3.googleusercontent.com/ytc/AIdro_nYbxzPvBazrMZcAFDxykZzBDgv1G8YaKiBvO1Xiy4V8HI=s120-c-k-c0x00ffffff-no-rj","width": 120,"height": 120},{"url": "https://yt3.googleusercontent.com/ytc/AIdro_nYbxzPvBazrMZcAFDxykZzBDgv1G8YaKiBvO1Xiy4V8HI=s160-c-k-c0x00ffffff-no-rj","width": 160,"height": 160}]},"discoverySource": {"value": "@CryptoGlobalNewsTeam","discoverySurface": "channel_filter","rank": 1,"sourceUrl": "https://www.youtube.com/results?search_query=%40CryptoGlobalNewsTeam&hl=en&gl=US&sp=EgIQAg%3D%3D"},"sourceVideo": null}
💳 Pricing
This Actor uses pay-per-event pricing. One event is charged for each unique eligible public channel saved to the dataset. A repeated match does not create another row or event. See the Store for the current price for your plan.
🔌 Integrations
Open the run's default dataset to review the saved channel rows.
❓ FAQ
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 their YouTube handle URLs or /channel/UC... URLs to excludedChannels. 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.
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 or uploaded search-term files.
What happens when I leave a result limit empty?
The Actor keeps searching until the matching source is exhausted. If both work-limit fields are empty, it continues until all submitted sources are exhausted. YouTube search availability, filters, and other run conditions can still lead to fewer rows.
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. It does not export full channel video lists, 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
v5.0 (20-10-2026)
- Results no longer include
sourceVideo.url. - Counts now read more local number units. A decimal count with no known unit is left empty.
- Public profile links keep their destination when YouTube wraps them in a redirect link.
- 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. - 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 the
subscriberCountIsExactfield.
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.
v1.0
- Search by public YouTube search-result URL.
- Get the first matching channel output.
- See source-video evidence for the first match.
- 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é