Youtube Channel Scraper Pro avatar

Youtube Channel Scraper Pro

Pricing

Pay per usage

Go to Apify Store
Youtube Channel Scraper Pro

Youtube Channel Scraper Pro

Youtube Channel Scraper Pro

Pricing

Pay per usage

Rating

0.0

(0)

Developer

seungkyu cho

seungkyu cho

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

YouTube Channel Scraper Pro ๐Ÿš€

A high-performance, reliable Apify Actor for scraping YouTube channel videos โ€” including Long-Form and Shorts โ€” with advanced filtering and infinite scroll support.

๐Ÿ”— Apify Actor URL: https://apify.com/skcho/youtube-channel-scraper-pro


โœจ Key Features

  • ๐Ÿ”„ Infinite Scroll (Pagination): Automatically scrolls through the entire channel page using a real browser โ€” no 30-video limit.
  • ๐Ÿ—‚๏ธ Long-Form & Shorts Separation: Precisely scrape and categorize videos by type.
  • ๐Ÿ“ฆ Rich Data Extraction: Titles, View Counts, Upload Dates, Durations, HQ Thumbnails, and Animated WebP Previews โ€” all extracted out of the box.
  • ๐Ÿ‘ Optional Like Count Extraction: A lightweight, high-concurrency HTTP-based fetcher grabs like counts at ~430 videos/min without launching extra browsers.
  • ๐ŸŽฏ Precision Filtering: Filter by minimum views, likes, upload date range, and more.
  • ๐Ÿง  Hybrid Architecture: PlaywrightCrawler handles real-browser scrolling; HttpCrawler handles likes โ€” minimizing memory usage and maximizing speed.

โšก Performance

ScenarioSpeed
Channel scroll + data extract (100 videos)~15 seconds
Like count fetch (per 100 videos, fetchLikes: true)~15 seconds
Total for 100 videos with likes~30 seconds

Likes are fetched at ~430 requests/min in parallel via lightweight HTTP requests โ€” no extra browser needed.


๐Ÿ› ๏ธ Input Parameters

ParameterTypeDefaultDescription
channelUrlsArray<String>(Required)YouTube channel URLs, channel IDs, or @handles to scrape (e.g., https://www.youtube.com/@mkbhd, @veritasium). Multiple channels supported.
collectChannelInfoBooleantrueCollect channel profile metadata (name, description, subscribers, total views, video count, joined date, country, avatar, banner, links).
includeVideosBooleanfalseAlso collect video rows from the channel's videos/shorts tabs. Leave disabled when you only need channel profile info.
videoTypeEnum"ALL"Which video type to scrape: "ALL", "LONG_FORM", or "SHORTS".
minUploadDateString""Only include videos uploaded on or after this date (approximate โ€” derived from YouTube's relative date text). Format: YYYY-MM-DD.
maxUploadDateString""Only include videos uploaded on or before this date (approximate). Format: YYYY-MM-DD.
maxDaysOldInteger0Stop scraping once videos are older than this many days. 0 disables the check.
minViewsInteger0Only include videos with at least this many views. (e.g., 1000000 for 1M+).
maxItemsPerChannelInteger5Maximum videos to scrape per channel (per tab). 0 means unlimited. Uses infinite scroll to exceed YouTube's default page limit.
fetchLikesBooleanfalseIf enabled, fetches exact Like counts for every video via fast parallel HTTP requests. Adds ~15s per 100 videos.
minLikesInteger0(Requires fetchLikes: true) Only include videos with at least this many likes.
proxyUrlsArray<String>[]Optional list of proxy URLs (e.g. http://user:pass@host:port) to rotate through. Recommended for anything beyond a handful of channels โ€” without a proxy, YouTube can rate-limit or temporarily block your IP. Leave empty to run without a proxy.
collectCommentsBooleanfalse(Requires includeVideos: true) Collects comments (and optionally replies) for each collected video as separate recordType: "comment" records.
maxCommentsPerVideoInteger50Maximum comments (including replies, if enabled) to collect per video.
includeCommentRepliesBooleantrueAlso collect replies to each top-level comment.
commentSortByEnum"TOP_COMMENTS""TOP_COMMENTS" or "NEWEST_FIRST".

๐Ÿ“„ Output Data Structure

Each video is pushed as a JSON object to the Apify Dataset:

{
"channelName": "Marques Brownlee",
"channelUrl": "https://www.youtube.com/@mkbhd",
"videoId": "eFeDpUVEy48",
"videoUrl": "https://www.youtube.com/watch?v=eFeDpUVEy48",
"title": "The Biggest Android Update Ever",
"type": "LONG_FORM",
"uploadDateText": "8 days ago",
"viewCount": 4099999,
"durationText": "12:59",
"thumbnailUrl": "https://i.ytimg.com/vi/eFeDpUVEy48/hqdefault.jpg",
"animatedThumbnailUrl": "https://i.ytimg.com/an_webp/eFeDpUVEy48/mqdefault_6s.webp",
"likeCount": 125000
}

Field Reference

FieldTypeDescription
channelNameStringOfficial channel display name
channelUrlStringInput channel URL
videoIdStringYouTube video ID
videoUrlStringFull youtube.com/watch?v=... URL
titleStringVideo title
typeString"LONG_FORM" or "SHORTS"
uploadDateTextStringRelative upload date (e.g., "8 days ago")
viewCountIntegerParsed integer view count
durationTextStringVideo duration string (e.g., "12:59")
thumbnailUrlStringHighest-quality static thumbnail URL
animatedThumbnailUrlString3-second animated WebP preview URL
likeCountIntegerLike count โ€” present only when fetchLikes: true

Need subtitles/captions? That's now a separate module โ€” see youtube-subtitle-downloader/.

Comment records (recordType: "comment", when collectComments: true)

FieldTypeDescription
videoId / videoUrlStringWhich video this comment belongs to
commentIdStringYouTube comment ID
parentCommentIdStringPresent only on replies
isReplyBooleantrue for replies
authorName / authorChannelIdStringCommenter's display name and channel ID
authorIsChannelOwnerBooleantrue if the video's own channel posted this comment
textStringComment text
likeCount / replyCountIntegerParsed counts
isPinnedBooleanPinned-comment flag

โš™๏ธ How It Works (Architecture)

This actor uses a two-phase hybrid architecture to maximize both stability and speed:

Phase 1 โ€” Scroll & Extract (PlaywrightCrawler)

A real Chromium browser navigates to the channel's /videos and /shorts tabs. It automatically scrolls down the page, triggering YouTube's infinite scroll to load more videos, until maxItemsPerChannel is reached or the page end is detected. Video metadata is then extracted directly from the rendered DOM.

Browser optimizations:

  • Blocks unnecessary resources (images, fonts, media) to reduce memory usage
  • Disables GPU, extensions, and background services
  • Anti-bot fingerprint masking (navigator.webdriver suppressed)

Phase 2 โ€” Like Count Fetch (HttpCrawler, Optional)

If fetchLikes is enabled, up to 20 concurrent lightweight HTTP requests are made to individual youtube.com/watch?v=... pages. Like counts are extracted by parsing the embedded ytInitialData JSON object โ€” no browser required. This runs at ~430 requests/min.


๐Ÿค Support & Issues

Found a bug or have a feature request? Please reach out via the Apify Issues tab!

cd C:\Users\skps\Documents\GitHub\youtube-channel-scraper-bundle\gui-platform

npm install node server.js