YouTube Channel Videos Scraper — Metadata & Metrics avatar

YouTube Channel Videos Scraper — Metadata & Metrics

Pricing

from $5.00 / 1,000 video scrapeds

Go to Apify Store
YouTube Channel Videos Scraper — Metadata & Metrics

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

5

Monthly active users

2 days ago

Last modified

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 channelUrl or channelId into this Actor.
  • Use Send returned videoUrl or videoId values 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

FieldTypePurpose
channelUrlsarray of stringsPublic YouTube channel URLs, @handles, or channel IDs beginning with UC.
contentTypestringSelect videos, shorts, or all to collect long-form videos, Shorts, or both.
maxVideosPerChannelintegerCap normalized rows per channel across the selected content types.
maxPagesPerContentTypeintegerBound provider pagination for each feed type.
maxTotalVideosintegerCap all saved video and Short rows across the full run.
sortBystringRequest latest or popular provider ordering.
publishedAfterstringKeep rows published on or after a UTC calendar date.
publishedBeforestringKeep rows published before a UTC calendar date.
providerOrderstringChoose provider priority and fallback order.
includeRawDatabooleanAttach 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

FieldTypePurpose
recordTypestringDataset row type; one public YouTube video or Short per row.
contentTypestringChannel feed that produced the row.
providerstringPublic-data provider that returned the row.
inputstringOriginal channel reference supplied by the user.
channelIdstring or nullChannel ID when returned or supplied.
channelHandlestring or nullChannel @handle when returned or supplied.
channelNamestring or nullPublic channel display name.
channelUrlstring or nullCanonical public channel URL.
channelSubscriberCountinteger or nullPublic subscriber count when returned.
videoIdstringStable public YouTube video identifier.
videoUrlstring or nullCanonical public watch or Shorts URL.
titlestring or nullPublic video title.
descriptionstring or nullPublic video description when returned.
publishedAtstring or nullISO 8601 publish timestamp when available.
durationSecondsinteger or nullVideo duration in seconds when returned.
durationTextstring or nullProvider's human-readable duration text.
thumbnailUrlstring or nullPublic thumbnail image URL.
viewCountinteger or nullPublic view count when returned.
likeCountinteger or nullPublic like count when returned.
commentCountinteger or nullPublic comment count when returned.
engagementRatenumber or nullDerived from likes plus comments divided by views when usable counts exist.
isShortbooleanIndicates whether the row came from the Shorts feed.
isLiveboolean or nullWhether the provider marks the video as live.
isUpcomingboolean or nullWhether the provider marks the video as upcoming.
badgesarray of stringsPublic labels or badges attached to the video.
genrestring or nullPublic video genre when returned.
sortBystringRequested provider feed ordering.
resultPositionintegerOne-based position in the returned feed.
pageintegerProvider page number that returned the record.
scrapedAtstringISO 8601 timestamp when the row was normalized.
rawResultobject or nullOriginal 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:

  • OUTPUT for compact run outcome and charge summary,
  • RUN_SUMMARY for 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 OUTPUT for 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:

  • results is the dataset with one row per public video or Short.
  • output is the compact run outcome.
  • runSummary contains provider attempts, pagination, and filter details.

Provenance and scope:

  • Each row includes provider, input, page, resultPosition, and scrapedAt.
  • scrapedAt marks 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 maxPagesPerContentType to bound provider depth.
  • Use maxVideosPerChannel and maxTotalVideos to 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 publishedAfter and publishedBefore with real UTC calendar dates to narrow the collection window.
  • Use sortBy: "latest" when you want recent uploads, and sortBy: "popular" when you want the provider's popularity-oriented ordering.
  • Keep maxPagesPerContentType small until you confirm the channel shape.
  • Increase maxTotalVideos only after you confirm the returned rows are the ones you need.

Continue the workflow

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.