YouTube Channel Videos Scraper avatar

YouTube Channel Videos Scraper

Pricing

from $0.01 / 1,000 results

Go to Apify Store
YouTube Channel Videos Scraper

YouTube Channel Videos Scraper

Pull every upload from any YouTube channel as clean structured rows — video ID, title, watch URL, view count, publish time, duration and thumbnail. Point it at a channel URL, an @handle or a UC... channel ID; powered by YouTube's own InnerTube API, so there's no Data API key and no headless browser.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

Assia Fadli

Assia Fadli

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

YouTube Channel Videos Scraper turns any YouTube channel into a clean, structured list of its uploads. Give it a channel URL, an @handle, or a UC... channel id and it returns one tidy row per video — id, title, watch URL, view count, publish time, duration and thumbnail — ready to drop into a spreadsheet, database or downstream pipeline.

No YouTube Data API key. No headless browser. No login. It talks directly to YouTube's own internal InnerTube API (the same endpoints the website and apps use), so it's fast and lightweight.

Built for creators, analysts, agencies and developers who need a dependable feed of a channel's videos without maintaining scraping infrastructure.

What you get

One dataset row per video:

FieldDescription
channelIdThe channel's UC... id
channelTitleThe channel's display name
videoId11-character video id
titleVideo title
urlhttps://www.youtube.com/watch?v=<videoId>
viewsView count text, e.g. "191K views"
publishedRelative publish time, e.g. "2 weeks ago"
durationLength, e.g. "12:34"
thumbnailHighest-resolution thumbnail URL

If the channel can't be read or has no public uploads, the actor still writes a single row with an error field instead of failing with empty output.

Input

FieldTypeRequiredDefaultDescription
channelstringhttps://www.youtube.com/@NASAChannel URL (/@handle, /channel/UC..., /c/..., /user/...), a bare @handle, or a UC... id
maxResultsinteger50Maximum number of videos to return (fetched newest-first)
languagestringenInterface language (hl) for YouTube's localized text
proxyCountryCodestringUSISO country code for the Apify residential proxy; leave blank to let Apify choose

The original field names are all accepted, along with a few aliases (channelUrl/url for channel, maxVideos/limit for maxResults, proxyCountry for proxyCountryCode, hl for language).

Example input

{
"channel": "https://www.youtube.com/@NASA",
"maxResults": 50,
"proxyCountryCode": "US"
}

Example output row

{
"channelId": "UCLA_DiR1FfKNvjuUpBHmylQ",
"channelTitle": "NASA",
"videoId": "aRSBZN2UF0Q",
"title": "Moon Base: June 2026 Update",
"url": "https://www.youtube.com/watch?v=aRSBZN2UF0Q",
"views": "191K views",
"published": "2 weeks ago",
"duration": "1:05",
"thumbnail": "https://i.ytimg.com/vi/aRSBZN2UF0Q/hqdefault.jpg"
}

How it works

  1. Resolve the channel. If the input already contains a UC... id (bare or inside a /channel/ URL) it is used directly. Otherwise the actor POSTs to youtubei/v1/navigation/resolve_url to turn an @handle / /c/ / /user/ reference into a UC... browse id.
  2. Browse the Videos tab. It POSTs to youtubei/v1/browse with the channel's browse id and the params blob that selects the "Videos" tab. The channel-browse endpoint is served through the InnerTube WEB client (the ANDROID/IOS app clients return HTTP 400 there).
  3. Page through results. It follows the continuationCommand.token from each response until maxResults is reached or there are no more pages, de-duplicating by videoId and guarding against continuation loops.

Requests are routed through Apify residential proxy when available, with an automatic fallback to a direct connection.

Pricing

This actor uses Apify's pay-per-event model. You're charged once per video delivered (video-scraped); error rows are never billed, and the run stops automatically once your budget is reached.

Notes & limitations

  • views, published, and duration are returned as YouTube's own display text (localized), not parsed numbers.
  • Only regular uploads on the channel's Videos tab are returned (not Shorts, Live, Playlists or Podcasts).
  • YouTube can change its internal API at any time; this actor tolerates several response shapes but is not covered by an official API contract.

Tech

Written in TypeScript on the Apify SDK. HTTP-only, so builds are fast and runs are cheap.

License

MIT © Assia Fadli