YouTube Video Scraper · Whole Channels, Exact Views & Likes
Pricing
from $2.00 / 1,000 videos
YouTube Video Scraper · Whole Channels, Exact Views & Likes
YouTube video scraper for one or many channels: every video with exact views and likes (not "690K"), publish date, comments, duration and HD thumbnail. Date window, title filter, min views and only-new mode. No login, no API key, no quota.
Pricing
from $2.00 / 1,000 videos
Rating
0.0
(0)
Developer
TheQuietStack
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
YouTube video scraper for whole channels: every video of one or many channels with exact views and likes, publish date and duration, without an API key.
Give it YouTube channels, get every video as one flat row with the exact view count (692,960, not 690K), the exact like count, the publish date, comments, duration, live status, HD thumbnail, hashtags and the full description. Filter by date window, title words and minimum views; schedule it with only-new mode to track a channel's uploads.
No login, no Google account, no API key, no YouTube Data API quota.
What you get
| This Actor | The channel page / most channel scrapers | |
|---|---|---|
| Views | 692960 (exact) | 690K views (truncated) |
| Likes | 12916 (exact) | not shown in the list |
| Publish date | 2026-09-30 | 18 hours ago |
| Thumbnail | 1280x720 maxresdefault + the largest listed one | 360px |
| Title filter | before the video is opened, never charged | - |
Use cases
- Competitor and creator research: pull the last 100 uploads of 20 channels and sort by real views or likes per view - the order is often different from what "1.2M views" suggests.
- Influencer vetting: like rate (
likeRatePct), upload rhythm and view spread over a date window before you sign a sponsorship. - Content monitoring: schedule a daily run with
onlyNewVideosand get only the uploads since yesterday into Google Sheets, Make, n8n or Zapier. - Topic tracking:
titleKeywords: ["review"]over a list of tech channels returns only review videos, with numbers. - Datasets for analysis or AI: clean JSON with descriptions and hashtags, one row per video.
Input example
{"channels": ["@veritasium", "https://www.youtube.com/@NASA"],"daysBack": 60,"maxVideosPerChannel": 50,"titleKeywords": [],"minViews": 10000,"includeChannelProfile": true}
channels-@handle,handle,youtube.com/@handle,/channel/UC...,/c/...,/user/...or a bare channel ID. Video links are rejected with a clear message.tab-videos(uploads, default) orstreams(the Live tab). Shorts have their own Actor: YouTube Shorts Analytics.dateFrom/dateTo(YYYY-MM-DD, inclusive) ordaysBack.titleKeywords+keywordMode(any/all),excludeTitleKeywords,minViews.maxVideosPerChannel,maxVideos(whole run),maxPagesPerChannel(30 videos per list page).includeChannelProfile,includeDescription,onlyNewVideos+stateStoreName,requestDelaySecs.
Output example
Real rows from a run on 01 Oct 2026 (description shortened):
{"recordType": "video","videoId": "JsBZOcqZerk","url": "https://www.youtube.com/watch?v=JsBZOcqZerk","title": "The Insane Real Engineering of the Nazi Enigma Machine","channelTitle": "Veritasium","channelHandle": "@veritasium","channelId": "UCHnyfMqiRRG1u-2MsSQLbXA","contentType": "video","publishedDate": "2026-09-21","publishedDateText": "Sep 21, 2026","publishedDateApprox": false,"listedAgeText": "9 days ago","views": 14227041,"viewsText": "14,227,041 views","viewsExact": true,"listedViewsText": "14M views","likes": 115226,"likesText": "115,226","likesExact": true,"likeRatePct": 0.81,"comments": 6000,"commentsText": "6K","commentsExact": false,"isLiveNow": false,"liveViewers": null,"durationSeconds": 2862,"durationText": "47:42","badges": [],"thumbnailUrl": "https://i.ytimg.com/vi/JsBZOcqZerk/hq720_custom_2.jpg?sqp=...","thumbnailMaxresUrl": "https://i.ytimg.com/vi/JsBZOcqZerk/maxresdefault.jpg","hashtags": [],"description": "How was the \"unbreakable\" enigma cracked? ...","scrapedAt": "2026-10-01T14:28:10.705Z"}
More real rows from the same run:
| Channel | Video | Published | Views | Likes |
|---|---|---|---|---|
| @veritasium | We're trying something new... | 2026-09-30 | 692,960 | 12,916 |
| @veritasium | We sent a camera to space to film the solar eclipse | 2026-08-17 | 2,713,646 | 67,412 |
| @veritasium | Is spider web really stronger than steel? | 2026-08-02 | 9,373,637 | 141,990 |
| @NASA | NASA Moon Base: The First Six Months | 2026-09-08 | 509,890 | 8,859 |
| @NASA | For Earth, With Love: Artemis II | 2026-09-03 | 434,439 | 9,616 |
With includeChannelProfile, one row per channel has recordType: "channel": channelId, handle, title, description, keywords, subscribers + subscribersText + subscribersExact, videoCount (+ text, exact flag), avatarUrl, verified, isFamilySafe, rssUrl, url.
The run summary (SUMMARY in the key-value store) lists per channel: status (ok, partial, not_found, not_a_channel, no_such_tab, failed, blocked), videos written, list pages, watch-data requests, everything skipped (after dateTo, title, minViews, upcoming, unavailable, already seen, duplicates) and why paging stopped.
Works with: YouTube Comments Monitor
Monitoring a channel end to end? Pair this Actor with YouTube Comments Monitor: it takes the same channel handles (or the video URLs from this dataset) and returns the comments and replies, with onlyNewComments so a daily schedule only pays for new comments. Videos here, audience reaction there.
How much does it cost?
Pay per result, nothing else: $0.002 per video ($2.00 per 1,000) and $0.002 per channel profile. You are charged per video row written to the dataset and per channel profile row; the platform usage is included.
| Job | Rows | Cost |
|---|---|---|
| Last 50 videos of one channel | 50 | $0.10 (+ $0.002 profile) |
| 20 competitor channels x 50 videos | 1,000 | $2.00 (+ $0.04 profiles) |
Daily monitoring of 10 channels, onlyNewVideos, ~1 upload per channel per day | ~300 / month | ~$0.60 per month |
Never charged: unknown or invalid channels, a missing Live tab, blocked or failed requests, videos outside the date window, title or minViews misses, upcoming premieres, deleted videos, duplicates and videos already delivered by an earlier onlyNewVideos run. Set Max cost per run in Apify and the run stops cleanly at that amount.
Honest numbers
- Views and likes are exact when YouTube shows them exactly (it does on the watch data for regular videos). If a video only shows a rounded value, you get it with
viewsExact: false/likesExact: false- a rounded number is never presented as exact. Hidden like counts staynull. - Comment counts are rounded by YouTube (
1.8K). You get the number, the text andcommentsExact: false. Disabled comments givenull. - Subscriber counts are rounded by YouTube (
21.3M); the profile row flags them withsubscribersExact: false. - Publish date is a calendar day as YouTube shows it (
Sep 30, 2026). For streams that are live or ended a few hours ago YouTube only says "60 minutes ago"; then the day is computed andpublishedDateApprox: true. - Live now: a running stream has no view count yet.
viewsisnullandliveViewersholds the concurrent viewers. thumbnailMaxresUrlfollows YouTube's fixed pattern; it exists for HD uploads, very old or low-resolution uploads may only have the listedthumbnailUrl.- Measured on 01 Oct 2026 against YouTube's own channel RSS feed: same videos, same dates, view and like counts within the minutes between the two reads.
Polite access - Bot protection is never bypassed
- Only YouTube's public web-client data for channel lists and the watch page, the same requests youtube.com makes for a visitor who is not logged in. The video player / stream endpoint is never called, nothing is downloaded.
- One request at a time with a pause (
requestDelaySecs, minimum 0.5 s, default 1 s), hard caps per channel and per run, and filters applied before a video is opened. - Bot protection is never bypassed. If YouTube answers with HTTP 403 or 429, a captcha or "confirm you're not a bot" page, a consent or login redirect, or an answer without the expected structure, the Actor stops the whole run at once with status FAILED and a clear message (
SUMMARY.blockednames the channel and the reason; remaining channels are listed undernotReached). No retries of a block, no proxy or IP rotation, no header tricks, no login, no cookies, no consent clicking. Rows written before the stop stay in the dataset; nothing is charged for what was not delivered. - A plain server error (5xx) is retried exactly once after 5 seconds; anything else is reported, not retried.
FAQ
Do I need a YouTube API key? No. And there is no daily quota like the YouTube Data API has.
Does it get transcripts? No. YouTube now requires a client attestation token for captions; getting it would mean working around bot protection, which this Actor never does.
Shorts? Use the sister Actor YouTube Shorts Analytics - same exact-number approach for the Shorts tab.
How far back can it go? The full Videos tab of a channel, 30 videos per list page, capped by maxPagesPerChannel (default 40 pages = 1,200 videos). With dateFrom, paging stops at the first older video.
Why is a video missing that I see on the channel? Check SUMMARY: it was filtered (date, title, minViews), is an upcoming premiere, was deleted between listing and opening, or the channel hit a limit. Each case is counted.
Is it legal? It reads public pages without logging in. You are responsible for how you use the data; respect YouTube's Terms of Service and the rights of creators when you reuse titles, descriptions or thumbnails. Channel data can contain personal data (names, faces in thumbnails); you need your own legal basis (e.g. GDPR) for your purpose. This Actor is not affiliated with or endorsed by YouTube or Google.
Use it via API, integrations and AI agents
curl -X POST "https://api.apify.com/v2/acts/thequietstack~youtube-channel-videos/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"channels":["@veritasium"],"daysBack":30,"maxVideosPerChannel":50}'
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("thequietstack/youtube-channel-videos").call(run_input={"channels": ["@veritasium", "@NASA"], "daysBack": 30, "minViews": 10000})for video in client.dataset(run["defaultDatasetId"]).iterate_items():print(video["publishedDate"], video["views"], video["likes"], video["title"])
Works with Apify schedules, webhooks and integrations (Google Sheets, Make, n8n, Zapier), and as a tool for AI agents through the Apify MCP server.