# YouTube Shorts Scraper (`piotrv1001/youtube-shorts-scraper`) Actor

Scrape every YouTube Short of any channel with exact views, exact likes, comment count, publish date, title, description and hashtags, plus channel name and subscribers. Paste channel URLs, @handles or IDs and export to JSON, CSV or Excel for Shorts analytics.

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

## Pricing

from $1.00 / 1,000 shorts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Shorts Scraper: Views, Likes and Publish Dates

Scrape **every YouTube Short of any channel** with its **exact view count, exact like count, comment count, publish date, title, description and hashtags**. The **YouTube Shorts Scraper** takes channel URLs, @handles or channel IDs in bulk and returns one row per Short, newest first, with the channel's name, handle and subscriber count on every row. Use it for YouTube Shorts analytics, competitor research or as a simple YouTube Shorts API.

### 🎯 Use Cases

- **YouTube Shorts analytics**: see which Shorts of a channel got the most views and likes, and how fast it posts.
- **Track YouTube Shorts views**: schedule a daily run and watch views and likes grow on new Shorts.
- **Find trending YouTube Shorts in a niche**: scrape the Shorts of the top channels in your niche and sort by views or likes per day.
- **Competitor and creator research**: compare Shorts output and engagement across creators before a campaign.
- **Content ideas**: collect titles, descriptions and hashtags of the best-performing Shorts.

### ✨ Features

- **Exact numbers**: views and likes as exact counts (87,257,476, not "87M").
- **Publish date**: the calendar date each Short went live, plus the relative time ("5 days ago").
- **Comment count** as YouTube shows it, with the original text.
- **Title, description and hashtags** of every Short.
- **Channel data on every row**: name, @handle, ID, URL, subscriber count and verified badge.
- **Full channel depth**: pages through the whole Shorts tab until the channel runs out, or until your limit.
- **Any channel format**: `youtube.com/@handle`, `/channel/UC…`, `/c/…`, `/user/…`, a bare `@handle` or a channel ID.
- **No duplicates**: a channel entered twice (handle and ID) is scraped and charged once.

### 🛠️ How It Works

1. **Paste channels**: URLs, @handles or channel IDs, one per line.
2. **Set Max Shorts per channel**: the default is the 50 newest Shorts.
3. **Run the scraper** and download the Shorts as JSON, CSV or Excel, or pull them through the API.

### ⚙️ Input

| Field                      | What it does                                                         |
| -------------------------- | -------------------------------------------------------------------- |
| **Channels**               | Channel URLs, @handles or channel IDs (UC…), one per line.           |
| **Max Shorts per channel** | Stop after this many Shorts for each channel (newest first). Default 50. |

```json
{
    "channels": ["https://www.youtube.com/@MrBeast", "@markrober", "@KhabyLame"],
    "maxItems": 200
}
```

### 💰 Pricing

Pay only for the Shorts you get. No monthly rental.

| Event           | Price                                | What you get                                                    |
| --------------- | ------------------------------------ | --------------------------------------------------------------- |
| **Short**       | $0.001 per Short ($1.00 per 1,000)   | One Short with exact views, likes, comment count and publish date |
| **Actor start** | $0.00005 per run                     | Charged once when the run starts.                               |

Examples: 50 Shorts from one channel = $0.05 · 10 channels × 100 Shorts = $1.00.

### 📊 Sample Output Data

```json
{
    "videoId": "eXv6fWonvUM",
    "url": "https://www.youtube.com/shorts/eXv6fWonvUM",
    "title": "Can You Scientifically Measure Fun?",
    "description": "Watch The Cat in the Hat, in theaters starting November 6th #wbpartner",
    "viewCount": 125075,
    "likeCount": 6087,
    "commentCount": 114,
    "commentCountText": "114",
    "publishDate": "2026-10-21",
    "publishedTimeText": "4 hours ago",
    "hashtags": ["#wbpartner"],
    "thumbnailUrl": "https://i.ytimg.com/vi/eXv6fWonvUM/frame0.jpg",
    "channelId": "UCY1kMZp36IQSyNx_9h4mpCg",
    "channelName": "Mark Rober",
    "channelHandle": "@MarkRober",
    "channelUrl": "https://www.youtube.com/channel/UCY1kMZp36IQSyNx_9h4mpCg",
    "channelSubscriberCount": 84300000,
    "channelIsVerified": true,
    "collaborators": [],
    "scrapedAt": "2026-10-21T17:26:32.263Z"
}
```

`viewCount` and `likeCount` are exact. `commentCount` is the number YouTube shows next to the comments, rounded above 1,000 (10K); `commentCountText` keeps the original. `channelSubscriberCount` is the rounded figure from the channel page. On collab Shorts `collaborators` lists every channel.

### 🔁 Schedule and Integrate

For Shorts tracking, run it **once a day** with the same channels and a small limit (for example the 20 newest Shorts): every run is a dated snapshot of views and likes. Set it up in Apify **Schedules**. Send the results to **Google Sheets**, **Zapier**, **Make**, **n8n** or a webhook with Apify **integrations**.

### 🤖 Use with AI Agents (MCP)

This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (`https://mcp.apify.com`). An agent can call it with:

```json
{ "channels": ["@MrBeast"], "maxItems": 20 }
```

### ❓ FAQ

**Is there an official YouTube Shorts API?** The YouTube Data API treats Shorts as regular videos: it can't list a channel's Shorts tab, and it needs an API key and a daily quota. This Actor needs no key and returns each channel's Shorts with views, likes and dates.

**How many Shorts can I get per channel?** All the Shorts the channel's Shorts tab lists. In our tests that was 90 to 353 per channel; set **Max Shorts per channel** high to get them all.

**Why is the like count empty for some Shorts?** The creator hid the like count. Those Shorts have `likeCount: null`.

**Why is the description empty?** Many Shorts have no description. Hashtags then come from the title.

**Does it give the Short's length?** No. YouTube doesn't show the duration on Shorts. Use the [YouTube Video Details Scraper](https://apify.com/piotrv1001/youtube-video-details-scraper) on the Short URLs if you need it.

**Do I need a YouTube account?** No.

### 🔗 Related Scrapers

- [YouTube Channel Videos Scraper](https://apify.com/piotrv1001/youtube-channel-videos-scraper): every long-form video or stream of a channel, sorted by latest, popular or oldest.
- [YouTube Channel Info Scraper](https://apify.com/piotrv1001/youtube-channel-info-scraper): subscriber count, total views, country and links for each channel.
- [YouTube Video Details Scraper](https://apify.com/piotrv1001/youtube-video-details-scraper): duration, tags, chapters and exact likes for any list of videos or Shorts.
- [YouTube Comments Scraper](https://apify.com/piotrv1001/youtube-comments-scraper): comments and replies from any video or Short.
- [YouTube Transcript Scraper](https://apify.com/piotrv1001/youtube-transcript-scraper): the spoken text of each video with timestamps.

# Actor input Schema

## `channels` (type: `array`):

Channel URLs, @handles or channel IDs (UC…), one per line.

## `maxItems` (type: `integer`):

Stop after this many Shorts for each channel. The newest come first.

## Actor input object example

```json
{
  "channels": [
    "https://www.youtube.com/@MrBeast"
  ],
  "maxItems": 50
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "channels": [
        "https://www.youtube.com/@MrBeast"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/youtube-shorts-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 = {
    "channels": ["https://www.youtube.com/@MrBeast"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/youtube-shorts-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 '{
  "channels": [
    "https://www.youtube.com/@MrBeast"
  ],
  "maxItems": 50
}' |
apify call piotrv1001/youtube-shorts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/youtube-shorts-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/pQibiSfsq2nmbecJU/builds/xEVB9x2a1lrOY2esJ/openapi.json
