YouTube Channel Scraper — Latest Videos via RSS (No API Key)
Pricing
from $0.70 / 1,000 result items
YouTube Channel Scraper — Latest Videos via RSS (No API Key)
Latest videos of any YouTube channel or playlist without API key or quota: official RSS (15 latest, exact dates/views) or the public Videos/Shorts tab (~30/48 latest). Keyword, date and view filters, channel stats (subscribers, total views), per-video details (duration, likes, category).
Pricing
from $0.70 / 1,000 result items
Rating
0.0
(0)
Developer
Samat Makatov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
YouTube Channel Scraper — latest videos, channel stats, no API key
Monitor any YouTube channel or playlist without the Data API, quota, browser or proxy. Reads the official RSS feed (15 latest videos with exact timestamps, view counts and descriptions) or the public Videos / Shorts tab (~30 / ~48 latest), optionally enriched with channel stats (subscribers, total views, country, links) and per-video details (duration, likes, category, keywords). Give a @handle, any channel URL, a UC… id or a PL… playlist id.
Use cases
- Competitor / creator monitoring — daily run with
maxAgeDays: 1over 50 channels; alert on new uploads that matchincludeKeywords. - Influencer lead-gen —
includeChannelStats: trueto collect subscribers, total views, country and external links (site, Instagram, TikTok) for outreach lists. - Content research —
source: "videos",sort: "mostViewed"to see which recent topics perform for each channel. - Shorts trend tracking —
source: "shorts"for the latest 48 Shorts with view counts. - Sponsorship due diligence —
includeVideoDetailsfor exact duration, likes and category of the last N videos. - Playlist sync — feed a course or podcast playlist (
PL…) into your CMS / vector DB whenever a new episode appears.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
channels | string[] | — | @handle, youtube.com/@x, /channel/UC…, /c/Name, /user/Name, UC… id, PL…/UU… playlist id or playlist URL. |
source | select | rss | rss (15 latest, exact data), videos (~30 latest uploads, approx. dates & rounded views, durations), shorts (~48 latest Shorts). Playlists always use RSS. |
limitPerChannel | int | 15 | Max videos kept per entry (1–100; the source caps apply). |
includeKeywords | string[] | — | Keep videos whose title/description contains any (case-insensitive). |
excludeKeywords | string[] | — | Drop videos containing any. |
sinceDate | date | — | Keep videos published on/after this date. |
maxAgeDays | int | — | Keep videos newer than N days (good for scheduled runs). |
minViews | int | — | Drop videos below this view count. |
sort | select | newest | newest, mostViewed, feed. Applied before limitPerChannel. |
includeChannelStats | bool | false | Fetch the About page: subscribers, video count, total views, country, joined, description, links, avatar. Emits one type: "channel" row per channel + channel* columns on videos. |
includeVideoDetails | bool | false | Fetch each video page: durationSec, likeCount, category, keywords, exact views, isLive. |
maxDetailsPerChannel | int | 5 | Budget for includeVideoDetails (0–50). |
descriptionLength | int | 1000 | Truncate RSS descriptions (0 = drop). |
maxItems | int | 1000 | Hard cap across all channels. |
dedupe | bool | true | Skip a videoId already emitted by an earlier entry. |
Reference
What each source gives you
| Field | rss | videos tab | shorts tab | + includeVideoDetails |
|---|---|---|---|---|
| items | ≤ 15 | ≈ 30 | ≈ 48 | — |
publishedAt (exact ISO) | yes | no (publishedAtApprox from "3 days ago") | no | yes (publishDate) |
views | exact | rounded ("572K") | rounded | exact |
description | yes (truncated) | no | no | no |
durationSec | no | yes | no | yes |
rating / ratingCount | yes | no | no | likeCount |
category, keywords, isLive | no | no | no | yes |
Accepted channel references
| Input | Example |
|---|---|
| Handle | @Fireship, Fireship |
| Channel URL | https://www.youtube.com/@Fireship/videos, /channel/UCsBjURrPoezykLs9EqgamOA, /c/Fireship, /user/GoogleDevelopers |
| Channel id | UCsBjURrPoezykLs9EqgamOA |
| Playlist | PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf, https://www.youtube.com/playlist?list=PL…, uploads playlist UU… |
Examples
Daily "what's new" across a watchlist
{ "channels": ["@Fireship", "@aiDotEngineer", "@lexfridman"], "maxAgeDays": 1 }
Influencer outreach list with stats and links
{ "channels": ["@Fireship", "@ThePrimeagen", "@t3dotgg"], "includeChannelStats": true, "limitPerChannel": 3 }
Top-performing recent videos per channel
{ "channels": ["@Fireship"], "source": "videos", "sort": "mostViewed", "limitPerChannel": 10, "includeVideoDetails": true, "maxDetailsPerChannel": 10 }
Keyword watch: reviews mentioning a product
{ "channels": ["@mkbhd", "@UnboxTherapy"], "includeKeywords": ["iPhone", "Pixel"], "excludeKeywords": ["#shorts"], "maxAgeDays": 30 }
Latest Shorts
{ "channels": ["@Fireship"], "source": "shorts", "limitPerChannel": 20 }
Output
Video row (RSS + details):
{"type": "video","input": "https://www.youtube.com/@Fireship","kind": "channel","source": "rss","playlistId": null,"channelId": "UCsBjURrPoezykLs9EqgamOA","channelTitle": "Fireship","channelUrl": "https://www.youtube.com/channel/UCsBjURrPoezykLs9EqgamOA","channelHandle": "@Fireship","channelSubscribers": 4270000,"channelVideoCount": 841,"channelTotalViews": 744056340,"videoId": "FluKUJyeYD8","title": "Did OpenAI actually build AGI? GPT-6 Astra first look","url": "https://www.youtube.com/watch?v=FluKUJyeYD8","publishedAt": "2026-09-04T20:14:12+00:00","updatedAt": "2026-09-11T22:17:40+00:00","description": "CodeRabbit Security protects your code…","thumbnail": "https://i3.ytimg.com/vi/FluKUJyeYD8/hqdefault.jpg","views": 3999521,"rating": 5,"ratingCount": 45194,"durationSec": 446,"likeCount": 45194,"category": "Science & Technology","keywords": ["webdev", "app development"],"isLive": false,"isShort": false,"detailsFetched": true,"fetchedAt": "2026-09-12T23:41:12.086Z"}
| Field | Description |
|---|---|
type | video or channel (stats row, only with includeChannelStats). |
input, kind, source | What you passed, channel/playlist, and which source produced the row. |
channelId, channelTitle, channelUrl, channelHandle | Resolved channel identity. |
channelSubscribers, channelVideoCount, channelTotalViews, channelCountry | From About page (includeChannelStats), else null. channelCountry is null when the channel does not publish a country (common). |
videoId, title, url, thumbnail | Video identity. |
publishedAt / publishedAtApprox / publishedText | Exact ISO (RSS/details) or approximate from relative text (tabs). |
views, viewsText, rating, ratingCount, likeCount | Engagement. |
durationSec, durationText, isShort, isLive, category, keywords | From tab / details. |
description | RSS description, truncated to descriptionLength. |
Channel row (type: "channel") adds channelDescription, channelJoined, channelAvatar, channelKeywords, channelLinks[], channelIsFamilySafe and the raw subscribersText / videoCountText / totalViewsText. Key-value record SUMMARY: { videos, channels, source, errors[] }.
Use it from code / agents
curl -X POST "https://api.apify.com/v2/acts/yadroo~youtube-channel-feed/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' -d '{"channels":["@Fireship"],"maxAgeDays":7}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('yadroo/youtube-channel-feed').call({ channels: ['@aiDotEngineer'], includeChannelStats: true });const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("yadroo/youtube-channel-feed").call(run_input={"channels": ["@Fireship"], "source": "videos", "sort": "mostViewed"})items = client.dataset(run["defaultDatasetId"]).list_items().items
MCP: connect https://mcp.apify.com and call the yadroo/youtube-channel-feed tool with the same JSON.
Pricing
Pay per event: $0.001 per run start + $0.001 per video. Channel-stats rows are billed like videos. Typical: 10 channels × 15 videos = 150 rows ≈ $0.15; a daily maxAgeDays: 1 watchlist usually yields a handful of rows, under $0.01.
Limits & FAQ
- Only 15 videos? That is YouTube's RSS cap. Use
source: "videos"(~30) or"shorts"(~48); for full back-catalogues use a full YouTube scraper. - Approximate dates on tabs. The Videos/Shorts tabs only show "3 days ago";
publishedAtApproxis computed from that. Turn onincludeVideoDetailsfor exact dates on the videos you care about. - Rate limits / blocks. 0.5–0.6 s pauses between page fetches, 3 retries with backoff on 429/5xx. Heavy
includeVideoDetailsbudgets on many channels are the only way to get throttled — keep them ≤ 10. - Private / deleted / renamed. 404 → clear error for that entry in
SUMMARY.errors; the run continues with the others and fails only if nothing at all was fetched. - Members-only / age-restricted videos may miss details.
- Roadmap. Comments count, transcript availability flag, uploads-playlist paging for older videos.
Made by Yadroo · Sibling actors: google-news-search · rss-to-json · hackernews-search · crypto-news