YouTube Channel Scraper
Pricing
from $0.36 / 1,000 youtube channel rows
YouTube Channel Scraper
This YouTube channel scraper gets public channel profiles and channel videos, or finds channels and videos by keyword. Rows include subscriber counts, views, publish dates, thumbnails, and links when YouTube shows them. No YouTube login or API key is needed.
Pricing
from $0.36 / 1,000 youtube channel rows
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
19
Total users
4
Monthly active users
a day ago
Last modified
Categories
Share
📺 Get YouTube channel data without an API key
This YouTube channel scraper collects public channel profiles, channel video lists, and keyword search results from YouTube. It is built for creator researchers, marketers, and analysts who need channel and video data in one place.
Each saved row shows a channel or a video, with subscriber counts, views, publish dates, thumbnails, and links when YouTube shows them. You do not need a YouTube login, cookies, or an API key. Add your channels or keywords, run this YouTube channel scraper on Apify, and open the dataset.
Use it to:
- Build a creator list for a niche with channel names, handles, subscriber counts, and channel links.
- Get the list of videos in a YouTube channel with titles, links, publish dates, and view counts.
- Find YouTube channels and videos that match your keywords.
- Compare channel size and recent video views across competitor channels.
- Run it on a schedule to check a channel's latest uploads.
📊 Channel profiles and video rows you get
Each row shows where it came from, so you can trace it back. Every row is either a channel profile row or a video row.
Channel profile rows include the channel ID, handle, link, title, and description. They also include subscriber count, total views as shown, video count as shown, join date, location, verified status, avatar and banner links, and About section links when you turn them on.
Video rows include the video ID, link, title, description, publish date when YouTube shows it, duration, view count, thumbnail link, tags, and video type: video, short, or live. Video rows from channel lists also include the channel's full details when YouTube shows them, so you don't need to join files. Keyword video rows include only the channel's ID, link, and name, plus its handle when YouTube shows one. Like counts, comment counts, and transcripts appear when you turn on Include likes, comment counts, and transcripts.
Some fields can be empty when YouTube does not show them on the public page or feed.
▶️ Run it on channels or keywords
- Choose a Result type: Channel videos with profile data, Channel profiles only, Videos from keyword search, or Channel profiles from keyword search.
- Add channels or keywords. Each run uses one list type, so run channels and keywords as separate runs.
- Set the video limit, sort order, or publish-date range if you need them.
- Turn on Include description links or Include likes, comment counts, and transcripts only when you need them. Description links add a small charge. The engagement option makes runs take longer.
- Run the Actor and open the dataset.
For a first run, keep the prefilled channels: @mkbhd, https://www.youtube.com/@veritasium, and @LinusTechTips. The prefilled run saves up to 25 videos per channel, and each video row includes its channel's details when YouTube shows them.
For quick tests, use one or two channels and a low video limit. For larger runs, raise the per-channel limit or add a total row limit to control cost.
Notes and limits
- Channels, videos, or keywords that can't be read (private, removed, invalid, or blocked) don't become rows. They are listed in the run's warning log.
- A video's publish date is empty when the Actor can't confirm it.
- The Actor reads public YouTube pages and feeds. It doesn't download videos, save comment text, or extract emails.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
Result type (mode) | string | Which rows to save. Channel videos with profile data saves one row per video. Channel profiles only saves one row per channel. Videos from keyword search saves videos found by your keywords. Channel profiles from keyword search saves channels found by your keywords. Prefilled as Channel videos with profile data. |
Video limit per channel (maxVideosPerChannel) | integer | Used with Channel videos with profile data. The most videos to save from each channel. Prefilled as 25. Leave it empty to save every available video until the channel runs out of videos. Lower it for a quick, low-cost test. |
Sort videos by (sortBy) | string | Used with channel videos. The order to use from the channel's Videos tab: latest, popular, or oldest. Default: latest. |
YouTube channels (channels) | array of strings | Used with the two channel result types. Add full YouTube channel links, @handles such as @mkbhd, channel IDs that start with UC, or plain handles such as mkbhd. You can mix formats in one run. |
Keywords (keywords) | array of strings | Used with the two keyword result types. Add each keyword or phrase as its own entry. |
Total row limit (maxTotalRows) | integer | The most rows to save in one run, across all channels or keywords. Leave it empty to save every available row until the sources run out. |
Published after (publishedAfter) | string (YYYY-MM-DD) | Optional. Used with Channel videos with profile data. Save only videos published on or after this UTC date. The date check reads each video's exact UTC publish date, which takes extra requests, so a date limit on a long channel makes the run slower. |
Published before (publishedBefore) | string (YYYY-MM-DD) | Optional. Used with Channel videos with profile data. Save only videos published on or before this UTC date. The date check works the same way as Published after. |
Include description links (includeDescriptionLinks) | boolean | Used with Channel videos with profile data, Channel profiles only, and Channel profiles from keyword search. Saves the website and social links from each channel's About section when available. Adds a small extra charge. Default: off. |
Include likes, comment counts, and transcripts (includeEngagementAndTranscripts) | boolean | Optional. Used with Channel videos with profile data and Videos from keyword search. Adds each video's like count, comment count, and transcript text and language when captions exist. Each video needs extra YouTube requests, so runs take longer. Default: off. |
Example input
This is the default input: three prefilled channels, up to 25 videos per channel, and no extra options turned on.
{"mode": "channelVideos","maxVideosPerChannel": 25,"sortBy": "latest","channels": ["@mkbhd","https://www.youtube.com/@veritasium","@LinusTechTips"],"includeDescriptionLinks": false,"includeEngagementAndTranscripts": false}
🧾 Output
The dataset has two row shapes: channel profile rows and video rows. Each table lists every field in its shape. Each example row comes from a real run of this Actor.
Channel profile row
| Field | Type | What it does |
|---|---|---|
rowType | string | channel for a channel profile row. |
sourceTarget | string | The input value that led to this row, such as a channel link, @handle, channel ID, or keyword. |
sourceUrl | string | The YouTube page the Actor read to find this row, such as a channel's Videos page or a search results page. |
channelId | string or null | The channel ID. It starts with UC. Empty when the channel page doesn't show it. |
channelHandle | string or null | The channel's @handle, such as @veritasium. Empty when the channel has no handle. |
channelUrl | string or null | The link to the channel's main page. Empty when the channel page doesn't show it. |
channelTitle | string or null | The channel's display name. |
channelDescription | string or null | The short description shown at the top of the channel page. Empty when none is shown. |
channelSubscriberCount | integer or null | The subscriber count as a whole number. It can be rounded from the count YouTube shows. |
channelTotalViewsText | string or null | The channel's total views, as YouTube shows them. |
channelVideoCountText | string or null | The number of channel videos, as YouTube shows it. |
channelJoinedText | string or null | The join date, as the channel page shows it, such as Joined Jan 24, 2019. |
channelLocation | string or null | The channel's location, when YouTube shows one. |
channelIsVerified | boolean or null | true when the channel has a verified badge, and false when it doesn't. Empty when the badge status can't be read. |
channelAvatarUrl | string or null | The link to the channel's profile picture. |
channelBannerUrl | string or null | The link to the channel's banner image. |
channelLinks | array of strings | Website and social links from the About section. Empty when Include description links is off or none are shown. |
videoId | null | Always empty in channel rows. |
videoUrl | null | Always empty in channel rows. |
videoTitle | null | Always empty in channel rows. |
videoDescription | null | Always empty in channel rows. |
videoPublishedAt | null | Always empty in channel rows. |
videoDurationText | null | Always empty in channel rows. |
videoViewCount | null | Always empty in channel rows. |
videoLikeCount | null | Always empty in channel rows. |
videoCommentCount | null | Always empty in channel rows. |
videoThumbnailUrl | null | Always empty in channel rows. |
videoTags | array of strings | Always empty in channel rows. |
videoTranscriptLanguage | null | Always empty in channel rows. |
videoTranscriptText | null | Always empty in channel rows. |
videoType | null | Always empty in channel rows. |
position | null | Always empty in channel rows. |
Example channel profile row
This row comes from a keyword channel search for python tutorial, with About section links included.
{"rowType": "channel","sourceTarget": "python tutorial","sourceUrl": "https://www.youtube.com/results?search_query=python%20tutorial&sp=EgIQAg%3D%3D","channelId": "UCKQdc0-Targ4nDIAUrlfKiA","channelHandle": "@PythonSimplified","channelUrl": "https://www.youtube.com/channel/UCKQdc0-Targ4nDIAUrlfKiA","channelTitle": "Python Simplified","channelDescription": "Hi everyone! My name is Mariya and I'm a software developer recently moved to Sofia, Bulgaria.","channelSubscriberCount": 286000,"channelTotalViewsText": "14,074,535 views","channelVideoCountText": "254 videos","channelJoinedText": "Joined Jan 24, 2019","channelLocation": "Bulgaria","channelIsVerified": true,"channelAvatarUrl": "https://yt3.googleusercontent.com/ytc/AIdro_ngt_N86CG1gQ576UmAbpFyxnCZddjPWzzKXzTfxljsZkM=s72-c-k-c0x00ffffff-no-rj","channelBannerUrl": "https://yt3.googleusercontent.com/_vbnpya4ZvbqSGEtiS_feiCbNGr5ARJn-46MkwzQh3oCRS9c2_7fxyi9Z1W83fM0Cy7uTZFEakU=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj","channelLinks": ["github.com/MariyaSha","twitter.com/mariyasha888","linkedin.com/in/mariyasha888","pythonsimplified.org","discord.gg/wgTTmsWmXA"],"videoId": null,"videoUrl": null,"videoTitle": null,"videoDescription": null,"videoPublishedAt": null,"videoDurationText": null,"videoViewCount": null,"videoLikeCount": null,"videoCommentCount": null,"videoThumbnailUrl": null,"videoTags": [],"videoTranscriptLanguage": null,"videoTranscriptText": null,"videoType": null,"position": null}
Video row
Channel details are fuller in video rows from channel lists. Keyword video rows fill only the channel's ID, link, and name, plus its handle when YouTube shows one.
| Field | Type | What it does |
|---|---|---|
rowType | string | video for a video row. |
sourceTarget | string | The input value that led to this row, such as a channel link, @handle, channel ID, or keyword. |
sourceUrl | string | The YouTube page the Actor read to find this row, such as a channel's Videos page or a search results page. |
channelId | string or null | The channel ID. It starts with UC. Empty when the channel page doesn't show it. |
channelHandle | string or null | The channel's @handle, such as @mkbhd. Empty when the channel has no handle. |
channelUrl | string or null | The link to the channel's main page. Empty when the channel page doesn't show it. |
channelTitle | string or null | The channel's display name. |
channelDescription | string or null | The short description shown at the top of the channel page. Empty when none is shown. |
channelSubscriberCount | integer or null | The subscriber count as a whole number. It can be rounded from the count YouTube shows. |
channelTotalViewsText | string or null | The channel's total views, as YouTube shows them. |
channelVideoCountText | string or null | The number of channel videos, as YouTube shows it. |
channelJoinedText | string or null | The join date, as the channel page shows it, such as Joined Mar 21, 2008. |
channelLocation | string or null | The channel's location, when YouTube shows one. |
channelIsVerified | boolean or null | true when the channel has a verified badge, and false when it doesn't. Empty when the badge status can't be read. |
channelAvatarUrl | string or null | The link to the channel's profile picture. |
channelBannerUrl | string or null | The link to the channel's banner image. |
channelLinks | array of strings | Website and social links from the About section. Empty when Include description links is off or none are shown. |
videoId | string | The YouTube video ID. |
videoUrl | string | The link to the video's watch page. |
videoTitle | string or null | The video's title. |
videoDescription | string or null | The video's full description. Empty when none is shown. |
videoPublishedAt | string or null | The exact publish time in UTC, in ISO 8601 format, such as 2026-10-13T22:42:38.000Z. Empty when the Actor can't confirm it. |
videoDurationText | string or null | The video length as YouTube shows it, such as 11:47. |
videoViewCount | integer or null | The view count as a whole number. It can be rounded. Empty when YouTube shows no count. |
videoLikeCount | integer or null | The number of likes, when YouTube shows it. Empty unless Include likes, comment counts, and transcripts is on. |
videoCommentCount | integer or null | The number of comments, when YouTube shows it. Empty unless Include likes, comment counts, and transcripts is on. |
videoThumbnailUrl | string or null | The link to the video's thumbnail image. |
videoTags | array of strings | Keyword tags the creator added to the video. Empty when none are read. |
videoTranscriptLanguage | string or null | The language code of the transcript, such as en. Empty when transcripts are off or the video has no captions. |
videoTranscriptText | string or null | The transcript text. Empty when transcripts are off or the video has no captions. |
videoType | string | video for a regular video, short for a YouTube Short, or live for a live stream. |
position | integer | The place of this video in the saved list for its channel or keyword search, starting at 1. |
Example video row
This is the first video from @mkbhd in the default run.
{"rowType": "video","sourceTarget": "@mkbhd","sourceUrl": "https://www.youtube.com/@mkbhd/videos","channelId": "UCBJycsmduvYEL83R_U4JriQ","channelHandle": "@mkbhd","channelUrl": "https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ","channelTitle": "Marques Brownlee","channelDescription": "MKBHD: Quality Tech Videos | YouTuber | Geek | Consumer Electronics | Tech Head | Internet Personality!","channelSubscriberCount": 21400000,"channelTotalViewsText": "5,767,370,608 views","channelVideoCountText": "1,858 videos","channelJoinedText": "Joined Mar 21, 2008","channelLocation": "United States","channelIsVerified": true,"channelAvatarUrl": "https://yt3.googleusercontent.com/qu4TmIaYUlS41-dJ9gZ7DUR3nilvmB5_11i6OKSdvNnBNiyOusZP1bMN6ICnuxtjFBb6ioKgRQ=s72-c-k-c0x00ffffff-no-rj","channelBannerUrl": "https://yt3.googleusercontent.com/zi_48HwHU4s0Hnb6tZuvRzTfCPHrLEnrtIMDLzMauDEyDmURh9JZ4wrNd3lKr7m9uVnT4YjYKw=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj","channelLinks": [],"videoId": "QVv3mQzlrN0","videoUrl": "https://www.youtube.com/watch?v=QVv3mQzlrN0","videoTitle": "Apple Homeview Impressions: Not Convinced!","videoDescription": "New Smart home display from Apple. With plenty of quirks and features.\n\nThe deskpad! http://shop.MKBHD.com\n\nPlaylist of MKBHD Intro music: https://goo.gl/B3AWV5\n\n~\nhttp://twitter.com/MKBHD\nhttp://instagram.com/MKBHD\nhttp://facebook.com/MKBHD","videoPublishedAt": "2026-10-13T22:42:38.000Z","videoDurationText": "11:47","videoViewCount": 905000,"videoLikeCount": null,"videoCommentCount": null,"videoThumbnailUrl": "https://i.ytimg.com/vi/QVv3mQzlrN0/hq720.jpg?sqp=-oaymwEgCOgCEMoBSFXyq4qpAxIIARUAAIhCGAFwAcABBrgC8xg=&rs=AOn4CLDS1xA4cNY1fio2YEzbJcG7S5cKVA","videoTags": [],"videoTranscriptLanguage": null,"videoTranscriptText": null,"videoType": "video","position": 1}
💳 Pricing
This Actor uses pay-per-event pricing. You pay for these events:
- Actor start:
$0.001per run that starts reading your channels or keywords. - Channel/video: one channel or video saved to your dataset. Your price depends on your Apify plan tier:
- FREE:
$0.00045per channel or video. - BRONZE and SILVER:
$0.0004per channel or video. - GOLD:
$0.00035per channel or video. - PLATINUM:
$0.00025per channel or video. - DIAMOND:
$0.00015per channel or video.
- FREE:
- Description link:
$0.0004for saving About section links when Include description links is on.
Only saved channels and videos use the tier price. The prefilled run is bounded: three channels with up to 25 videos each, so you can check the output before running more channels.
🔌 Integrations
You can run this Actor through the Apify API, on a schedule, or with a webhook. Read the results from its dataset through the Apify API.
Watch this video:
❓ FAQ
Can I scrape YouTube channel videos by handle?
Yes. Add handles like @mkbhd, plain handles like mkbhd, full channel links, or channel IDs that start with UC.
Can I get channel profiles only?
Yes. Choose Channel profiles only to save one row per channel.
Does it include Shorts and live streams?
Yes. Shorts and live streams appear in channel video rows, and each row shows its video type.
Can I filter videos by publish date?
Yes, for Channel videos with profile data. Set Published after, Published before, or both, in YYYY-MM-DD format. The date check reads each video's exact UTC publish date, so a date limit on a long channel makes the run slower.
Can I search YouTube by keyword?
Yes. Choose Videos from keyword search or Channel profiles from keyword search, then add your keywords. Keywords find matching public videos or channels.
Can one run mix channels and keywords?
No. Each run uses one list type, either channels or keywords. Run them separately.
Does it return channel statistics?
Yes. Channel rows include subscriber count, total views as shown, video count as shown, join date, location, and verified status when YouTube shows them.
Does it save likes, comments, or transcripts?
Yes, when you turn on Include likes, comment counts, and transcripts. It saves like counts, comment counts, and transcript text and language when captions exist. It does not save comment text.
Why are some fields empty?
YouTube doesn't always show every field on a channel page or video feed. When a value isn't shown, the field is empty.
What happens to channels that can't be read?
They don't become rows. They are listed in the run's warning log.
How much does a run cost?
Each run that starts reading your channels or keywords has a $0.001 start charge. Each saved channel or video adds its Channel/video price for your Apify plan tier. Optional description links add their own charge. See Pricing above.
Does it need a YouTube API key?
No. The Actor doesn't ask for a YouTube API key, cookies, or a login. It reads public YouTube pages and feeds.
Does it extract emails?
No. Email extraction is outside this Actor. For email leads, see YouTube Channel Leads Scraper in Related Actors.
Actor Release Notes
v1.0 (14-10-2026)
- Result type is now required. Set it on every run. Before, a run without it saved channel videos.
- The video limit per channel no longer defaults to 25 for API runs. The form still starts at 25. Leave it empty to save every available video, which can take longer and cost more on large channels.
- Removed the Include Shorts, Include live streams, Include channel images, Include video tags, and Deduplicate videos inputs. Those options are now always on.
- Removed the Language hint and Country hint inputs. Runs now use English and US YouTube settings.
- Published after and Published before now accept only YYYY-MM-DD dates.
- A run now fails when some inputs could not be read and no rows were saved. Before, the run finished without an error.
- Channel video runs also read each channel's Shorts and live streams tabs. The video limit counts rows from all three tabs together.
- Removed the subscriber, publish date, and view count text fields. Use the subscriber count, publish time, and view count fields instead. Counts can be rounded, and a publish time can be empty.
- Removed the scraped time, sort order, status, and status message output fields.
- Added keyword search for videos or channel profiles.
- Added the Include likes, comment counts, and transcripts option. These runs take longer.
- With that option on, videos show like counts and comment counts when YouTube shows them.
- With that option on, videos show transcript text and language when captions exist.
- Videos include an exact UTC publish time when the Actor can confirm it. Reading publish times takes extra requests, so runs take longer.
- Channel rows show location, total views, and join date when YouTube shows them.
- A channel that appears more than once in a run is saved once.
- Include description links now saves website and social links from each channel's About section. You pay only for channels with links.
- Keyword results mark live streams as live. Some results with no shown length may also be marked live.
- Added an overview table with the main result fields.
- Default memory is 256 MB for channel video runs. Runs with description links, or with likes, comments, and transcripts, also use 256 MB. Other runs use 128 MB. You can set up to 512 MB.
- Updated the price per saved channel or video row. See Pricing above for the amounts.
- New icon: the YouTube play button.
v0.0
- 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 Search Scraper: Find public channels from search terms, then add their channel IDs or handles here to save profile and video rows.
- YouTube Similar Channels Finder: Find channels similar to one you already track, then pull their latest videos here.
- YouTube Channel Leads Scraper: Find public contact emails for creators in your channel list, which this Actor doesn't extract.
- Fast YouTube Channel Scraper API | Profiles, Subs & Stats: Search channels by topic with country, language, or location filters, then add the channels you find here for profile rows.
- YouTube Full Channel Transcripts Extractor: Get transcripts for the videos of a channel or playlist, when you need full text for research.
Made with ❤️ by Maxime Dupré