YouTube Channel Scraper avatar

YouTube Channel Scraper

Pricing

from $0.36 / 1,000 youtube channel rows

Go to Apify Store
YouTube Channel Scraper

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é

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

19

Total users

4

Monthly active users

a day ago

Last modified

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

  1. Choose a Result type: Channel videos with profile data, Channel profiles only, Videos from keyword search, or Channel profiles from keyword search.
  2. Add channels or keywords. Each run uses one list type, so run channels and keywords as separate runs.
  3. Set the video limit, sort order, or publish-date range if you need them.
  4. 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.
  5. 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

FieldTypeWhat it does
Result type (mode)stringWhich 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)integerUsed 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)stringUsed with channel videos. The order to use from the channel's Videos tab: latest, popular, or oldest. Default: latest.
YouTube channels (channels)array of stringsUsed 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 stringsUsed with the two keyword result types. Add each keyword or phrase as its own entry.
Total row limit (maxTotalRows)integerThe 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)booleanUsed 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)booleanOptional. 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

FieldTypeWhat it does
rowTypestringchannel for a channel profile row.
sourceTargetstringThe input value that led to this row, such as a channel link, @handle, channel ID, or keyword.
sourceUrlstringThe YouTube page the Actor read to find this row, such as a channel's Videos page or a search results page.
channelIdstring or nullThe channel ID. It starts with UC. Empty when the channel page doesn't show it.
channelHandlestring or nullThe channel's @handle, such as @veritasium. Empty when the channel has no handle.
channelUrlstring or nullThe link to the channel's main page. Empty when the channel page doesn't show it.
channelTitlestring or nullThe channel's display name.
channelDescriptionstring or nullThe short description shown at the top of the channel page. Empty when none is shown.
channelSubscriberCountinteger or nullThe subscriber count as a whole number. It can be rounded from the count YouTube shows.
channelTotalViewsTextstring or nullThe channel's total views, as YouTube shows them.
channelVideoCountTextstring or nullThe number of channel videos, as YouTube shows it.
channelJoinedTextstring or nullThe join date, as the channel page shows it, such as Joined Jan 24, 2019.
channelLocationstring or nullThe channel's location, when YouTube shows one.
channelIsVerifiedboolean or nulltrue when the channel has a verified badge, and false when it doesn't. Empty when the badge status can't be read.
channelAvatarUrlstring or nullThe link to the channel's profile picture.
channelBannerUrlstring or nullThe link to the channel's banner image.
channelLinksarray of stringsWebsite and social links from the About section. Empty when Include description links is off or none are shown.
videoIdnullAlways empty in channel rows.
videoUrlnullAlways empty in channel rows.
videoTitlenullAlways empty in channel rows.
videoDescriptionnullAlways empty in channel rows.
videoPublishedAtnullAlways empty in channel rows.
videoDurationTextnullAlways empty in channel rows.
videoViewCountnullAlways empty in channel rows.
videoLikeCountnullAlways empty in channel rows.
videoCommentCountnullAlways empty in channel rows.
videoThumbnailUrlnullAlways empty in channel rows.
videoTagsarray of stringsAlways empty in channel rows.
videoTranscriptLanguagenullAlways empty in channel rows.
videoTranscriptTextnullAlways empty in channel rows.
videoTypenullAlways empty in channel rows.
positionnullAlways 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.

FieldTypeWhat it does
rowTypestringvideo for a video row.
sourceTargetstringThe input value that led to this row, such as a channel link, @handle, channel ID, or keyword.
sourceUrlstringThe YouTube page the Actor read to find this row, such as a channel's Videos page or a search results page.
channelIdstring or nullThe channel ID. It starts with UC. Empty when the channel page doesn't show it.
channelHandlestring or nullThe channel's @handle, such as @mkbhd. Empty when the channel has no handle.
channelUrlstring or nullThe link to the channel's main page. Empty when the channel page doesn't show it.
channelTitlestring or nullThe channel's display name.
channelDescriptionstring or nullThe short description shown at the top of the channel page. Empty when none is shown.
channelSubscriberCountinteger or nullThe subscriber count as a whole number. It can be rounded from the count YouTube shows.
channelTotalViewsTextstring or nullThe channel's total views, as YouTube shows them.
channelVideoCountTextstring or nullThe number of channel videos, as YouTube shows it.
channelJoinedTextstring or nullThe join date, as the channel page shows it, such as Joined Mar 21, 2008.
channelLocationstring or nullThe channel's location, when YouTube shows one.
channelIsVerifiedboolean or nulltrue when the channel has a verified badge, and false when it doesn't. Empty when the badge status can't be read.
channelAvatarUrlstring or nullThe link to the channel's profile picture.
channelBannerUrlstring or nullThe link to the channel's banner image.
channelLinksarray of stringsWebsite and social links from the About section. Empty when Include description links is off or none are shown.
videoIdstringThe YouTube video ID.
videoUrlstringThe link to the video's watch page.
videoTitlestring or nullThe video's title.
videoDescriptionstring or nullThe video's full description. Empty when none is shown.
videoPublishedAtstring or nullThe 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.
videoDurationTextstring or nullThe video length as YouTube shows it, such as 11:47.
videoViewCountinteger or nullThe view count as a whole number. It can be rounded. Empty when YouTube shows no count.
videoLikeCountinteger or nullThe number of likes, when YouTube shows it. Empty unless Include likes, comment counts, and transcripts is on.
videoCommentCountinteger or nullThe number of comments, when YouTube shows it. Empty unless Include likes, comment counts, and transcripts is on.
videoThumbnailUrlstring or nullThe link to the video's thumbnail image.
videoTagsarray of stringsKeyword tags the creator added to the video. Empty when none are read.
videoTranscriptLanguagestring or nullThe language code of the transcript, such as en. Empty when transcripts are off or the video has no captions.
videoTranscriptTextstring or nullThe transcript text. Empty when transcripts are off or the video has no captions.
videoTypestringvideo for a regular video, short for a YouTube Short, or live for a live stream.
positionintegerThe 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.001 per 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.00045 per channel or video.
    • BRONZE and SILVER: $0.0004 per channel or video.
    • GOLD: $0.00035 per channel or video.
    • PLATINUM: $0.00025 per channel or video.
    • DIAMOND: $0.00015 per channel or video.
  • Description link: $0.0004 for 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 🫡

Made with ❤️ by Maxime Dupré