YouTube Channel Videos Scraper
Pricing
from $0.35 / 1,000 videos
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Security
Limited permissionsShare
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
| Field | Description |
|---|---|
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. |
tabs | Any of videos, shorts, streams. Default ["videos"]. |
maxVideosPerChannel | Per channel and per tab, newest first. Default 100. |
includeChannelInfo | One 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
viewsis rounded. For exact views, likes and comment counts, use the YouTube Scraper. - YouTube lists only relative upload times ("5 hours ago"), so
publishedAtApproxis an estimate. - Streams that are live now have
isLive: trueandconcurrentViewersinstead ofviews. Scheduled streams and premieres haveisUpcoming: 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 ApifyClientclient = 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.