YouTube Channel Videos Scraper — Metadata & Metrics
Pricing
from $5.00 / 1,000 video scrapeds
YouTube Channel Videos Scraper — Metadata & Metrics
Scrape public YouTube channel videos and Shorts with titles, descriptions, dates, views, likes, comments, duration, thumbnails, and channel metadata. No cookies required.
Pricing
from $5.00 / 1,000 video scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
10
Total users
5
Monthly active users
2 days ago
Last modified
Categories
Share
What is YouTube Channel Video Scraper — Metrics & Shorts?
Use this Apify Actor when you already know the public YouTube channels you want to track. It accepts channel URLs, @handles, or channel IDs and returns one normalized dataset record per public video or Short. Each record can include the video URL, title, description, publish timestamp, duration, thumbnail, public view/like/comment counts, engagement rate, channel identity, feed type, and collection provenance. It runs without user cookies and can be used through Apify MCP.
Best fit and connected workflows
This Actor fits workflows centered on known public channels and structured output.
- Export recent or popular public uploads from one or more channels.
- Compare long-form videos and Shorts from the same channel set.
- Build a channel-by-channel content inventory for reporting, monitoring, or downstream analysis.
- Start with YouTube Search Scraper - Videos, Channels & Playlists when you need to discover public channels first, then pass the verified
channelUrlorchannelIdinto this Actor. - Use Send returned
videoUrlorvideoIdvalues to YouTube Comments Scraper (with Replies) when you want comments for a specific public video record.
One practical scenario
A content analyst has a list of five creator channels and wants a current snapshot of their latest uploads. They start with the channel URLs, choose contentType: "videos", and set a per-channel cap so the run stays focused. The returned dataset shows each video's title, publish date, view count, like count, comment count, duration, and thumbnail URL. The analyst uses publishedAt to sort the newest uploads, then opens the highest-interest videoUrl in the browser and passes that same record into a comments workflow for deeper review.
Input fields
| Field | Type | Purpose |
|---|---|---|
channelUrls | array of strings | Public YouTube channel URLs, @handles, or channel IDs beginning with UC. |
contentType | string | Select videos, shorts, or all to collect long-form videos, Shorts, or both. |
maxVideosPerChannel | integer | Cap normalized rows per channel across the selected content types. |
maxPagesPerContentType | integer | Bound provider pagination for each feed type. |
maxTotalVideos | integer | Cap all saved video and Short rows across the full run. |
sortBy | string | Request latest or popular provider ordering. |
publishedAfter | string | Keep rows published on or after a UTC calendar date. |
publishedBefore | string | Keep rows published before a UTC calendar date. |
providerOrder | string | Choose provider priority and fallback order. |
includeRawData | boolean | Attach the original provider item to each dataset row for debugging. |
Focused input example
{"channelUrls": ["https://www.youtube.com/@MrBeast"],"contentType": "videos","maxVideosPerChannel": 10,"maxPagesPerContentType": 1,"maxTotalVideos": 10,"sortBy": "latest","includeRawData": false}
Output fields
| Field | Type | Purpose |
|---|---|---|
recordType | string | Dataset row type; one public YouTube video or Short per row. |
contentType | string | Channel feed that produced the row. |
provider | string | Public-data provider that returned the row. |
input | string | Original channel reference supplied by the user. |
channelId | string or null | Channel ID when returned or supplied. |
channelHandle | string or null | Channel @handle when returned or supplied. |
channelName | string or null | Public channel display name. |
channelUrl | string or null | Canonical public channel URL. |
channelSubscriberCount | integer or null | Public subscriber count when returned. |
videoId | string | Stable public YouTube video identifier. |
videoUrl | string or null | Canonical public watch or Shorts URL. |
title | string or null | Public video title. |
description | string or null | Public video description when returned. |
publishedAt | string or null | ISO 8601 publish timestamp when available. |
durationSeconds | integer or null | Video duration in seconds when returned. |
durationText | string or null | Provider's human-readable duration text. |
thumbnailUrl | string or null | Public thumbnail image URL. |
viewCount | integer or null | Public view count when returned. |
likeCount | integer or null | Public like count when returned. |
commentCount | integer or null | Public comment count when returned. |
engagementRate | number or null | Derived from likes plus comments divided by views when usable counts exist. |
isShort | boolean | Indicates whether the row came from the Shorts feed. |
isLive | boolean or null | Whether the provider marks the video as live. |
isUpcoming | boolean or null | Whether the provider marks the video as upcoming. |
badges | array of strings | Public labels or badges attached to the video. |
genre | string or null | Public video genre when returned. |
sortBy | string | Requested provider feed ordering. |
resultPosition | integer | One-based position in the returned feed. |
page | integer | Provider page number that returned the record. |
scrapedAt | string | ISO 8601 timestamp when the row was normalized. |
rawResult | object or null | Original provider payload when raw data is enabled. |
Illustrative output record
{"recordType": "video","contentType": "videos","input": "https://www.youtube.com/@MrBeast","channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA","channelHandle": "MrBeast","channelName": "MrBeast","channelUrl": "https://www.youtube.com/@MrBeast","videoId": "xvFZjo5PgG0","videoUrl": "https://www.youtube.com/watch?v=xvFZjo5PgG0","title": "A public video title","description": "A public video description returned by the provider.","publishedAt": "2026-07-01T00:00:00.000Z","durationSeconds": 823,"durationText": "13:43","thumbnailUrl": "https://i.ytimg.com/vi/xvFZjo5PgG0/maxresdefault.jpg","viewCount": 23456789,"likeCount": 1200000,"commentCount": 18342,"engagementRate": 0.0519,"isShort": false,"isLive": false,"isUpcoming": false,"badges": ["4K"],"genre": "Entertainment","sortBy": "latest","resultPosition": 1,"page": 1,"scrapedAt": "2026-07-18T12:00:00.000Z"}
How it works
This Actor takes public channel references, resolves them through a provider route, normalizes returned items, and saves one dataset row per public video or Short. It supports two provider routes with fallback order controlled by providerOrder. The default route order is a primary data provider first, then a fallback provider as fallback.
The Actor can:
- collect videos, Shorts, or both,
- limit pagination per content type,
- cap results per channel and across the full run,
- filter by UTC publish date range,
- optionally include capped raw provider payloads for debugging.
The default dataset is the main export. The key-value store also provides:
OUTPUTfor compact run outcome and charge summary,RUN_SUMMARYfor provider attempts, pagination, filters, and diagnostics.
Evergreen pricing
YouTube Channel Video Scraper — Metrics & Shorts uses Pay per event with Apify platform usage included. The live Pricing tab is the source of truth for current charges and platform usage details.
The named charged events are:
apify-actor-start: charged once per run, scaled by allocated memory.video-scraped: charged for each normalized public video or Short saved to the dataset.
Example in words: if a run saves ten dataset rows, the event charge includes one actor-start event plus ten video-scraped events. If you allocate more memory, the actor-start event scales with that allocation. Check the live Pricing tab for the current pricing view before running larger jobs.
Use with AI agents (MCP)
This Actor is usable through Apify MCP for channel-based public video collection. The exact Actor identity is khadinakbar/youtube-channel-videos-scraper.
Tool description: collect normalized public YouTube channel video and Short records from known channel URLs, @handles, or channel IDs, with optional date filtering, feed selection, pagination bounds, and provider order control.
Collect the latest 10 public videos from the channel URL below. Return the dataset rows and then inspect
OUTPUTfor the terminal outcome, charge summary, and any warnings. If the result is partial, surface the warning details from the run summary. Keep the scope to the provided public channel only.Channel: https://www.youtube.com/@TED
Output interpretation:
resultsis the dataset with one row per public video or Short.outputis the compact run outcome.runSummarycontains provider attempts, pagination, and filter details.
Provenance and scope:
- Each row includes
provider,input,page,resultPosition, andscrapedAt. scrapedAtmarks normalization time, while public metrics reflect a snapshot from the provider response.- Scope is controlled by the input caps and provider pagination settings.
Pagination and cost guidance:
- Use
maxPagesPerContentTypeto bound provider depth. - Use
maxVideosPerChannelandmaxTotalVideosto bound saved rows and event charges. - Set a date window when you need a time-bounded collection.
API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const run = await client.actor('khadinakbar/youtube-channel-videos-scraper').call({channelUrls: ['https://www.youtube.com/@TED'],contentType: 'videos',maxVideosPerChannel: 10,maxPagesPerContentType: 1,maxTotalVideos: 10,sortBy: 'latest',});const rows = await client.dataset(run.defaultDatasetId).listItems();const output = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('OUTPUT');console.log('Rows:', rows.items.length);console.log('Outcome:', output?.value?.outcome);
Best results and outcome guidance
Use a small, explicit scope first when verifying a channel or input shape.
- Start with one known channel URL or channel ID.
- Use
contentType: "videos"when you want a focused long-form sample. - Use
contentType: "shorts"when you only need Shorts. - Use
contentType: "all"when you want both feeds in one run. - Use
publishedAfterandpublishedBeforewith real UTC calendar dates to narrow the collection window. - Use
sortBy: "latest"when you want recent uploads, andsortBy: "popular"when you want the provider's popularity-oriented ordering. - Keep
maxPagesPerContentTypesmall until you confirm the channel shape. - Increase
maxTotalVideosonly after you confirm the returned rows are the ones you need.
Continue the workflow
- Then use 🎯 Extract YouTube Comments & Replies — No API Key to add Youtube engagement evidence to records selected with YouTube Channel Video Scraper — Metrics & Shorts.
- Then use YouTube Community Posts Scraper & Exporter to extend YouTube Channel Video Scraper — Metrics & Shorts research with a complementary content contract.
Design note
I found that the dataset contract writes one normalized public YouTube video or Short per row, which makes row-level downstream processing straightforward.
FAQ
When should I use this Actor instead of a search scraper?
Use this Actor when you already know the channels you want. If you are still discovering channels from keywords or topics, start with YouTube Search Scraper and then pass the channel references here.
Can I collect both videos and Shorts in one run?
Yes. Set contentType to all to process both feeds for the supplied channels.
How do I get comments for a returned video?
Use the returned videoUrl or videoId in YouTube Comments Scraper (with Replies).
What does the providerOrder field control?
It selects the public-data provider route and fallback order. The default uses the primary data provider first, with the fallback data provider as fallback.
What does includeRawData add?
It attaches the original provider item to each dataset row for debugging provider field drift or custom parsing.
Responsible use
Use this Actor only for public YouTube metadata that you are permitted to process. Follow applicable law, YouTube terms, privacy obligations, and content rights. Keep retention and access controls appropriate for the data you export, and use the results in ways that respect the public nature of the source content.