YouTube Video Metadata Collector
Pricing
from $1.00 / 1,000 results
YouTube Video Metadata Collector
List every long-form and Shorts video on a set of YouTube channels and fetch full metadata per video: description, tags, category, exact view/like counts, chapters and available caption languages.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
seungkyu cho
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Give it a channel. Get back every video on it — long-form and Shorts — with the full metadata record for each one, not the thin summary a listing page shows.
Description, tags, category, exact view and like counts, duration in seconds, chapters, available caption languages. The fields you'd otherwise open 200 tabs to collect.
What a row looks like
{"recordType": "videoDetail","channelName": "Marques Brownlee","channelUrl": "https://www.youtube.com/@mkbhd","listedType": "LONG_FORM","videoId": "kYfNvmF0Bqw","videoUrl": "https://www.youtube.com/watch?v=kYfNvmF0Bqw","title": "The Best Smartphone Camera 2025","description": "Full blind camera test results...","durationSeconds": 1043,"viewCount": 4821904,"likeCount": 79605,"category": "Science & Technology","keywords": ["smartphone", "camera test", "blind test"],"chapters": [{ "title": "Intro", "startSeconds": 0 }],"availableCaptionLanguages": ["en", "es", "ko"],"isLive": false,"isUpcoming": false,"isFamilySafe": true,"thumbnails": [{ "url": "https://i.ytimg.com/...", "width": 1280 }],"scrapedAt": "2026-08-26T04:20:11.882Z"}
Not every field exists on every video — livestreams, Shorts and age-restricted
uploads each expose a different subset. Missing values come back null, never as
errors.
Input
| Field | Meaning |
|---|---|
channelUrls | @handle, /channel/UC…, /c/…, or a bare handle |
videoType | ALL, LONG_FORM, or SHORTS |
maxItemsPerChannel | Per-channel budget — ALL splits it across both tabs |
minUploadDate / maxUploadDate | YYYY-MM-DD window |
maxDaysOld | Rolling window, in days |
proxyConfiguration | Residential by default — see below |
{"channelUrls": ["https://www.youtube.com/@mkbhd"],"videoType": "ALL","maxItemsPerChannel": 200,"maxDaysOld": 365}
Two things this gets right that are easy to get wrong
Shorts actually come back. The fast HTTP path doesn't recognise the Shorts tab layout and parses zero videos from it. Treating that as "this channel has no Shorts" is the obvious bug, and it's a quiet one — you get a successful run with nothing in it. Here, a tab that yields zero always falls back to a full browser scroll, and a run that ends up empty fails rather than reporting success.
Records aren't hollow. YouTube gives datacenter IPs a stripped response: the listing still works, but per-video detail comes back nearly empty, so rows land with an ID and little else — no title, no description, no view count. Requests go through a residential proxy by default, which is the difference between a 10-field shell and the 24-field record above.
Good for
- Channel audits and content inventories
- Competitive tracking across a set of channels
- Building a searchable index of a back catalogue
- Feeding recommendation or trend models with real metadata
Notes
maxItemsPerChannelis a per-channel budget. WithvideoType: ALLthe long-form and Shorts tabs share it, rather than each taking the full amount.- Residential proxy traffic is billed by Apify on top of compute.
- Set
proxyUrlsto use your own proxies instead of Apify's.