Youtube Channel Videos Details Scraper avatar

Youtube Channel Videos Details Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Youtube Channel Videos Details Scraper

Youtube Channel Videos Details Scraper

Extract granular data on every video, from rich thumbnails to detailed view counts, empowering data-driven decisions for content creation, audience engagement and channel growth. Whether you're a seasoned YouTuber, a digital marketer, or an AI researcher, unlock the insights you need to thrive in...

Pricing

from $1.00 / 1,000 results

Rating

5.0

(4)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

5

Bookmarked

116

Total users

0

Monthly active users

6 hours ago

Last modified

Share

Overview

This actor allows you to scrape detailed information about videos from a specific YouTube channel. It extracts comprehensive metadata, engagement metrics, and rich media assets for each video, providing valuable insights for content creators, marketers, and researchers analyzing YouTube channel performance and content strategies.

Explore More Scrapers

If you found this YouTube Channel Video Details Scraper useful, be sure to check out our other powerful scrapers and actors at memo23's Apify profile. We offer a wide range of tools to enhance your web scraping and automation needs across various platforms and use cases.

Features

  • Channel-wide Video Extraction: Scrape the whole Videos grid of a channel, page after page.
  • Shorts and Live Tabs: maxResultsShorts and maxResultsStreams add the channel's other two grids, each with its own budget.
  • Video Metadata: Video id, URL, title, duration (as text and in seconds), view count (as text and as a number), relative publish age and a parsed publishedAt, thumbnail URL and a live flag.
  • Channel Information: Every row carries the channel's name, id, URLs, description, keywords, avatar, RSS feed, family-safe flag, subscriber count and video count.
  • Date Filtering: oldestPostDate cuts the feed off at an ISO date or a span like 3 months, and under the default order the run stops as soon as it passes the cutoff instead of paging the rest of the channel.
  • Feed Order: sortVideosBy reloads the grid through the channel's own Latest / Popular / Oldest chips.
  • Proxy Support: Built-in proxy configuration to enhance scraping reliability and avoid blocks.

A grid card is all this actor reads, so what YouTube does not print on a card is not here: no like count, no comment count, no tags, no categories, and no full description — descriptionSnippet is filled only on the older renderer YouTube still serves to some exits, and is null otherwise.

How to Use

  1. Set Up: Ensure you have an Apify account and access to the Apify platform.
  2. Configure Input: Set the YouTube channel URL you want to scrape video details from (see Input Configuration section).
  3. Adjust Settings: Configure options like maxItems, concurrency, and proxy settings as needed.
  4. Run the Scraper: Execute the scraper on the Apify platform.
  5. Data Collection: The scraper will output detailed data about videos from the specified YouTube channel.

Input Configuration

Here's an example of how to set up the input for the YouTube Channel Video Details Scraper:

{
"startUrls": [
{
"url": "https://www.youtube.com/@AllTHEMOVIE/videos"
}
],
"maxItems": 100,
"maxResultsShorts": 0,
"maxResultsStreams": 0,
"oldestPostDate": "",
"sortVideosBy": "newest",
"maxConcurrency": 10,
"minConcurrency": 1,
"maxRequestRetries": 3,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Input Fields Explanation

  • startUrls: Array containing the URL of the YouTube channel. A bare channel URL follows the channel's own Videos tab; a URL pointing straight at /videos, /shorts or /streams scrapes that tab.
  • maxItems: Maximum number of videos to take from the channel's Videos tab (default: 100). Counted per channel, so three start URLs at 100 return up to 300 rows. 0 takes nothing from the Videos tab, which is how you ask for shorts or streams only — there is no "unlimited" value, so set a high number to take a whole tab. A start URL that points straight at /shorts or /streams is capped by this field too, unless that tab's own cap is above 0.
  • maxResultsShorts: Rows to take from the channel's Shorts tab, on top of maxItems (default: 0 = skip the tab, at no request cost). Above 0 it also caps a start URL pointing straight at /shorts. A short card carries no publish date, so oldestPostDate does not apply to those rows.
  • maxResultsStreams: Rows to take from the channel's Live tab, past streams plus anything live right now, on top of maxItems (default: 0 = skip the tab). Above 0 it also caps a start URL pointing straight at /streams. This field was called maxResultStreams in the build before it; the old spelling is still accepted.
  • oldestPostDate: Only return videos published on or after this date — an ISO date (2026-01-01) or a span (3 months). YouTube only publishes a relative age on a grid card, so hours, days and weeks are exact while months and years are read as the newest day in that bucket, which keeps borderline videos rather than dropping them. A row with no age at all — a short, a stream that is live right now, an upcoming premiere — has no date to compare and is always kept. Empty means no filter.
  • sortVideosBy: newest (default), popular or oldest, using the channel's own sort chips. Only newest lets a run with oldestPostDate stop as soon as it passes the cutoff; the other two filter the feed row by row and give up after a run of pages that match nothing, which on a large channel can end the scan before it reaches the matches. Pair oldestPostDate with newest.
  • maxConcurrency: Maximum number of pages processed simultaneously (default: 10).
  • minConcurrency: Minimum number of pages processed simultaneously (default: 1).
  • maxRequestRetries: Number of retries for failed requests (default: 3).
  • proxyConfiguration: Proxy settings for enhanced scraping reliability.

On the free plan a run is held to the first start URL and 10 rows shared across the three caps, in proportion to what was asked for — maxItems: 100 with maxResultsShorts: 20 becomes 8 videos and 2 shorts.

Output Structure

One row per video, flat, with the channel repeated on every row so a row is usable without a second lookup:

{
"videoId": "gTKS8SAwUzE",
"url": "https://www.youtube.com/watch?v=gTKS8SAwUzE",
"title": "I Survived The Most Extreme Places On Earth",
"descriptionSnippet": null,
"duration": "23:28",
"durationSeconds": 1408,
"viewCountText": "66M views",
"viewCount": 66000000,
"publishedTimeText": "3 days ago",
"publishedAt": "2026-09-06T15:51:48.761Z",
"thumbnailUrl": "https://i.ytimg.com/vi/gTKS8SAwUzE/hq720_custom_2.jpg",
"isLive": false,
"type": "video",
"channelName": "MrBeast",
"channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"channelUrl": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA",
"channelHandleUrl": "http://www.youtube.com/@MrBeast",
"channelDescription": "SUBSCRIBE FOR A COOKIE!\nNew MrBeast or MrBeast Gaming video every...",
"channelAvatarUrl": "https://yt3.googleusercontent.com/nxYrc_1_2f77DoBadyxMTmv7ZpRZapHR5jbuYe7PlPd5cIRJxtNNEYyOC0ZsxaDyJJzXrnJiuDE=s900-c-k-c0x00ffffff-no-rj",
"channelKeywords": "mrbeast6000 beast mrbeast Mr.Beast ...",
"channelRssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCX6OQ3DkcsbYNE6H8uQQuVA",
"channelIsFamilySafe": true,
"numberOfSubscribersText": "516M subscribers",
"numberOfSubscribers": 516000000,
"channelTotalVideosText": "1K videos",
"channelTotalVideos": 1000,
"inputChannelUrl": "https://www.youtube.com/@MrBeast/videos"
}

Detailed Field Explanations

Video fields:

  • videoId: YouTube's own id for the video, and the key to join on.
  • url: Watch URL for a video or a stream, youtube.com/shorts/<id> for a short.
  • title: The title as printed on the card.
  • descriptionSnippet: The teaser line under the title. Only the older renderer carries one; null on the current grid.
  • duration / durationSeconds: "23:28" and 1408. Both null on a short and on a stream that is live right now — YouTube prints no length on either card.
  • viewCountText / viewCount: "66M views" and 66000000. A card that is live reads "153 watching" instead, and parses the same way.
  • publishedTimeText: The relative age exactly as YouTube printed it — "3 days ago", "Streamed 7 days ago".
  • publishedAt: That age resolved to an ISO timestamp, at the newest end of its bucket. Null when the card carries no age: shorts, live-right-now streams, upcoming premieres.
  • thumbnailUrl: The largest thumbnail YouTube offered on the card.
  • isLive: True while the video is streaming.
  • type: Which tab the row came from — video, short or stream. Not a judgement about the video itself.

Channel fields, identical on every row of a channel: channelName, channelId, channelUrl, channelHandleUrl, channelDescription, channelAvatarUrl, channelKeywords, channelRssUrl, channelIsFamilySafe, numberOfSubscribersText, numberOfSubscribers, channelTotalVideosText, channelTotalVideos, and inputChannelUrl — the URL you supplied, kept verbatim.

Output Changes

Two releases have changed the shape of a row, which matters if you consume the CSV export by column position or feed the JSON into a fixed schema:

  • Rows are flat. They used to be the raw InnerTube renderer — title.runs[0].text, viewCountText.simpleText, plus navigationEndpoint, menu, trackingParams and thumbnailOverlays. Those keys are gone; the fields above replace them.
  • Two columns were added on top of that: publishedAt and type. Every row now has them, including rows from the Videos tab of a run that never touched Shorts or Live.

Support

Additional Services