Youtube Channel Videos Scraper avatar

Youtube Channel Videos Scraper

Pricing

from $2.40 / 1,000 channel videos

Go to Apify Store
Youtube Channel Videos Scraper

Youtube Channel Videos Scraper

YouTube Channel Videos Scraper is an Apify actor that extracts a channel's videos at scale — latest uploads, popular videos, and filtered ranges — and returns a clean dataset of per-video records suitable for analytics, monitoring, and downstream enrichment.

Pricing

from $2.40 / 1,000 channel videos

Rating

0.0

(0)

Developer

Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Extract a channel's videos at scale — latest uploads, popular videos, filtered ranges. Uses YouTube Data API v3 for fast, reliable extraction with pagination up to thousands of videos per channel. No browser or proxy required.

YouTube Channel Videos Scraper

Key Features

  • Channel resolution — Accepts @handle, channel URL, /channel/UC..., /c/custom, /user/legacy
  • Deep pagination — Extract up to 5,000 videos per channel via uploads playlist
  • Statistics enrichment — Views, likes, comments via batched videos.list API calls
  • Content details — Duration, HD/SD, caption flags, licensed content, topic categories
  • Shorts & Live detection — Automatic classification based on duration and broadcast content
  • Date filtering — Filter by publish date range (startDate / endDate)
  • Sorting — Newest, oldest, or most popular (by view count)
  • Multi-channel — Process multiple channels in a single run with cross-channel deduplication
  • Full enrichment — Descriptions, tags, thumbnails, and topic categories included by default
  • Lightweight — No browser needed — runs on apify/actor-node:22
  • Reliable — Graceful per-channel error handling, partial result output, and detailed run summary

How It Works

  1. Resolve channel — Convert @handle, URL, or channelId to a canonical channelId via channels.list
  2. Get uploads playlist — Fetch the channel's uploads playlist ID via contentDetails
  3. Paginate playlist — Extract video IDs via playlistItems.list (50 per page, up to 5,000)
  4. Enrich videos — Batch enrich with videos.list (50 per call) for stats, duration, descriptions, tags, and topics
  5. Filter & sort — Apply date range, Shorts/Live toggles, and sort order
  6. Output — Push clean per-video records to dataset + write RUN_SUMMARY.json

Input

Channel Settings

FieldTypeDefaultDescription
channelRefsstring[]requiredChannel references: @handle, channel URL, /channel/UC..., /c/customURL
maxVideosPerChannelinteger200Max videos per channel (1–5,000)
includeShortsbooleantrueInclude YouTube Shorts (videos ≤60 seconds)
includeLivebooleanfalseInclude live streams and premieres

Filtering & Sorting

FieldTypeDefaultDescription
startDatestring""Include videos published on/after this date (YYYY-MM-DD)
endDatestring""Include videos published on/before this date (YYYY-MM-DD)
sortBystring"newest"newest / oldest / popular (popular sorts by view count)
dedupeAcrossChannelsbooleantrueSkip duplicate videos across channels

Enrichment Options

FieldTypeDefaultDescription
includeStatisticsbooleantrueAdd view count, like count, and comment count
includeContentDetailsbooleantrueAdd duration, definition (HD/SD), caption flags
includeThumbnailsbooleantrueAdd thumbnail URLs (default, medium, high, maxres)
includeDescriptionbooleantrueInclude full video description
includeTagsbooleantrueInclude video tags

Advanced Settings

FieldTypeDefaultDescription
youtubeApiKeystring""Optional user-provided YouTube Data API v3 key
maxConcurrencyinteger10Reserved for future use (v1 processes sequentially)
maxRetriesinteger3Retries for transient API errors
minDelayMsinteger0Delay between channels (milliseconds)
debugbooleanfalseEnable verbose logging

Input Examples

Example 1 — Latest 200 videos with lightweight output

Fetch the latest 200 videos from a single channel with statistics and content details, but without descriptions and tags for a smaller output size.

{
"channelRefs": [
"@mkbhd"
],
"debug": false,
"dedupeAcrossChannels": true,
"includeContentDetails": true,
"includeDescription": false,
"includeLive": false,
"includeShorts": true,
"includeStatistics": true,
"includeTags": false,
"includeThumbnails": true,
"maxVideosPerChannel": 200,
"sortBy": "newest",
"maxConcurrency": 10,
"maxRetries": 3,
"minDelayMs": 0
}

Example 2 — Full enrichment with all fields

Fetch the latest 200 videos from a channel URL with all enrichment options enabled, including descriptions, tags, thumbnails, and live streams.

{
"channelRefs": [
"https://www.youtube.com/@graceleungyl"
],
"debug": false,
"dedupeAcrossChannels": true,
"includeContentDetails": true,
"includeDescription": true,
"includeLive": true,
"includeShorts": true,
"includeStatistics": true,
"includeTags": true,
"includeThumbnails": true,
"maxVideosPerChannel": 200,
"sortBy": "newest",
"maxConcurrency": 10,
"maxRetries": 3,
"minDelayMs": 0
}

Output

Each video is a flat JSON record with up to 26 fields.

Output Fields

FieldTypeDescription
retrievedAtstringFetch timestamp (ISO 8601)
channelIdstringChannel ID
channelTitlestringChannel name
channelHandlestring@handle
channelUrlstringCanonical channel URL
videoIdstringVideo ID
videoUrlstringWatch URL or /shorts/ URL
titlestringVideo title
publishedAtstringPublish timestamp (ISO 8601)
publishDatestringYYYY-MM-DD
durationstringISO 8601 duration (e.g., PT12M36S)
durationSecondsintegerDuration in seconds
isShortsbooleanShorts flag (duration ≤60s)
isLivebooleanLive/premiere indicator
viewCountintegerViews
likeCountintegerLikes (may be hidden)
commentCountintegerComments (may be disabled)
thumbnailsobjectThumbnail URLs (default/medium/high/standard/maxres)
descriptionstringFull video description
tagsstring[]Video tags
definitionstringhd / sd
captionstringtrue / false
licensedContentbooleanLicensing flag
topicCategoriesstring[]Wikipedia topic category URLs
sourcestringapi or api_partial
runIdstringApify run ID

Output Example

Output — All Fields Table View


Performance

ScenarioTypical Time
1 channel x 200 videos~30–90 seconds
10 channels x 200 videos~5–15 minutes
1 channel x 5,000 videos~10–40 minutes

Run Summary

Each run saves RUN_SUMMARY.json to the Key-Value Store with:

  • Total channels processed / failed
  • Total videos emitted
  • Per-channel video counts
  • Errors by channel
  • API call count and per-key quota usage
  • Start and completion timestamps

Use Cases

  • Competitor analysis — Export and compare video catalogs across channels
  • Content audits — Analyze upload frequency, Shorts vs long-form ratio, and engagement
  • Dataset generation — Build research datasets of niche channels
  • Marketing research — Identify trending topics and high-performing content
  • Monitoring & alerts — Track new uploads from partner/influencer channels
  • Watchlist building — Create video lists for further scraping (comments, transcripts, etc.)

Limitations

  • Uploads playlist only — Private and unlisted videos are excluded (YouTube API limitation)
  • Shorts detection — Based on duration heuristic (≤60s); may not catch all edge cases
  • Live detection — Only detects currently live or upcoming; past live streams show as false
  • Hidden stats — Like count and comment count may be null if the creator has hidden them
  • Sequential processing — Channels are processed one at a time in v1 (concurrent processing planned for v1.1)

Support & Feedback

If you encounter any issues or have feature requests, please open an issue on GitHub.