YouTube Video Scraper · Whole Channels, Exact Views & Likes avatar

YouTube Video Scraper · Whole Channels, Exact Views & Likes

Pricing

from $2.00 / 1,000 videos

Go to Apify Store
YouTube Video Scraper · Whole Channels, Exact Views & Likes

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

TheQuietStack

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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 ActorThe channel page / most channel scrapers
Views692960 (exact)690K views (truncated)
Likes12916 (exact)not shown in the list
Publish date2026-09-3018 hours ago
Thumbnail1280x720 maxresdefault + the largest listed one360px
Title filterbefore 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 onlyNewVideos and 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) or streams (the Live tab). Shorts have their own Actor: YouTube Shorts Analytics.
  • dateFrom / dateTo (YYYY-MM-DD, inclusive) or daysBack.
  • 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:

ChannelVideoPublishedViewsLikes
@veritasiumWe're trying something new...2026-09-30692,96012,916
@veritasiumWe sent a camera to space to film the solar eclipse2026-08-172,713,64667,412
@veritasiumIs spider web really stronger than steel?2026-08-029,373,637141,990
@NASANASA Moon Base: The First Six Months2026-09-08509,8908,859
@NASAFor Earth, With Love: Artemis II2026-09-03434,4399,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.

JobRowsCost
Last 50 videos of one channel50$0.10 (+ $0.002 profile)
20 competitor channels x 50 videos1,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 stay null.
  • Comment counts are rounded by YouTube (1.8K). You get the number, the text and commentsExact: false. Disabled comments give null.
  • Subscriber counts are rounded by YouTube (21.3M); the profile row flags them with subscribersExact: 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 and publishedDateApprox: true.
  • Live now: a running stream has no view count yet. views is null and liveViewers holds the concurrent viewers.
  • thumbnailMaxresUrl follows YouTube's fixed pattern; it exists for HD uploads, very old or low-resolution uploads may only have the listed thumbnailUrl.
  • 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.blocked names the channel and the reason; remaining channels are listed under notReached). 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 ApifyClient
client = 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.