YouTube Video Data Scraper - Views, Likes & Change Monitor avatar

YouTube Video Data Scraper - Views, Likes & Change Monitor

Pricing

from $1.46 / 1,000 video returneds

Go to Apify Store
YouTube Video Data Scraper - Views, Likes & Change Monitor

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

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

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 timeviewDelta, likeDelta and changedFields give 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 count5,020,910
Like count95,353
Likes per 1,000 views18.99
Length389 s
Caption languages7
Uploader tags4
CategoryScience & 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

FieldWhat it is
input, videoId, videoUrlWhat you asked for and what it resolved to
title, descriptionFrom the video's own data, not the page heading
channelId, channelTitle, channelUrl, subscriberCountTextThe channel that published it
viewCount, likeCount, likesPerThousandViewsThe two counts, and the ratio — computed only when both are readable
lengthSecondsDuration
publishedAt, publishedAtRawThe same instant as ISO and as YouTube's own string
category, keywordsCategory and the tags the uploader set
hasCaptions, captionLanguagesWhether captions exist and in which languages
isLiveContent, isFamilySafe, allowRatings, availableCountryCountFlags YouTube publishes
thumbnailUrl, playabilityStatus, playabilityReasonThumbnail and whether it can be played
isFirstCheck, previousCheckedAt, previousViewCount, viewDelta, likeDelta, changedFieldsMonitoring

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, likeDelta and changedFields;
  • 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 said playabilityStatus: ERROR for 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.be links, /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.

Other tools by NeverEmpty