YouTube Video Metadata Collector avatar

YouTube Video Metadata Collector

Pricing

from $1.00 / 1,000 results

Go to Apify Store
YouTube Video Metadata Collector

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

seungkyu cho

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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

FieldMeaning
channelUrls@handle, /channel/UC…, /c/…, or a bare handle
videoTypeALL, LONG_FORM, or SHORTS
maxItemsPerChannelPer-channel budget — ALL splits it across both tabs
minUploadDate / maxUploadDateYYYY-MM-DD window
maxDaysOldRolling window, in days
proxyConfigurationResidential 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

  • maxItemsPerChannel is a per-channel budget. With videoType: ALL the 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 proxyUrls to use your own proxies instead of Apify's.