YouTube Video Stats Scraper — Views, Likes, Duration by URL avatar

YouTube Video Stats Scraper — Views, Likes, Duration by URL

Pricing

from $15.00 / 1,000 video scrapeds

Go to Apify Store
YouTube Video Stats Scraper — Views, Likes, Duration by URL

YouTube Video Stats Scraper — Views, Likes, Duration by URL

Get YouTube video stats and metadata by URL or video ID — view count, likes, duration, publish date, title, description, category, keywords, channel and caption languages. Bulk video lookup, no API key, no login, no quota. Filter by views or duration. Charged only for videos actually returned.

Pricing

from $15.00 / 1,000 video scrapeds

Rating

0.0

(0)

Developer

Nicholas Cheng

Nicholas Cheng

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Share

YouTube Video Stats Scraper

Give it YouTube links or video IDs, get one row of real numbers per video. View count, duration, publish date, likes, title, full description, category, keywords, channel, and which caption languages exist. No API key, no OAuth, no login, no quota to apply for. Accepts watch links, Shorts links, youtu.be links, embed links, or bare 11-character IDs.

You are charged only for videos that actually came back. A private, deleted, or region-blocked video produces an explanatory row and costs nothing.

InputVideo URLs or IDs — any format YouTube itself accepts
OutputOne row per video, numbers as numbers — plus the transcript if you tick includeSubtitles
Price$0.015 per video — the same on every Apify plan
API keyNot needed. This does not use the YouTube Data API, so it does not consume your quota
ChannelsNot fetched. This Actor is the videos-only mode of the YouTube Video & Channel Scraper; use that one to list a channel's recent videos

What you get

{
"itemType": "video",
"videoId": "aircAruvnKk",
"url": "https://www.youtube.com/watch?v=aircAruvnKk",
"title": "But what is a neural network? | Deep learning chapter 1",
"description": "Full text of the video description, not truncated.",
"durationSeconds": 1120,
"viewCount": 23951183,
"likesLabel": "like this video along with 512,000 other people",
"publishedAt": "2017-10-05T00:00:00-07:00",
"channelId": "UCYO_jab_esuFRV4b17AJtAw",
"channelName": "3Blue1Brown",
"channelUrl": "https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw",
"channelSubscribersLabel": "7.4M subscribers",
"keywords": ["neural networks", "deep learning", "machine learning"],
"category": "Education",
"isLive": false,
"thumbnail": "https://i.ytimg.com/vi/aircAruvnKk/maxresdefault.jpg",
"availableCaptions": [
{ "language": "en", "name": "English", "isAutoGenerated": false }
]
}

viewCount and durationSeconds are real numbers, not display strings — you can sort and filter on them without parsing "1.2M" first. likesLabel is a string on purpose: YouTube no longer exposes an exact like count to logged-out clients, and inventing a number from a rounded label would be making data up.

availableCaptions lists which caption tracks exist and in which languages. The text itself comes with includeSubtitles:

Transcripts (optional, no extra charge)

  • transcript — the full text of the captions in the spoken language (human-written when the video has them, otherwise YouTube's auto-generated ones, de-duplicated); transcriptLanguage and transcriptType (manual / auto-generated) say which.
  • subtitles — the same track with timed segments ({ start, end, text }, seconds).
  • No captions on YouTube → transcript: null and subtitlesNote saying so.

Input

{
"videoUrls": [
"https://www.youtube.com/watch?v=aircAruvnKk",
"https://youtu.be/dQw4w9WgXcQ",
"https://www.youtube.com/shorts/…",
"jNQXAC9IVRw"
],
"minViews": 10000
}
OptionDefaultNotes
videoUrls—Watch, Shorts, youtu.be, embed links, or bare IDs. De-duplicated
includeSubtitlesfalseAlso return the transcript with timestamps. Included in the per-video price
minViews0Drop videos below this view count
minDurationSeconds / maxDurationSeconds0Keep only videos in a length range — e.g. maxDurationSeconds: 60 for Shorts
publishedAfter—ISO date; older videos are dropped
titleContains—Keep only titles containing any of these phrases (case-insensitive)
maxItems0Hard cap on rows for the run

Videos that fail a filter are not delivered and not charged. They are counted under filteredOut in the run summary.


Pricing

$0.015 per video, on every Apify plan — Free, Bronze, Silver, Gold, Platinum, Diamond. Check the Pricing tab: all six columns are identical. The price a listing advertises in its title is not always the price a free-plan run pays; here it is.

What you are not charged for

What happens here
Unavailable videosPrivate, deleted, region-blocked, or mistyped IDs produce one row marked chargedForThis: false. Nothing is billed.
Filtered-out videosA video that fails minViews or any other filter is not written and not billed.
Empty or placeholder rowsIf the video data did not come back, no row is written.
The free planSame code path, same fields, same limits. No demo mode, no row cap, no nulls in place of data.

What this Actor cannot do

  • No speech recognition of our own. Transcripts are YouTube's own captions; a video without captions gets an empty transcript and a note. (An earlier version of this page said transcripts were impossible — that was true only of the web player's caption links, which were the only ones we had tested. YouTube's mobile app clients get caption links that need no proof-of-origin token, and that is what this Actor uses.)
  • No channel listings. For "the latest videos from these channels", use the YouTube Video & Channel Scraper — same code, same prices, plus a $0.005 channel event.
  • No exact like count. YouTube stopped exposing it to logged-out clients; you get YouTube's own rounded label.
  • No comments, no search.

How it stays working

Video pages are loaded through a rotating residential connection — an ordinary browser-like request from an ordinary address, not a bypass of anything. Transcripts take one more request: the caption list is fetched the way YouTube's mobile apps fetch it (iOS, Android VR and Android clients in turn, fresh address each try, up to six tries), and the caption file is downloaded directly. Three rounds of fifteen videos: 14, 15 and 15 of 15 on a single pass; 170 of 170 caption downloads returned text. YouTube's page structure is read at runtime; if a video's data does not come back, the row is marked unavailable rather than filled with nulls.


Integrating

curl -X POST "https://api.apify.com/v2/acts/nick.cheng~youtube-video-stats/run-sync-get-dataset-items?token=<TOKEN>" \
-H 'Content-Type: application/json' \
-d '{"videoUrls":["aircAruvnKk","dQw4w9WgXcQ"]}'

Official clients exist for JavaScript and Python, and results export as JSON, CSV, or Excel.