YouTube Channel Scraper avatar

YouTube Channel Scraper

Pricing

from $0.35 / 1,000 videos

Go to Apify Store
YouTube Channel Scraper

YouTube Channel Scraper

List every video, Short or live stream on a YouTube channel. Accepts handles like @mkbhd, channel URLs, or raw channel IDs and resolves them for you. Returns video ID, title, view count, duration, publish time and thumbnail, paginated as deep as you need, with no API key or quota.

Pricing

from $0.35 / 1,000 videos

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

YouTube Channel Videos Scraper

Lists what a YouTube channel has published. Give it channels and it returns one row per video, with the title, view count, publish date, duration, thumbnail and live status exactly as the channel page shows them.

No API key, no quota, and no login is involved: the actor reads YouTube's own public browse endpoint, the same one the website calls.

Input

FieldTypeNotes
channelsarrayRequired. Handles (@mkbhd), channel URLs (youtube.com/@mkbhd, youtube.com/c/LinusTechTips, youtube.com/user/marquesbrownlee, youtube.com/channel/UC...) and bare channel IDs (UC...) are all accepted, mixed freely.
tabstringvideos (default), shorts, or live.
maxResultsintegerVideos per channel, default 50. Pages hold about 30 items, so larger numbers simply fetch more pages.
proxyConfigurationobjectRecommended. YouTube answers datacenter addresses with a bot check.

Handles and custom URLs are turned into a channel ID through YouTube's navigation/resolve_url endpoint before anything is listed, so a run costs one extra request per non-ID input and nothing after that.

Output

One dataset item per video:

{
"channel_id": "UCXuqSBlHAE6Xw-yeJA0Tunw",
"tab": "videos",
"video_id": "DXK-F0SjC_E",
"url": "https://www.youtube.com/watch?v=DXK-F0SjC_E",
"title": "I put the NEWEST CPU in the OLDEST Motherboard",
"view_count_text": "721K views",
"view_count": 721000,
"concurrent_viewers_text": null,
"published_time_text": "1 day ago",
"scheduled_text": null,
"duration_text": "13:48",
"duration_seconds": 828,
"thumbnail_url": "https://i.ytimg.com/vi/DXK-F0SjC_E/hq720.jpg",
"is_live": false,
"is_upcoming": false
}

What the source does not give, and is therefore null

A channel tab is a listing page, not a video page. Missing values are null, never 0 and never an empty string, because a zero reads as a measurement.

  • Exact view counts. The tab shows 721K views. view_count_text carries that string unchanged; view_count carries YouTube's own rounded figure (721000). It is not an exact count, and no exact count is available here.
  • Absolute publish dates. Only relative text (1 day ago, Streamed 1 month ago) is provided. Nothing is converted to a timestamp, because "1 month ago" cannot be turned into a date without inventing one.
  • Shorts have no duration and no publish date. The Shorts tab carries the title and view count only, so duration_text, duration_seconds and published_time_text are null for every Short.
  • Live items have no view count. While a stream is running the tab shows 12K watching instead, which is in concurrent_viewers_text; view_count stays null because watchers are not views.
  • Upcoming items carry scheduled_text (Scheduled for 8/25/26, 4:00 AM) and is_upcoming: true, with no view count and no duration.
  • Descriptions, tags, likes and comment counts are not on the tab at all and are not returned.

Reliability

YouTube refuses datacenter addresses with a bot check. Those refusals, along with HTTP 403, 429 and 5xx, are treated as temporary: the actor rotates to a new proxy address and retries. A channel that genuinely does not exist returns an error alert and is reported once, without retries, so a typo costs one request rather than a run's budget.

Pricing

Pay per event. One charge per video delivered to the dataset, after it has been pushed, and a small actor-start charge per run. Videos repeated across pages are de-duplicated before charging, so no video is ever paid for twice in a run.