YouTube Video Data Scraper - Views, Likes & Change Monitor
Pricing
from $1.46 / 1,000 video returneds
YouTube Video Data Scraper - Views, Likes & Change Monitor
Give it video URLs or ids and get the view count, like count, length, publish date, category, tags and caption languages for each one. Turn monitoring on and a video comes back only when its numbers actually move, so you are never charged twice for the same figures.
Pricing
from $1.46 / 1,000 video returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
YouTube Video Data Scraper — views, likes, and what actually changed
Give it video URLs or ids. With monitoring on, you are never charged twice for the same figures - a video comes back only when one of its numbers actually moves.
Every row carries the view count, the like count, likes per thousand views, the length, the publish time, the category, the uploader's tags, and which caption languages exist.
Best for
- Tracking performance over time —
viewDelta,likeDeltaandchangedFieldsgive you the movement since the last run, so you can store a series without diffing anything yourself. - Vetting a list of videos — likes per thousand views next to the raw counts, plus whether captions exist, in one pass.
- Feeding a dataset — tags, category, length and publish time are all on the row, so nothing needs a second request.
Measured on this Actor, 2026-09-07
Read from a real watch page (ngPkbaZliaU):
| View count | 5,020,910 |
| Like count | 95,353 |
| Likes per 1,000 views | 18.99 |
| Length | 389 s |
| Caption languages | 7 |
| Uploader tags | 4 |
| Category | Science & Technology |
🔴 Leave the proxy on. Requested from Apify's own IP, YouTube answered with "Sign in to confirm you're not a bot" in place of the player data on 5 of 5 attempts — no video could be read at all. Through a proxy the data came back on 10 of 10. This Actor reports that page as a bot check and retries on a new session; it never reports it as a video with no views.
One row per video
| Field | What it is |
|---|---|
input, videoId, videoUrl | What you asked for and what it resolved to |
title, description | From the video's own data, not the page heading |
channelId, channelTitle, channelUrl, subscriberCountText | The channel that published it |
viewCount, likeCount, likesPerThousandViews | The two counts, and the ratio — computed only when both are readable |
lengthSeconds | Duration |
publishedAt, publishedAtRaw | The same instant as ISO and as YouTube's own string |
category, keywords | Category and the tags the uploader set |
hasCaptions, captionLanguages | Whether captions exist and in which languages |
isLiveContent, isFamilySafe, allowRatings, availableCountryCount | Flags YouTube publishes |
thumbnailUrl, playabilityStatus, playabilityReason | Thumbnail and whether it can be played |
isFirstCheck, previousCheckedAt, previousViewCount, viewDelta, likeDelta, changedFields | Monitoring |
Everything comes from the video's own videoDetails block. A watch page is full of recommended videos from other channels; this Actor never reads ids out of that, and a page that resolves to a different video than the one you asked for is reported rather than returned.
Monitoring, and what it costs
Turn monitoring mode on and the numbers are remembered per video. On later runs:
- a video whose numbers have not moved is not returned and not charged;
- a video that moved comes back with
viewDelta,likeDeltaandchangedFields; - a video it has never seen is always returned once.
The numbers are remembered per video, not per list, so adding a video to a list does not reset the history or re-charge the ones already being watched.
Monitoring adds a flat access fee of $5, charged once per calendar month (UTC), on the first monitoring run of that month — once, no matter how many lists or scheduled tasks you run. Runs with monitoring off never trigger it.
Rows that are never charged
no-such-video— YouTube saidplayabilityStatus: ERRORfor it. The id may be wrong, or the video private, removed or region-locked.blocked— YouTube answered with a bot check instead of the player data. This is not a statement about the video. The run retries on a new proxy session; if you see this row, every retry came back the same way.incomplete-page— the page arrived without the player data and without a bot-check message. Reported rather than guessed at.no-change— monitoring ran and nothing had moved.no-match— videos were read and none matched your filters.unreadable— the page could not be parsed, or the input was not a YouTube video.
Which pages this Actor requests
Only https://www.youtube.com/watch?v=<id>&hl=en&gl=US. YouTube's robots.txt disallows /results, /feeds/videos.xml and /youtubei/, and this Actor cannot be made to request them: anything that is not a video id or a video URL is rejected before any request is made.
Input
videos— URLs or 11-character ids. Watch links,youtu.belinks,/shorts/links and bare ids all work.maxVideos— how many rows to return in total.monitoringMode,monitorMode,resetMonitoringState— see above.minViews/maxViews/minLengthSeconds/maxLengthSeconds/publishedAfter— numeric and date filters. A video whose count could not be read is kept, not treated as zero.requireCaptions,excludeLive— keep only captioned videos, or drop live content.keywords/keywordMatch/excludeKeywords— match on title, description, channel, tags and category.useProxy— leave it on; see the measurement above.
{"videos": ["https://www.youtube.com/watch?v=aircAruvnKk","https://youtu.be/jNQXAC9IVRw"],"monitoringMode": true,"monitorMode": "views-change","maxVideos": 100}
Questions
Why is the like count missing on some videos?
Because the uploader turned ratings off. allowRatings says so, and likeCount stays null rather than being filled with a zero.
Do I get charged for a video that does not exist? No. Only rows carrying video data are charged.
Why did every video come back as blocked?
The proxy was off, or every retry hit a bot check. On Apify's own IP this happened on 5 of 5 attempts in the measurement above.
Can I use this to watch a whole channel?
This Actor takes a list of videos. To list a channel's videos first, use the channel scraper below and feed its videoId column in here.