YouTube Channel Scraper | Videos, Shorts and Views
Pricing
from $0.68 / 1,000 videos
YouTube Channel Scraper | Videos, Shorts and Views
Extract every video, Short and live stream from any YouTube channel: exact publish date, views, likes, duration, description, tags and category, plus subscribers, total views, country and social links for the channel. No API key, no login. Filter by date for daily monitoring of new uploads.
Pricing
from $0.68 / 1,000 videos
Rating
0.0
(0)
Developer
SilentFlow
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
17 hours ago
Last modified
Categories
Share
Youtube Channel Scraper
Turn any YouTube channel into a table: every video, short and live stream with its exact publish date, views and likes, and the channel's own numbers on each row. 50 videos with full details in 4 seconds.
How it works

- You paste one or more channels. A channel address, an
@handleor a channel id all work, in the same field. - The channel is read tab by tab. Videos, Shorts and Live streams, in the order you choose: latest, most popular or oldest. A date floor keeps only what was published after the day you pick.
- One row comes back per video. 33 fields: the video with its exact numbers, and the channel it belongs to with subscribers, total views, country and links. Ready for a spreadsheet, a database or an AI pipeline.
โจ Why teams choose this over other YouTube channel scrapers
Copying view counts from a channel page into a spreadsheet, one video at a time? Getting dates back as "3 weeks ago" and wondering how to sort them? Running one tool for the videos and another for the channel stats, then joining the two by hand?
- ๐
Dates you can sort and filter. Every row carries the exact publish date and time in RFC 3339 (
2026-09-16T12:01:27Z), not a label like "6 days ago". Filter a quarter, chart a cadence, join on a calendar, no cleaning needed. - ๐ฏ Exact numbers, not rounded ones. A channel page shows "8M views". The row says
8009051views and124170likes, the values YouTube publishes for the video itself. - ๐บ The video and its channel in the same row. 21 video fields and 12 channel fields together: subscribers, total videos, total views, country, joined date, verified badge and the links of the About panel. One dataset answers both "how did this video do" and "how big is this creator".
- ๐ฌ Videos, Shorts and Live streams in one run. Pick one, two or all three types. Each type gets its own cap, so Shorts never crowd out long videos.
- โฑ๏ธ Built for daily monitoring. Set
publishedAfterto1 dayon a schedule and each run returns only the new uploads. With the latest sort the run stops at the first older video, so watching 100 channels stays quick. - ๐งน A clean dataset, every time. One row is one real video. A channel that does not exist or a tab a channel does not have produces no row and a clear message on the run. Unknown values are
null, never an empty string, and no video appears twice. - ๐ No API key, no login. Nothing to create in a cloud console, no daily quota to watch, no account to connect. Paste a channel and press Start.
๐ฏ What you can do with YouTube channel data
| Team | What they build |
|---|---|
| Influencer marketing | A vetting sheet per creator before a deal: median views of the last 30 videos, likes per view, upload cadence, country and contact links |
| Competitive research | A weekly digest of everything rival channels published, with the videos that beat the channel's average |
| Content and SEO | A ranked list of a niche's most viewed videos by channel, with titles, descriptions and tags to find the topics that work |
| Social listening | A daily feed of new uploads from a watchlist of 200 channels, pushed to Slack or a database |
| Data and AI | A full catalogue of a channel (titles, descriptions, durations, dates) as the index for transcripts, search or RAG |
| Media and sponsorship sales | A report of a partner channel's Shorts and long videos with exact views 7 and 30 days after release |
| Lead generation | A list of channels in a vertical with subscribers, country and the website and social links from the About panel |
๐ฅ Input parameters
Essentials
| Field | Type | Description |
|---|---|---|
channelUrls | array, required | Channels to read, one per line. Accepts a channel address (https://www.youtube.com/@mkbhd, with or without /videos), a handle (@mkbhd) or a channel id (UCBJycsmduvYEL83R_U4JriQ). Older /c/name and /user/name addresses work too. |
maxItems | integer, default 50 | Maximum rows per channel, for each selected video type. 50 with Videos and Shorts selected returns up to 100 rows per channel. |
๐ Filters
| Field | Type | Description |
|---|---|---|
videoTypes | array, default ["videos"] | Tabs to read: videos, shorts, streams. A channel without one of these tabs returns nothing for it. |
sortBy | string, default latest | latest (newest first), popular (most viewed of all time) or oldest (first uploads of the channel). The order decides what the cap keeps. |
publishedAfter | string | Keep only videos published after a date (2026-01-31) or within an age (7 days, 2 weeks, 3 months, 1 year). |
๐ Output
| Field | Type | Description |
|---|---|---|
includeDetails | boolean, default true | On: exact date and time, exact views, likes, description, tags, hashtags, category. Off: a faster listing with title, rounded views, duration and an estimated date. |
โ๏ธ Advanced
| Field | Type | Description |
|---|---|---|
debugMode | boolean, default false | Adds detailed lines to the run log. Leave it off for normal runs. |
๐ Output data
Each row is one video. With details on (the default), a regular video looks like this:
{"id": "ohqxP8EEumo","url": "https://www.youtube.com/watch?v=ohqxP8EEumo","title": "iPhone 18 Pro Review: All About that Chip","type": "video","description": "iPhone 18 Pro is basically an S year upgrade. And one part of it is really impressive.\n\n0:00 Intro\n1:21 This Camera\n6:47 The Chip\n10:20 Battery Boost\n13:04 The Little Things\n14:22 Conclusion","category": "Science & Technology","tags": null,"hashtags": null,"duration": "00:16:35","durationSeconds": 995,"isLive": false,"isMembersOnly": false,"channelId": "UCBJycsmduvYEL83R_U4JriQ","channelName": "Marques Brownlee","channelUsername": "@mkbhd","channelUrl": "https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ","channelDescription": "MKBHD: Quality Tech Videos | YouTuber | Geek | Consumer Electronics | Tech Head | Internet Personality!","channelLocation": "United States","channelJoinedDate": "2008-03-21T00:00:00Z","numberOfSubscribers": 21200000,"channelTotalVideos": 1851,"channelTotalViews": 5658099674,"isChannelVerified": true,"channelLinks": [{ "text": "Twitter", "url": "http://twitter.com/MKBHD" },{ "text": "Instagram", "url": "http://instagram.com/MKBHD" },{ "text": "Discord", "url": "http://discord.gg/MKBHD" }],"viewCount": 8009051,"likes": 124170,"date": "2026-09-16T12:01:27Z","thumbnailUrl": "https://i.ytimg.com/vi/ohqxP8EEumo/maxresdefault.jpg","channelAvatarUrl": "https://yt3.googleusercontent.com/qu4TmIaYUlS41-dJ9gZ7DUR3nilvmB5_11i6OKSdvNnBNiyOusZP1bMN6ICnuxtjFBb6ioKgRQ=s900-c-k-c0x00ffffff-no-rj","channelBannerUrl": "https://yt3.googleusercontent.com/zi_48HwHU4s0Hnb6tZuvRzTfCPHrLEnrtIMDLzMauDEyDmURh9JZ4wrNd3lKr7m9uVnT4YjYKw=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj","order": 0,"input": "https://www.youtube.com/@mkbhd","scrapedAt": "2026-09-17T13:17:10Z"}
With details off, a Short from the listing keeps the same 33 columns. What the listing does not show reads null (channel block shortened here):
{"id": "tI704AA0B2I","url": "https://www.youtube.com/shorts/tI704AA0B2I","title": "Web scraping: which websites can't you scrape? #apify #webscraping #coding","type": "short","description": null,"duration": null,"viewCount": 725,"likes": null,"date": null,"channelName": "Apify","numberOfSubscribers": 26000,"thumbnailUrl": "https://i.ytimg.com/vi/tI704AA0B2I/frame0.jpg","order": 0,"input": "@Apify","scrapedAt": "2026-09-17T13:17:21Z"}
๐๏ธ Data fields
33 fields per row: 4 identity, 8 content, 12 channel, 2 measures, 1 date, 3 media, 3 meta. channelLinks is the only nested field, a list of { text, url } pairs.
| Group | Fields |
|---|---|
| Identity | id, url, title, type (video, short or stream) |
| Content | description, category, tags, hashtags, duration (HH:MM:SS), durationSeconds, isLive, isMembersOnly |
| Channel | channelId, channelName, channelUsername, channelUrl, channelDescription, channelLocation, channelJoinedDate, numberOfSubscribers, channelTotalVideos, channelTotalViews, isChannelVerified, channelLinks |
| Measures | viewCount, likes |
| Time | date (RFC 3339, UTC) |
| Media | thumbnailUrl, channelAvatarUrl, channelBannerUrl |
| Meta | order (position in the channel listing, per type), input (the channel as you typed it), scrapedAt (RFC 3339, UTC) |
Good to know when you store the data:
idis YouTube's permanent video id andchannelIdthe permanent channel id. Both survive a title change or a handle change.urlandchannelUrlare built from them and are permanent.dateis the release date of a video and the start of the broadcast for a live stream.thumbnailUrl,channelAvatarUrlandchannelBannerUrlare image links served by YouTube. They stay valid as long as the creator keeps the image.tagsandhashtagsare filled when the creator publishes them. Many channels publish none, and the fields then readnull.numberOfSubscribersis rounded by YouTube itself (21200000for "21.2M"). Total views and total videos are exact.- A stream that is live right now has
isLive: trueand nodurationyet. - A video reserved for the paying members of a channel is listed with
isMembersOnly: true. YouTube publishes its title, date, duration and likes, and no view count, soviewCountreadsnull. Filter on this flag before computing averages.
๐ Examples
Get the 50 latest videos of a channel
{"channelUrls": ["https://www.youtube.com/@mkbhd"]}
Find the 100 most viewed videos of two competitors
{"channelUrls": ["@LinusTechTips", "@mkbhd"],"sortBy": "popular","maxItems": 100}
Pull only what a watchlist published since yesterday
Put this on a daily schedule. Each run returns the new uploads and nothing else.
{"channelUrls": ["@mkbhd", "@LinusTechTips", "@veritasium", "@TED"],"publishedAfter": "1 day","maxItems": 20}
Export a channel's Shorts and long videos together
{"channelUrls": ["https://www.youtube.com/@MrBeast"],"videoTypes": ["videos", "shorts"],"maxItems": 200}
List a channel's live streams, past and current, as fast as possible
{"channelUrls": ["@LofiGirl"],"videoTypes": ["streams"],"includeDetails": false,"maxItems": 100}
Rebuild the first year of a channel from its very first upload
{"channelUrls": ["UCBJycsmduvYEL83R_U4JriQ"],"sortBy": "oldest","maxItems": 150}
๐ค Copy to your AI assistant
Paste this block into Claude, ChatGPT or Cursor to give it full context about this scraper:
You have access to the Youtube Channel Scraper on Apify: silentflow/youtube-channel-scraperInput schema:- channelUrls (required, array of strings): channel addresses, @handles or channel ids (UC...)- maxItems (integer, default 50): max rows per channel, for each selected video type- videoTypes (array, default ["videos"]): any of "videos", "shorts", "streams"- sortBy (string, default "latest"): "latest", "popular" or "oldest"- publishedAfter (string, optional): "2026-01-31" or an age like "7 days", "2 weeks", "3 months", "1 year"- includeDetails (boolean, default true): exact date, exact views, likes, description, tags, hashtags, category- debugMode (boolean, default false)Output, one row per video (33 fields, null when unknown):- id (string), url (string), title (string), type ("video" | "short" | "stream")- description (string), category (string), tags (string[]), hashtags (string[])- duration ("HH:MM:SS"), durationSeconds (integer), isLive (boolean), isMembersOnly (boolean)- channelId, channelName, channelUsername, channelUrl, channelDescription, channelLocation (strings)- channelJoinedDate (RFC 3339), numberOfSubscribers, channelTotalVideos, channelTotalViews (integers)- isChannelVerified (boolean), channelLinks ({text, url}[])- viewCount (integer), likes (integer)- date (RFC 3339 UTC)- thumbnailUrl, channelAvatarUrl, channelBannerUrl (strings)- order (integer), input (string), scrapedAt (RFC 3339 UTC)No API key and no login needed. Use apify-client for Python or JavaScript.
๐ป Integrations
Score a creator before a sponsorship deal (Python)
from statistics import medianfrom apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("silentflow/youtube-channel-scraper").call(run_input={"channelUrls": ["@mkbhd"],"maxItems": 30,})videos = list(client.dataset(run["defaultDatasetId"]).iterate_items())public = [v for v in videos if not v["isMembersOnly"] and v["viewCount"]]views = [v["viewCount"] for v in public]likes = [v["likes"] or 0 for v in public]channel = videos[0]print(channel["channelName"], channel["numberOfSubscribers"], "subscribers,", channel["channelLocation"])print("Median views, last 30 videos:", median(views))print("Likes per 1,000 views:", round(1000 * sum(likes) / sum(views), 1))
Post new uploads from a watchlist to Slack (JavaScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('silentflow/youtube-channel-scraper').call({channelUrls: ['@LinusTechTips', '@mkbhd', '@veritasium'],publishedAfter: '1 day',maxItems: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const video of items) {await fetch(process.env.SLACK_WEBHOOK_URL, {method: 'POST',body: JSON.stringify({ text: `${video.channelName} published "${video.title}" ${video.url}` }),});}
Find the videos that beat a channel's average (Python, CSV export)
import csvfrom apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("silentflow/youtube-channel-scraper").call(run_input={"channelUrls": ["@veritasium"],"maxItems": 200,})videos = list(client.dataset(run["defaultDatasetId"]).iterate_items())average = sum(v["viewCount"] or 0 for v in videos) / len(videos)winners = sorted((v for v in videos if (v["viewCount"] or 0) > 2 * average), key=lambda v: -v["viewCount"])with open("winners.csv", "w", newline="") as f:writer = csv.writer(f)writer.writerow(["title", "date", "viewCount", "likes", "url"])for v in winners:writer.writerow([v["title"], v["date"], v["viewCount"], v["likes"], v["url"]])
๐ Performance
Measured on 17 September 2026 on real channels.
| Run | Rows | Time |
|---|---|---|
| 1 channel, 50 latest videos, details on (the default input) | 50 | 4 seconds |
| 2 channels, 200 videos each, details on | 400 | 38 seconds |
| 2 channels, Shorts and Live streams by popularity, details off | 60 | 2 seconds |
| 2 channels, videos of the last 30 days, details on | 27 | 3 seconds |
| 1 channel, its whole catalogue of long videos, details off | 1,719 | 47 seconds |
| Metric | Value |
|---|---|
| Fields per row | 33 |
| Videos per listing page | about 30 |
| Columns filled on the default run | all, except tags and hashtags when the creator sets none |
| Limit per run | no fixed limit: the cap is per channel and per type, and you choose it |
๐พ Data export
Every run stores its rows in a dataset you can download as JSON, CSV, Excel, XML or HTML from the Storage tab, or pull from the API:
https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv&token=YOUR_TOKEN
The dataset has two ready-made table views: Videos (title, channel, type, views, likes, published, duration, URL) and Channel stats (channel, handle, subscribers, videos, total views, country, joined, URL). Schedules, webhooks and the Apify integrations (Google Sheets, Slack, Zapier, Make, n8n) work on top of the same dataset.
๐ก Tips for best results
- Monitoring? Combine
publishedAfterwith the latest sort."publishedAfter": "1 day"on a daily schedule reads only the top of each channel and returns only new uploads. - Keep details on when dates matter. Exact dates, exact views and likes come with details. Turn details off only for a fast inventory of titles and rounded views.
- Use channel ids for long-lived pipelines. A creator can change an
@handle. TheUC...id never changes, and every row gives it to you inchannelId. - Size
maxItemsper type. With Videos and Shorts both selected,maxItems: 100means up to 100 of each per channel. - Use
popularto benchmark,oldestto study a launch. The most viewed videos show what a channel is known for. The first uploads show how it started. - Group rows by
channelIdfor channel-level reports. The channel block is identical on every row of a channel, so the first row of each group is the channel's profile.
โ FAQ
What does this scraper extract? Every public video, Short and live stream of the channels you list, one row each, with 33 fields: the video (title, exact date, views, likes, duration, description, tags, hashtags, category, thumbnail) and its channel (name, handle, subscribers, total videos, total views, country, joined date, verified badge, links, avatar, banner).
What can I type in the channel field?
A channel address in any form (https://www.youtube.com/@name, with or without a tab like /videos, /channel/UC..., /c/name, /user/name), a handle (@name) or a channel id (UC...). Anything else is skipped and named in the run log.
Do I need a YouTube account or an API key? No. The scraper reads public channel pages. There is no login, no key and no quota to manage.
How fresh is the data?
Live. Every run reads YouTube at run time, nothing is served from a cache. scrapedAt tells you when each row was read.
Is there a limit on the number of videos?
No fixed limit. maxItems is per channel and per type, and a run walks a channel page by page until that cap or the end of the channel. A whole catalogue of 1,719 long videos was exported in 47 seconds with details off.
Can I scrape many channels in one run? Yes. List as many channels as you need. A channel named twice, for instance once by handle and once by id, is read once, and no video is ever delivered twice in a run.
How do the filters combine?
They stack. videoTypes: ["shorts"] with sortBy: "popular" and maxItems: 25 returns the 25 most viewed Shorts of each channel. Adding publishedAfter: "3 months" keeps only those released in the last three months.
Why are tags or hashtags null on some rows?
Because the creator set none, or keeps them private. Hashtags are read from the description, tags are the public keywords of the video. Many large channels publish neither.
What happens with details off?
You get the listing as the channel page shows it: title, rounded views (8000000 for "8M views"), duration and a date estimated from the age label ("11 days ago"). Shorts show neither age nor duration in the listing, so those two fields read null. If you set publishedAfter, the date of each Short is still read exactly, so the filter stays correct.
What if a channel does not exist or has no Shorts tab? No row is written for it. The run log names the channel, and a run that ends with no rows at all says why on the run itself. Your dataset never contains error rows.
Are the URLs permanent?
url and channelUrl are permanent. Image links (thumbnailUrl, avatar, banner) stay valid as long as the creator keeps the image.
Does it get comments, transcripts or the video file? No. This scraper is about channel catalogues and performance. For transcripts, see the related scrapers below.
โ๏ธ Legal
This Actor extracts publicly available data from YouTube. It does not bypass any login, paywall or CAPTCHA, and it does not download video files. Users are responsible for complying with YouTube's terms of service and with applicable data protection laws (GDPR, CCPA, and PIPL where relevant). The output contains creator information that creators publish themselves (channel name, description, country, links); when you process it as personal data, handle it accordingly. The data returned is informational; verify accuracy for regulated use cases.
๐ Related scrapers
- YouTube Transcript Scraper: the transcript of any video, in batch. Feed it the
urlcolumn of this scraper. - TikTok Scraper: videos and profiles from TikTok.
- Instagram Engagement Scraper: likes and comments behind Instagram posts.
- Facebook Search Scraper: posts, pages and videos from Facebook search.
๐ฌ Support
Need something this scraper does not do yet? We ship features fast.
- Feature requests go straight to our backlog
- Enterprise needs? We do custom integrations and high-volume plans
- Pricing details live on the Monetization tab of the actor page
Response time: usually under 24 hours.
Check out our other scrapers: silentflow on Apify