# YouTube Video Details Scraper & Views Tracker (`s_actors/youtube-video-details-scraper`) Actor

Get full details of any YouTube videos, Shorts, channel uploads or playlists: exact views, likes, exact comment count, tags, category, upload time, duration, chapters, engagement rate. Scheduled runs track views over time. No API key.

- **URL**: https://apify.com/s_actors/youtube-video-details-scraper.md
- **Developed by:** [Superior Actors](https://apify.com/s_actors) (community)
- **Categories:** Videos, Social media, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 1,000 videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### YouTube Video Details Scraper & Views Tracker

Get the **full details and exact stats of any YouTube videos**: views, likes, the **exact comment count** (not "2.4M"), tags, category, upload time, duration, chapters and engagement rate. Paste video or Shorts links, or add a channel or playlist to check all its videos. Run it on a schedule and every row shows **views gained since the last check** and the last 30 checks: a views tracker over time for your own videos or your competitors'.

```json
{ "videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://youtu.be/jNQXAC9IVRw", "@MrBeast"] }
```

No YouTube API key, no quota, no login, no cookies. Use it as a **YouTube video details API**: one call returns clean JSON.

#### What you get

**One row per video.** Real example, September 2026:

| video | views | likes | comments | engagement | published | views / day | duration | category | tags |
|---|---|---|---|---|---|---|---|---|---|
| Luis Fonsi - Despacito ft. Daddy Yankee | 9,132,297,386 | 56,704,755 | 4,395,609 | 0.67% | 2017-01-12 | 2,575,981 | 4:42 | Music | 31 |
| Rick Astley - Never Gonna Give You Up | 1,820,912,280 | 19,426,219 | 2,457,716 | 1.20% | 2009-10-24 | 294,546 | 3:33 | Music | 27 |
| Me at the zoo | 437,778,590 | 19,949,200 | 10,629,852 | 6.99% | 2005-04-23 | 55,930 | 0:19 | Film & Animation | 3 |

| Field | Description |
|---|---|
| `views`, `likes`, `comments`, `commentsExact` | Exact counts. `commentsExact` is false in the rare case YouTube refuses the exact number and the rounded one (2.4M) is given |
| `likeRate`, `commentRate`, `engagementRate` | Likes, comments and both per 100 views |
| `publishedAt`, `publishedDate`, `ageDays`, `viewsPerDay` | Upload time with time zone (2009-10-24T23:57:33-07:00), age, average views per day since upload |
| `viewsChange`, `likesChange`, `commentsChange`, `viewsPerDaySinceLastCheck`, `previousCheckAt` | Growth since the previous check of the same video |
| `history` | The last 30 checks: date, views, likes, comments, ready for a chart |
| `title`, `description`, `descriptionLinks`, `tags`, `hashtags`, `category` | Metadata, every tag exactly as the creator set it |
| `durationSeconds`, `isShort`, `chapters` | Length, Short or regular video, chapters with start times |
| `isLiveContent`, `isPremiere`, `isLiveNow`, `liveStartedAt`, `liveEndedAt` | Streams and premieres |
| `isUnlisted`, `isFamilySafe`, `availableCountriesCount`, `commentsDisabled` | Status of the video |
| `channelName`, `channelId`, `channelHandle`, `channelUrl`, `channelSubscribers`, `channelVerified` | The channel |
| `thumbnail`, `url`, `videoId`, `input`, `position`, `status` | The largest thumbnail, the link, where the video came from |

A deleted, private or wrong video gives a **free** row with `status: unavailable` and the reason, so you can clean dead links from a list.

#### How it works

1. Add **videos**: `youtube.com/watch?v=...`, `youtu.be/...`, `/shorts/...`, `/live/...` or 11-character IDs. Channels (`@handle`, `/channel/UC...`) and playlists (`?list=...`) work too
2. Run, then download the dataset as CSV, Excel, JSON or HTML. It has two views: **Stats and growth** and **Details**
3. Save it as a task and schedule it to track views over time

| Input | What it does |
|---|---|
| **Videos, Shorts, channels or playlists** | Thousands of videos per run; duplicates are checked once |
| **Videos per channel or playlist** | A channel gives its latest uploads, a playlist its videos from the top (default 20) |
| **Track views over time** | On by default: growth since the last check and the last 30 checks in each row |

#### Why this Actor

| | |
|---|---|
| 📈 **Views tracker over time** | Views, likes and comments gained since the last run, views per day, a 30-point history. Other video scrapers return one snapshot |
| 💬 **Exact comment count** | 2,457,716 comments, not "2.4M" |
| 🏷️ **Everything in one row** | Tags, category, upload time to the second, chapters, unlisted, family-safe, streams and premieres |
| 📊 **Engagement built in** | Like rate, comment rate, engagement rate and views per day, ready to compare videos |
| 🔗 **Any input** | Videos, Shorts, channels and playlists mixed in one list |
| 💰 **$0.63 per 1,000 videos** | The popular all-in-one YouTube scraper charges $4 per 1,000 |

#### Track views over time

1. Add the videos you follow: your uploads, a competitor's new video, a campaign with influencers
2. Save as a task and schedule it hourly or daily
3. Each run adds a point to the video's history; the rows show `viewsChange`, `viewsPerDaySinceLastCheck` and `history`

Add a channel instead of single videos to follow its latest uploads automatically. Send the rows to [Google Sheets](https://apify.com/s_actors/google-sheets-import-export) for a live chart.

#### Pricing

Pay per result, no subscription needed. Apify Scale and Business plans pay less:

| Event | Free and Starter plans | Scale plan | Business plan |
|---|---|---|---|
| Run start | $0.001 | $0.001 | $0.001 |
| Video (one video or Short with all details) | $0.000625 | $0.000489 | $0.000354 |

| Task | Cost |
|---|---|
| Details of 1,000 videos | $0.63 |
| The 50 latest videos of a channel | $0.032 |
| Daily views of 10 videos for a month | ~$0.22 per month |

Unavailable, private and deleted videos are free.

#### Ready-made tasks

Open it, change the videos, and run:

| Task | What you get |
|---|---|
| [YouTube Video Stats Checker: Views, Likes, Comments by Link](https://apify.com/s_actors/youtube-video-details-scraper/examples/youtube-video-stats-checker) | Exact stats of any videos |

#### FAQ

**Why do other tools show "2.4M comments"?** YouTube's page rounds the comment count above 1,000. This Actor reads the exact number from YouTube's Shorts player data, which has it for every video.

**How does the views history work?** The Actor stores each video's views, likes and comments in your Apify account (key-value store `youtube-video-history`) at every run of any task, and compares with the previous point. The first run has no change yet.

**Can it get dislikes?** No. YouTube hid dislikes in 2021 and no longer sends them to anyone.

**Does it download videos?** No, only public data about the videos.

**How fast is it?** About 1.5 videos per second: 100 videos in about a minute, 1,000 in about 11 minutes.

#### Use with the API and AI agents

Run it via the [Apify API](https://docs.apify.com/api/v2) from Python, Node.js or any HTTP client, or connect it to Claude, ChatGPT and other AI agents through the [Apify MCP server](https://mcp.apify.com): "How many views did my last 5 videos get since yesterday, and which one has the best like rate?"

#### Other YouTube tools

| Tool | What it does |
|---|---|
| [YouTube Trending & Charts Scraper](https://apify.com/s_actors/youtube-trending-scraper) | Trending music videos and trailers, top songs, artists, Shorts songs, podcasts by country, chart history |
| [YouTube Thumbnail Downloader](https://apify.com/s_actors/youtube-thumbnail-downloader) | Thumbnails of videos, channels and searches in HD, ZIP, thumbnail change history |
| [YouTube Playlist Scraper](https://apify.com/s_actors/youtube-playlist-scraper) | Every video of playlists to CSV, length at any speed, deleted video finder |
| [YouTube Search Scraper](https://apify.com/s_actors/youtube-search-scraper) | Search results with every filter, newest first, without Shorts |
| [YouTube Channel Scraper](https://apify.com/s_actors/youtube-channel-scraper) | Channel stats, growth history, videos, Shorts and streams |
| [YouTube Channel Email Scraper](https://apify.com/s_actors/youtube-channel-email-scraper) | Public emails, websites and socials of channels, influencer lists by niche |
| [YouTube Shorts Scraper](https://apify.com/s_actors/youtube-shorts-scraper) | Shorts of channels, searches, hashtags and sounds: exact stats, viral score |
| [YouTube Transcript Scraper](https://apify.com/s_actors/youtube-transcript-scraper) | Transcripts and subtitles of videos, channels and playlists: text, SRT, search |
| [YouTube Comments Scraper](https://apify.com/s_actors/youtube-comments-scraper) | Comments and replies of videos, Shorts and channels, only-new monitoring |
| [YouTube SEO & Rank Tracker](https://apify.com/s_actors/youtube-seo-rank-tracker) | Searches a video ranks for, keyword rankings, tags, suggestions |
| [Google Sheets Import & Export](https://apify.com/s_actors/google-sheets-import-export) | Send the results to a Google Sheet |

#### Is it legal?

The Actor reads only public data that YouTube shows to any visitor, without logging in, and does not download videos or personal contact data. Use it for research, analytics and monitoring.

# Actor input Schema

## `videos` (type: `array`):

One per line: video links (youtube.com/watch?v=..., youtu.be/...), Shorts links (/shorts/...), 11-character video IDs, channel links (youtube.com/@handle, /channel/UC...), @handles or playlist links (?list=...). A channel gives its latest uploads, a playlist its videos (see Videos per channel or playlist). Thousands of videos per run are fine.

## `maxVideosPerChannel` (type: `integer`):

For channels: how many of the latest uploads (videos, Shorts and streams, newest first). For playlists: how many videos from the top. Links to single videos are not affected.

## `trackHistory` (type: `boolean`):

Stores views, likes and comments of each video at every run in your account (key-value store youtube-video-history) and adds viewsChange, likesChange, commentsChange, viewsPerDaySinceLastCheck and the last 30 checks (history) to each row. The first run has no change yet.

## `maxConcurrency` (type: `integer`):

How many requests to YouTube run at the same time.

## `proxyConfiguration` (type: `object`):

Video pages load through Apify datacenter proxies (YouTube strips them for cloud IPs), other requests go direct first. The default works for most runs.

## `debugLog` (type: `boolean`):

Log every failed attempt and proxy switch.

## Actor input object example

```json
{
  "videos": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "https://www.youtube.com/watch?v=jNQXAC9IVRw",
    "https://www.youtube.com/watch?v=kJQP7kiw5Fk"
  ],
  "maxVideosPerChannel": 20,
  "trackHistory": true,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debugLog": false
}
```

# Actor output Schema

## `stats` (type: `string`):

Views, likes, comments, engagement, views per day and growth since the last check.

## `details` (type: `string`):

Upload time, duration, category, tags, chapters, status.

## `all` (type: `string`):

Every field of every row, with the views history.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "videos": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        "https://www.youtube.com/watch?v=jNQXAC9IVRw",
        "https://www.youtube.com/watch?v=kJQP7kiw5Fk"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/youtube-video-details-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "videos": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        "https://www.youtube.com/watch?v=jNQXAC9IVRw",
        "https://www.youtube.com/watch?v=kJQP7kiw5Fk",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("s_actors/youtube-video-details-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "videos": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "https://www.youtube.com/watch?v=jNQXAC9IVRw",
    "https://www.youtube.com/watch?v=kJQP7kiw5Fk"
  ]
}' |
apify call s_actors/youtube-video-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,s_actors/youtube-video-details-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5iMU2vb3fdEYgrR5l/builds/1lBSRBEPYxF0mRpJv/openapi.json
