YouTube Channel Scraper
Pricing
$0.80 / 1,000 rows
YouTube Channel Scraper
Scrapes a YouTube channel's videos, Shorts and live streams (title, views, length, date, thumbnail, live flags) plus channel details: subscribers, total views, video count, joined date, country and links. Latest, popular or oldest first. No login or API key.
Pricing
$0.80 / 1,000 rows
Rating
0.0
(0)
Developer
Mina
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
What does YouTube Channel Scraper do?
YouTube Channel Scraper collects every video, Short and live stream of
any YouTube channel, together with the channel's
own details. For each video you get the title, link, view count (exact
for videos and past streams), length, upload date, thumbnail and live or
upcoming status. Upload dates are estimated from the age YouTube shows
(such as 3 weeks ago) unless you turn on exact dates, which also adds
likes, descriptions, and exact views and lengths for Shorts. For each
channel you get its name, handle, description, subscriber count, total
views, video count, joined date, country, links, avatar, banner and verified
badge. Paste a channel link, an @handle, a channel ID or any video of the
channel, and pick Latest, Popular or Oldest first.
Try it with the prefilled channel: open the Actor, click Start, and NASA's 30 latest videos plus its channel details arrive in a few seconds. It needs no login, no API key and no YouTube Data API quota. Because it runs on the Apify platform, you also get API access, scheduled runs, integrations (Google Sheets, Make, Zapier, webhooks), run monitoring and automatic retries through Apify Proxy when YouTube refuses a request.
Why scrape YouTube channels?
- Competitor and creator research: see what a channel publishes, how often, and which videos get the most views.
- Influencer marketing: compare subscribers, total views and recent performance of many channels in one table before you reach out.
- Content strategy: sort by Popular to find a channel's best performers, or by Oldest to study how it started.
- Monitoring: schedule a daily run to catch new uploads, Shorts, upcoming premieres and live streams as soon as they appear.
- Datasets and analytics: export clean JSON or CSV with numbers as numbers and dates as ISO 8601, ready for spreadsheets, BI tools or AI.
How to scrape a YouTube channel
- Copy a channel's link from YouTube, such as
https://www.youtube.com/@NASA. An @handle, a channel ID (UC…) or the link of any video of the channel works too. - Paste it into YouTube channels, one channel per line.
- Choose What to scrape: Videos, Shorts, Live streams or several.
- Pick the order (Latest, Popular or Oldest first) and set Max videos per channel.
- Turn on Add exact dates, likes and descriptions if you need them.
- Click Start, then download the results when the run finishes.
Input
Everything is set on the Input tab. In JSON, the input looks like this:
{"channels": ["https://www.youtube.com/@NASA","@MrBeast","UCsXVk37bltHxD1rDPwtNM8Q","https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"content_types": ["videos", "shorts", "live"],"sort": "popular","max_videos_per_channel": 100,"include_channel_details": true,"include_video_details": false}
| Field | What it does |
|---|---|
channels | Channels, one per line: links (/@handle, /channel/UC…, /c/…, /user/…, or a tab such as /@NASA/videos), bare @handles, channel IDs, or links to any video or Short of the channel. With or without https://; API callers can also send {"url": "..."} objects. |
content_types | Which tabs to read: videos, shorts, live (past streams, live now and upcoming). Default: ["videos"]. |
sort | latest, popular or oldest, like the buttons above a channel's videos. Default: latest. |
max_videos_per_channel | Stops after this many for each channel, counted separately per content type. Default: 100. Set 0 to save only channel details. |
include_channel_details | Adds one row per channel with its details. Default: on. |
include_video_details | Looks up each video once more for its exact publish time, likes, exact views, length, description, category and tags. Slower: one extra request per video. Default: off. |
proxyConfiguration | Optional; leave it empty. YouTube answers the Actor directly, and the Actor switches to Apify Proxy by itself whenever YouTube refuses a request. |
Output
Each channel gives one channel row (first), then one row per video, Short
or live stream. Here is a real channel row from the prefilled run, shortened:
{"type": "channel","channelId": "UCLA_DiR1FfKNvjuUpBHmylQ","channelName": "NASA","channelHandle": "@NASA","channelUrl": "https://www.youtube.com/@NASA","description": "NASA's mission is to pioneer the future in space exploration, scientific discovery, and aeronautics research.\n\nTo do tha…","subscriberCount": 15100000,"videoCount": 6187,"totalViewCount": 1127806724,"joinedDate": "2008-06-03","country": null,"links": [{ "title": "nasa.gov", "url": "https://www.nasa.gov" },{ "title": "X", "url": "https://x.com/nasa" }],"avatarUrl": "https://yt3.googleusercontent.com/eIf5fNPcIcj9ig-wZBeq4stFy1lgjWTW1nLT5dYlFkHZprZ03QBiMcbpwNMB6XSBjrSFGtAGQg=s900-c-k-c0x00ffffff-no-rj","bannerUrl": "https://yt3.googleusercontent.com/y8Srh-oCcilLvBO8jAPI546m1bn0puA5DIvQiBZ1cSxc_rZfKxKSFlTCtoCQCtB6viUf1NGsaQ=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj","isVerified": true,"keywords": ["nasa", "space", "iss", "shuttle", "50th"],"scrapedAt": "2026-10-10T07:21:00.259644+00:00"}
And a video row from the same run:
{"type": "video","id": "ErAqN6gXqZQ","url": "https://www.youtube.com/watch?v=ErAqN6gXqZQ","title": "NASA's SpaceX Crew-13 Mission (Official NASA Trailer)","viewCount": 99485,"durationSeconds": 62,"publishedTimeText": "9 days ago","publishedAt": "2026-10-01T07:21:00+00:00","publishedAtIsEstimate": true,"isLive": false,"isUpcoming": false,"scheduledStartAt": null,"thumbnailUrl": "https://i.ytimg.com/vi/ErAqN6gXqZQ/hq720.jpg?sqp=-oaymwEcCK4FEIIDSEbyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBdCgImHQMLNSlEXi3avww63RniAQ","channelId": "UCLA_DiR1FfKNvjuUpBHmylQ","channelName": "NASA","channelHandle": "@NASA","channelUrl": "https://www.youtube.com/@NASA","scrapedAt": "2026-10-10T07:21:00.395650+00:00"}
With Add exact dates, likes and descriptions on, each row also has
likeCount, description, category and tags, and publishedAt becomes
YouTube's exact publish time. A real Short with details:
{"type": "short","id": "b1EMX3wyqCY","url": "https://www.youtube.com/shorts/b1EMX3wyqCY","title": "Your Brain on Magic Mushrooms","viewCount": 900904,"durationSeconds": 71,"publishedTimeText": null,"publishedAt": "2026-09-28T14:00:34+00:00","publishedAtIsEstimate": false,"isLive": false,"isUpcoming": false,"scheduledStartAt": null,"thumbnailUrl": "https://i.ytimg.com/vi/b1EMX3wyqCY/sardefault.jpg?sqp=-oaymwEdCJUDENAFSEaQAgHyq4qpAwwIARUAAIhCcAHAAQY=&rs=AOn4CLCmGZk1G7Ds9HIK_keXYSunxLRoFA","likeCount": 34977,"description": "Magic mushrooms temporarily change how different parts of your brain communicate…","category": "Education","tags": ["kurzgezagt", "kurzgesatg", "kurzgsagt"],"channelId": "UCsXVk37bltHxD1rDPwtNM8Q","channelName": "Kurzgesagt – In a Nutshell","channelHandle": "@kurzgesagt","channelUrl": "https://www.youtube.com/@kurzgesagt","scrapedAt": "2026-10-10T07:26:01.118585+00:00"}
The Output tab has a Videos table and a Channels table. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Data fields
Video, Short and live stream rows:
| Field | Description |
|---|---|
type | video, short or live: the channel tab it was listed on. |
id, url | YouTube's video ID and its link (/shorts/… links for Shorts). |
title | The title, as YouTube shows it to English-language visitors. |
viewCount | Views, exact for videos and past streams. Shorts' counts are rounded as YouTube shows them (38K → 38000) unless video details are on. null for upcoming streams, and for streams that are live now unless video details are on (then it is the stream's total views so far). |
durationSeconds | Length in seconds. null for Shorts (unless video details are on) and for live or upcoming streams. |
publishedTimeText | The age YouTube shows, such as 9 days ago or Streamed 2 days ago. null for Shorts and for streams that are live or upcoming. |
publishedAt | Upload date and time in UTC (ISO 8601). With video details on, YouTube's exact publish time. Otherwise estimated as the scrape time minus publishedTimeText: YouTube rounds ages down, so the real date can be up to one unit earlier (up to a year for 5 years ago). null when YouTube shows no age, and always for upcoming streams, which are not published yet (see scheduledStartAt). |
publishedAtIsEstimate | true when publishedAt is estimated from the age, false when it is YouTube's exact publish time, null when there is no date. |
isLive | true while the stream is live. |
isUpcoming | true for a scheduled stream or premiere that has not started. |
scheduledStartAt | For upcoming streams and premieres, the exact scheduled start in UTC. |
thumbnailUrl | The largest thumbnail YouTube lists. |
likeCount, description, category, tags | Only with video details on. likeCount is null when the channel hides likes. |
channelId, channelName, channelHandle, channelUrl | The channel the video belongs to. |
scrapedAt | When the row was saved. |
Channel rows (type = channel):
| Field | Description |
|---|---|
channelId, channelName, channelHandle, channelUrl | The channel's ID (UC…), name, @handle and link. |
description | The channel description. |
subscriberCount | Subscribers. YouTube itself rounds this publicly (15.1M → 15100000); null when the channel hides it. |
videoCount | Number of public videos, exact. |
totalViewCount | Total views of the channel, exact. |
joinedDate | When the channel was created (YYYY-MM-DD). |
country | The country the channel lists, or null when it lists none. |
links | The links the channel lists in its About panel, each with title and url. |
avatarUrl, bannerUrl | Profile picture and banner image. |
isVerified | true for verified channels and official artist channels. |
keywords | The channel's keywords. |
scrapedAt | When the row was saved. |
How much does it cost to scrape a YouTube channel?
YouTube Channel Scraper uses pay-per-event pricing: you pay only for the rows you get, one video, Short, live stream or channel row each. See the Pricing tab for the exact price per 1,000 rows. Apify's free plan includes monthly credit you can use to try it.
Channels that return nothing (removed, terminated or nonexistent) and links that are not channels are never saved as rows, so you are not charged for them. A channel without any videos of the kinds you asked for gives only its channel row (one row) when channel details are on, and nothing otherwise. If you set a maximum cost for a run, the Actor stops as soon as it is reached.
Tips for scraping YouTube channels
- Speed: about 1,000 videos in 5 to 10 seconds; three channels are read at the same time. Video details add one request per video: expect about 10 videos a second with them on.
- The order picks the videos: with a limit, Latest gives the newest, Popular the most viewed and Oldest the first uploads.
- Only channel details: set Max videos per channel to
0to get one row per channel, for example to compare subscriber counts of many channels. - Everything: set Max videos per channel to a large number such as
100000to read a whole tab. - Monitoring: schedule a daily run with Latest and a small limit, and
keep only rows whose
idyou have not seen before. - Each video is saved only once per run, even when YouTube lists it twice or you give the same channel twice in different forms.
- If the run's time limit is close, the Actor stops paging and finishes cleanly with everything collected so far.
FAQ, disclaimers and support
Which channels work? Any public channel. Private and unlisted videos are
not listed on a channel's tabs, so they are not included. Some channels have
no Shorts or Live tab; for those, only the tabs they have are read. If a
channel has none of the kinds you asked for, you get only its channel row
(when channel details are on), and the FAILED_INPUTS record says so.
Why are some dates estimates? A channel's tabs only show ages such as
3 weeks ago, so publishedAt is estimated from them, and
publishedAtIsEstimate is true. Turn on Add exact dates, likes and
descriptions for YouTube's exact publish time.
Why are titles sometimes in English for a non-English channel? Titles are read as YouTube shows them to an English-language visitor, so where a creator added an English translation of a title, you get the translation.
What happens to links that return nothing? They are not saved as rows,
so you are not charged for them. Each one is listed with its reason (for
example YouTube says: This channel does not exist.) in the FAILED_INPUTS
record of the run's key-value store, together with channels that stopped
early or had none of the videos asked for, and links that repeat a channel
given earlier (its rows are saved once). The run's status message gives the
counts. A run fails only when every channel failed because YouTube could not
be reached.
Is it legal to scrape YouTube channels? This Actor collects only data that YouTube shows publicly to anyone without logging in. Channel pages can contain personal data, such as a creator's name, picture and links, so you are responsible for making sure your use complies with YouTube's Terms of Service and with data protection laws such as the GDPR. Collect only what you need, and if in doubt, ask a lawyer.
Found a problem or need a custom solution? Open an issue on the Issues tab and we will look into it. Custom scrapers and data feeds are available on request.