# YouTube Shorts Scraper: Views, Likes, Sounds & Trends (`s_actors/youtube-shorts-scraper`) Actor

Scrape YouTube Shorts from channels, searches, hashtags and sounds: exact views, likes, comments, publish date, duration and the sound used. Viral score, engagement rate and views per day to spot trending Shorts. Only-new mode for scheduled runs. No API key or quota.

- **URL**: https://apify.com/s_actors/youtube-shorts-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 $1.20 / 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.
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 Shorts Scraper: Views, Likes, Sounds & Trends

Scrape **YouTube Shorts** from **channels, search queries, hashtags and sounds** with **exact views, likes and comments**, the exact publish date, duration and the **sound** used. Every Short also gets a **viral score** (views / channel subscribers), **engagement rate** and **views per day**, so trending Shorts stand out at once. Schedule **Only new Shorts** to watch competitors, a niche or a song.

```json
{ "channels": ["@MrBeast"], "hashtags": ["#cooking"], "sounds": ["https://www.youtube.com/source/aykb9pGfTR4/shorts"] }
```

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

#### What you get

One row per Short. Real example, September 2026:

| title | channel | views | likes | comments | engagement % | views/day | viral score | sound | source |
|---|---|---|---|---|---|---|---|---|---|
| Can We Build an Entire Village? | MrBeast | 20,330,061 | 745,961 | 15,234 | 3.74 | 2,103,800 | 0.04 | Original Sound | channel |
| Have you eaten new yam this year❤️ | Chidinma Happiness | 2,043,517 | 26,515 | 324 | 1.31 | 86,933 | **405.46** | Chairman | #cooking (41M videos) |
| Best Friends Forever🥹🤞 | Leah Halton | 21,447,311 | 313,460 | 4,018 | 1.48 | 139,185 | 7.74 | Copines | sound (4.3M Shorts) |

A viral score of 405 means the Short got 405 times more views than its channel has subscribers: the algorithm pushed it far beyond the channel's audience.

| Field | Description |
|---|---|
| `views`, `likes`, `comments` | Exact numbers, not "1.2M" |
| `engagementRate` | (likes + comments) / views, in % |
| `viewsPerDay` | Views divided by days since publishing: how fast the Short is growing |
| `viralScore` | Views / channel subscribers; above 1 = reached beyond the channel's audience |
| `publishedAt`, `ageDays` | Exact publish time (ISO) and age in days |
| `durationSeconds`, `category` | Length and YouTube category |
| `soundTitle`, `soundUrl`, `isOriginalSound` | The sound or song of the Short and its page (all Shorts using it) |
| `title`, `description`, `hashtags`, `keywords` | Texts and tags |
| `channelName`, `channelHandle`, `channelId`, `channelUrl`, `channelSubscribers` | The channel |
| `url`, `shortId`, `thumbnail` | The Short and its vertical thumbnail |
| `sourceType`, `source`, `sourceTotal`, `position` | Where it was found; `sourceTotal` = videos using the hashtag or Shorts using the sound |

#### How it works

1. Add any mix of sources: **Channels** (`@handle`, channel links), **Search queries**, **Hashtags**, **Sounds** (a sound page or any Short that uses the sound) and single **Shorts URLs**
2. Set **Max Shorts per source** and, if you like, filters: **Newer than**, **Minimum views**, **Search upload date**
3. Run, then download as JSON, CSV or Excel, or call it as an API

| Input | What it does |
|---|---|
| **Channel Shorts order** | Newest, most popular or oldest first, as on the channel's Shorts tab |
| **Search order** | Relevance or most viewed first |
| **Search upload date** | Last hour, today, this week, this month, this year |
| **Newer than** | `7 days`, `24 hours` or a date, for every source; checked on the exact publish date |
| **Minimum views** | Only Shorts above a view count; the rest are free |
| **Channel subscribers and viral score** | On by default |
| **Only new Shorts** | Monitoring: each scheduled run returns only Shorts not seen before |

#### Why this Actor

| | |
|---|---|
| 🎵 **Sounds and songs** | Every Short's sound, plus all Shorts using a sound and how many there are: follow a song's trend |
| 🚀 **Viral score and views per day** | Find Shorts that outperform their channel and those growing fastest right now |
| 🔢 **Exact numbers** | Exact views, likes and comments, exact publish date and duration for every Short |
| 🧭 **Five sources in one run** | Channels, searches, hashtags, sounds and links together, one table |
| 🔔 **Only new Shorts** | New uploads of competitors, new Shorts in a niche or on a sound, on a schedule |
| 💰 **$1.50 per 1,000 Shorts** | Filtered-out Shorts are free; the most used Shorts scraper charges $4 per 1,000 on the free plan |

#### Only new Shorts: monitor channels, niches and sounds

1. Add competitor channels, a search, a hashtag or a sound, switch on **Only new Shorts**, give the task a **Monitor name**
2. Save as a task and add a schedule, e.g. every morning
3. **First run** returns the Shorts (up to **Max Shorts per source**) and remembers everything it listed. **Every later run** returns only Shorts that were not there before. An empty result means nothing new

Send new Shorts to Slack, email or [Google Sheets](https://apify.com/s_actors/google-sheets-import-export) with an integration.

#### 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 |
| Short (one row with all fields) | $0.0015 | $0.00135 | $0.0012 |

| Task | Cost |
|---|---|
| 10 Shorts of a channel | $0.016 |
| 1,000 Shorts of a hashtag | ~$1.50 |
| New Shorts of 10 competitor channels, daily for a month (~1 new Short a day each) | ~$0.48 per month |

Shorts skipped by **Newer than**, **Minimum views** or the upload date filter are not charged.

#### Ready-made tasks

Open it, change the channels, keywords, hashtags or sounds, and run:

| Task | What you get |
|---|---|
| [Scrape All Shorts of a YouTube Channel](https://apify.com/s_actors/youtube-shorts-scraper/examples/youtube-channel-shorts) | A channel's Shorts with exact stats |

#### FAQ

**How exact are the numbers?** Views, likes and comments are the exact counters YouTube has for the Short at the moment of the run, not the rounded "1.2M" of the page. Subscribers are rounded by YouTube ("518M").

**Why do some Shorts have no viral score?** The channel hides its subscriber count, or **Channel subscribers and viral score** is off.

**Do the search filters really work?** Yes. YouTube's website often answers "No results" for Shorts + most viewed or + an upload date; the Actor searches the way the YouTube app does, where the filters work, and also checks each Short's exact publish date.

**Can it download the videos?** No, it returns data and thumbnails, not video files.

**How many Shorts can I get?** A channel: all its Shorts. A search, hashtag or sound: as many as YouTube lists, usually several hundred.

#### 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): "Find this week's most viewed Shorts about air fryer recipes and tell me which hooks they use."

#### 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 Video Details Scraper](https://apify.com/s_actors/youtube-video-details-scraper) | Full details and exact stats of any videos, views tracker over time |
| [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. Use it for research, analytics and monitoring, and respect the creators' rights when you republish content.

# Actor input Schema

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

One per line: channel links (youtube.com/@handle, /channel/UC...), @handles or channel IDs. Returns the channel's Shorts (see Channel Shorts order).

## `searchQueries` (type: `array`):

Keywords to search on YouTube with the Shorts filter, e.g. cooking hacks, iphone 17 review. One per line.

## `hashtags` (type: `array`):

Hashtags without spaces, with or without #: #cooking, fitness, or youtube.com/hashtag/... links. Returns the Shorts of the hashtag page and the number of videos using it (sourceTotal).

## `sounds` (type: `array`):

Shorts that use a sound or song: a sound page link (youtube.com/source/.../shorts) or the link of any Short that uses it. Returns those Shorts and how many Shorts use the sound (sourceTotal).

## `shorts` (type: `array`):

Individual Shorts to check: youtube.com/shorts/... links or 11-character IDs. One row each with exact views, likes and comments.

## `maxShortsPerSource` (type: `integer`):

How many Shorts to return from each channel, search, hashtag or sound. A channel's Shorts tab lists all its Shorts; searches and hashtag pages usually end after a few hundred.

## `channelSort` (type: `string`):

Order of a channel's Shorts, as on its Shorts tab. Most popular = the channel's most viewed Shorts.

## `searchSort` (type: `string`):

Order of search results: relevance as on YouTube, or the most viewed Shorts first (best with Search upload date, e.g. the most viewed Shorts of this week).

## `uploadDate` (type: `string`):

Only Shorts uploaded in this period, for search queries. Checked on each Short's exact publish date.

## `newerThan` (type: `string`):

For all sources: only Shorts published in this period, e.g. 24 hours, 7 days, 2 weeks, 1 month, or a date like 2026-09-01. On a channel with Newest first the scan stops at the first older Short.

## `minViews` (type: `integer`):

Only Shorts with at least this many views, e.g. 100000 for viral Shorts. Skipped Shorts are free.

## `includeChannelStats` (type: `boolean`):

Add the channel's subscriber count and viralScore = views / subscribers (above 1: the Short reached more people than the channel has subscribers). One extra request per channel, no extra charge.

## `country` (type: `string`):

Two-letter country for searches and hashtag pages (us, gb, de, in...): YouTube shows different Shorts per country.

## `onlyNew` (type: `boolean`):

For scheduled runs (save the input as a task and add a schedule). The first run returns the Shorts and remembers everything it listed; every later run returns only Shorts that were not there before: new uploads of a channel, new Shorts in a search, hashtag or sound. An empty result means nothing new.

## `monitorName` (type: `string`):

Name of the memory used by Only new Shorts. Use a different name for each task, otherwise two tasks share what they have already seen.

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

How many requests to YouTube run at the same time.

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

Requests go direct first and switch to Apify datacenter proxies when YouTube refuses them. The default works for most runs.

## Actor input object example

```json
{
  "channels": [
    "@MrBeast"
  ],
  "maxShortsPerSource": 10,
  "channelSort": "newest",
  "searchSort": "relevance",
  "uploadDate": "any",
  "includeChannelStats": true,
  "country": "us",
  "onlyNew": false,
  "monitorName": "default",
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `shorts` (type: `string`):

Title, views, likes, comments, engagement, views per day, viral score, date, channel and sound.

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

Every field of every row.

# 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": [
        "@MrBeast"
    ],
    "maxShortsPerSource": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/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": ["@MrBeast"],
    "maxShortsPerSource": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/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": [
    "@MrBeast"
  ],
  "maxShortsPerSource": 10
}' |
apify call s_actors/youtube-shorts-scraper --silent --output-dataset

```

## MCP server setup

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