YouTube Channel Videos Scraper avatar

YouTube Channel Videos Scraper

Pricing

from $0.35 / 1,000 videos

Go to Apify Store
YouTube Channel Videos Scraper

YouTube Channel Videos Scraper

List every video, Short and live stream on YouTube channels with views, upload date, duration and thumbnails, plus channel subscribers. Use @handles, URLs or channel IDs. No API key.

Pricing

from $0.35 / 1,000 videos

Rating

0.0

(0)

Developer

Solar G

Solar G

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Security

Limited permissions

Share

Lists the videos, Shorts and live streams on YouTube channels, with view counts, upload times, durations and thumbnails. It also returns one channel record with subscriber and video counts. No YouTube API key or quota is needed.

Input

FieldDescription
channels@handle, channel URL (/@name, /channel/UC…, /c/…, /user/…) or channel ID. A tab in the URL (/@name/shorts, /@name/streams) is used instead of tabs for that channel.
tabsAny of videos, shorts, streams. Default ["videos"].
maxVideosPerChannelPer channel and per tab, newest first. Default 100.
includeChannelInfoOne record per channel. Default true.
{
"channels": ["@veritasium", "https://www.youtube.com/@mkbhd"],
"tabs": ["videos", "shorts"],
"maxVideosPerChannel": 500
}

Output

Video records use the same keys as the other YouTube Actors in this series; keys that a channel listing does not show (such as likes) are null. Examples from a real run:

Video

{
"type": "video",
"tab": "videos",
"input": "@veritasium",
"videoId": "eyZEqSPeMwg",
"url": "https://www.youtube.com/watch?v=eyZEqSPeMwg",
"title": "No device could prove Einstein wrong... until now",
"channel": "Veritasium",
"channelId": "UCHnyfMqiRRG1u-2MsSQLbXA",
"channelUrl": "https://www.youtube.com/@veritasium",
"channelHandle": "@veritasium",
"channelSubscribers": 21400000,
"channelVerified": true,
"collaborators": [],
"views": 1000000,
"concurrentViewers": null,
"likes": null,
"commentCount": null,
"commentCountIsExact": null,
"duration": "34:28",
"durationSec": 2068,
"publishDate": null,
"publishedAt": null,
"isShort": false,
"isLive": false,
"isAgeRestricted": null,
"isMembersOnly": null,
"commentsTurnedOff": null,
"tags": null,
"category": null,
"thumbnail": "https://i.ytimg.com/vi/eyZEqSPeMwg/hq720_custom_1.jpg",
"description": null,
"hashtags": [],
"viewsText": "1M",
"publishedTimeText": "5 hours ago",
"publishedAtApprox": "2026-10-23T19:40:03.567Z",
"isUpcoming": false
}

Channel

{
"type": "channel",
"input": "@veritasium",
"channelId": "UCHnyfMqiRRG1u-2MsSQLbXA",
"channel": "Veritasium",
"channelUrl": "https://www.youtube.com/@veritasium",
"channelHandle": "@veritasium",
"description": "An element of truth - videos about science, education, and anything else we find interesting.",
"channelSubscribers": 21400000,
"channelVerified": true,
"videoCount": 543,
"keywords": "\"science videos\" science \"science education\" ...",
"avatar": "https://yt3.googleusercontent.com/..."
}

Field notes:

  • Channel pages show rounded view counts (for example "1M"), so views is rounded. For exact views, likes and comment counts, use the YouTube Scraper.
  • YouTube lists only relative upload times ("5 hours ago"), so publishedAtApprox is an estimate.
  • Streams that are live now have isLive: true and concurrentViewers instead of views. Scheduled streams and premieres have isUpcoming: true.
  • Shorts listings do not include an upload time or duration.
  • Channel listings do not include likes, comment counts, exact dates, tags or category, so these are null (unknown). Use the YouTube Scraper for those.

Errors: an input that is not a channel, a channel that does not exist, or a channel with nothing on the requested tabs gives one item with type: "error", input and error (for example "This channel has no Shorts tab"). When some requested tabs have videos and others do not, each empty or missing tab gets its own error item with tab set. Error items are not charged. A channel given twice in different forms is scraped once.

API usage

curl -X POST "https://api.apify.com/v2/acts/solarg~youtube-channel-videos/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"channels": ["@veritasium"], "maxVideosPerChannel": 200}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("solarg/youtube-channel-videos").call(run_input={"channels": ["@veritasium"], "maxVideosPerChannel": 200})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Pricing

  • $0.50 per 1,000 videos
  • $0.001 per channel record

Error items are free. Apify paid plans get lower prices: 10% off on Bronze, 20% on Silver and 30% on Gold and above. Platform usage is included in the price.

Report problems in the Issues tab.