YouTube Channel Videos Scraper
Pricing
from $0.01 / 1,000 results
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
Maintained by CommunityActor 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:
| Field | Description |
|---|---|
channelId | The channel's UC... id |
channelTitle | The channel's display name |
videoId | 11-character video id |
title | Video title |
url | https://www.youtube.com/watch?v=<videoId> |
views | View count text, e.g. "191K views" |
published | Relative publish time, e.g. "2 weeks ago" |
duration | Length, e.g. "12:34" |
thumbnail | Highest-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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
channel | string | ✅ | https://www.youtube.com/@NASA | Channel URL (/@handle, /channel/UC..., /c/..., /user/...), a bare @handle, or a UC... id |
maxResults | integer | — | 50 | Maximum number of videos to return (fetched newest-first) |
language | string | — | en | Interface language (hl) for YouTube's localized text |
proxyCountryCode | string | — | US | ISO 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
- 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 toyoutubei/v1/navigation/resolve_urlto turn an@handle//c///user/reference into aUC...browse id. - Browse the Videos tab. It POSTs to
youtubei/v1/browsewith the channel's browse id and theparamsblob 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). - Page through results. It follows the
continuationCommand.tokenfrom each response untilmaxResultsis reached or there are no more pages, de-duplicating byvideoIdand 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, anddurationare 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