# Youtube Shorts Scraper Max (`alpha-scraper/youtube-shorts-scraper-max`) Actor

Extract detailed metadata of YouTube Shorts from public channel pages: titles, views, likes, comments, tags, hashtags, music, duration, publish date, media formats and channel stats. No login or API key needed.

- **URL**: https://apify.com/alpha-scraper/youtube-shorts-scraper-max.md
- **Developed by:** [Alpha Scraper](https://apify.com/alpha-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 Max

**YouTube Shorts Scraper Max** is an Apify Actor that extracts detailed data from the Shorts of public YouTube channels. Add channels by URL, handle or channel ID, choose how many Shorts you want, and get one structured record per Short with titles, views, likes, comments, hashtags, music, duration, publish date and channel statistics.

Social media managers, analysts, agencies and developers use YouTube Shorts Scraper Max to study short-form video on YouTube. No login, cookies or YouTube API key are needed, and only public YouTube data is collected.

> **📌 YouTube Shorts Scraper Max at a glance**
>
> - **Input:** YouTube channel URLs, handles or IDs, plus optional links to individual Shorts
> - **Output:** one dataset item per YouTube Short, newest first
> - **Filters:** minimum views, length range and publish-date range
> - **Export:** JSON, CSV, Excel, HTML or the Apify API

### 🔹 YouTube Shorts Scraper Max Key Features

YouTube Shorts Scraper Max opens each channel's Shorts tab and keeps loading pages until your limit is reached:

- **Three ways to add channels:** YouTube channel URLs, channel handles such as `@MrBeast`, or 24-character channel IDs.
- **Individual Shorts:** scrape particular YouTube Shorts by link, alone or together with channels.
- **Full details per Short:** exact views and likes, description, tags, hashtags, publish date, duration, music, comments and media formats.
- **Channel statistics:** YouTube subscribers, total views, video count, country and join date on every record.
- **Filters:** minimum views, minimum and maximum length, and a publish-date range.
- **No duplicates:** a YouTube Short is never returned twice, even if several inputs lead to it.

> **✅ Why use YouTube Shorts Scraper Max**
>
> - One YouTube Shorts Scraper Max run covers many YouTube channels and returns a consistent record for every Short
> - Skipped YouTube Shorts never count toward your limit, so filters do not shrink your results
> - Public YouTube data only, with no account or API key to manage

### 📦 What Data You Can Extract with YouTube Shorts Scraper Max

Each record describes one YouTube Short. YouTube Shorts Scraper Max organizes the data into groups:

- **Identity and links:** ID, title, Short URL, watch link, share link, embed link and thumbnails
- **Text:** description, links in the description, mentions, hashtags and tags
- **Statistics:** views, likes, estimated dislikes and comment count
- **Engagement:** engagement rate, likes per view, views per day, views per hour and likes per day
- **Timing:** publish date, age in days, and length in seconds, clock format and ISO format
- **Channel:** YouTube channel name, handle, ID, subscribers, total views, video count, country, join date and verified badge
- **Sound:** YouTube sound or song title, artist, original-sound flag, number of Shorts using the sound and its page link
- **Media:** resolution, frame rate, aspect ratio, orientation and the list of available formats
- **Comments:** top comments with author, likes and a few replies
- **Context:** category, status, related Shorts and run information

Every YouTube Shorts Scraper Max record follows the same structure, which makes the data easy to compare across channels.

### 🚀 How to Use YouTube Shorts Scraper Max

Follow these steps to run YouTube Shorts Scraper Max in Apify Console:

- Open the Actor and go to the **Input** tab.
- Add YouTube channels under **Start URLs**, **Channel handles** or **Channel IDs**.
- Set **Max shorts per channel** and any views, length or date filters.
- Optionally add links to particular Shorts under **Individual Shorts URLs**.
- Click **Start**, then open the **Output** tab to view or export the YouTube Shorts data.

You can also run YouTube Shorts Scraper Max from the Apify API, on a schedule, or through Apify integrations.

### 🔎 How to Scrape YouTube Shorts From a Channel

Paste a YouTube channel link such as `https://www.youtube.com/@KVNPRODUCTIONSOFFICIAL`. YouTube Shorts Scraper Max routes a channel URL without a tab to that channel's Shorts tab and collects Shorts newest first.

YouTube delivers 48 Shorts per page, so a higher limit means more pages. YouTube Shorts Scraper Max stops when the limit is reached or the channel has no more Shorts, and it never returns the same Short twice.

### 🔗 Can You Use YouTube Shorts Scraper Max With Individual Shorts Links?

Yes. Add links such as `https://www.youtube.com/shorts/VIDEO_ID` or share links with `?si=` to **Individual Shorts URLs**. Each one returns the same complete record as a Short found on a channel, including channel details.

YouTube Shorts Scraper Max processes individual Shorts first. The filters apply to them, but **Max shorts per channel** does not limit them. Links to regular videos and to unavailable Shorts are skipped.

### 🎯 How YouTube Shorts Scraper Max Filters Work

Filters let YouTube Shorts Scraper Max return only the Shorts that matter to you:

- **Minimum views:** uses the exact view count at scraping time. Shorts below it are skipped and do not count toward the limit.
- **Length range:** enter minutes, seconds or both. A Short of exactly the limit is kept.
- **Date range:** pick a date or type an age such as `2 weeks`. Dates are in UTC.

YouTube channels list Shorts newest first, so a recent start date keeps the run short. To collect every Short since a date, raise **Max shorts per channel**. If the minimum length is longer than the maximum, or the end date is not later than the start date, the run stops with an input error.

### 🧩 YouTube Shorts Scraper Max Use Cases

- **Competitor analysis:** use YouTube Shorts Scraper Max to compare views, likes and posting rhythm across YouTube channels.
- **Content research:** use YouTube Shorts Scraper Max to find which hashtags, tags and sounds popular YouTube Shorts use.
- **Influencer vetting:** YouTube Shorts Scraper Max shows engagement rates and channel statistics before a partnership.
- **Trend tracking:** filter by date and views to spot rising YouTube Shorts.
- **Reporting:** export clean YouTube Shorts Scraper Max data to spreadsheets or dashboards.
- **Automation:** schedule YouTube Shorts Scraper Max to refresh data every week.

### ⚙️ Input

Open the **Input** tab and fill in the fields below. YouTube Shorts Scraper Max needs at least one channel or one Short link.

| Field | What it does |
|---|---|
| `startUrls` | YouTube channel URLs: `@handle`, `/channel/UC…`, `/c/name` or `/user/name`. Other tabs and search pages are not supported. |
| `usernames` | YouTube channel handles, with or without `@`. |
| `channelIds` | 24-character YouTube channel IDs starting with `UC`. Invalid IDs are rejected before the run starts. |
| `maxshorts` | YouTube Shorts to collect per channel, from 1 to 4,800 (default 20). |
| `individualShortsUrls` | Links to particular YouTube Shorts. |
| `minViews` | Minimum exact YouTube view count. `0` switches the filter off. |
| `minDuration` / `maxDuration` | Length limits in minutes and seconds. `0` means no limit. |
| `newerThan` / `olderThan` | Publish-date range in UTC. Use `YYYY-MM-DD` or an age such as `1 month`. |

A channel that appears more than once is scraped only once.

**Example input:**

```json
{
  "startUrls": [{ "url": "https://www.youtube.com/@KVNPRODUCTIONSOFFICIAL" }],
  "usernames": ["@MrBeast"],
  "maxshorts": 20,
  "individualShortsUrls": [{ "url": "https://www.youtube.com/shorts/LjLLzh3EH9o" }],
  "minViews": 10000,
  "minDuration": { "minutes": 0, "seconds": 15 },
  "maxDuration": { "minutes": 1, "seconds": 0 },
  "newerThan": "2026-01-01",
  "olderThan": "2026-10-01"
}
```

**Advanced options (JSON or API input only):** `scrapeDetails` (default `true`; `false` returns a much faster list with rounded view counts), `maxComments` (default 20) and `maxReplies` (default 5).

### 📤 Output

YouTube Shorts Scraper Max writes one item per Short to the default dataset: individual Shorts first, then each YouTube channel's Shorts newest first. The Output tab offers table views for overview, video details, statistics, channel and sound.

The table explains the key YouTube Shorts Scraper Max output fields:

| Field | Meaning |
|---|---|
| `stats.viewCount` | Exact view count at scraping time |
| `stats.dislikeCount` | Estimated dislikes |
| `engagement.engagementRate` | Likes plus comments, divided by views |
| `publication.publishedAt` | Publish time in UTC |
| `duration.seconds` | Length in seconds |
| `audio.shortsUsingSoundCount` | How many Shorts use the same sound |
| `channel.subscribers` | Subscribers of the YouTube channel |
| `comments.items` | Top comments, each with author, likes and replies |

**Example output (shortened):**

```json
{
  "id": "x7Fq2LmN9aB",
  "type": "shorts",
  "isShort": true,
  "source": "youtube",
  "title": "5 phone tricks you didn't know #shorts",
  "description": "Quick tips to get more from your phone. #shorts #tech",
  "hashtags": ["#shorts", "#tech"],
  "tags": ["phone tips", "tech"],
  "url": "https://www.youtube.com/shorts/x7Fq2LmN9aB",
  "duration": { "seconds": 34, "text": "0:34", "iso8601": "PT34S" },
  "publication": { "publishedAt": "2026-09-12T14:05:00Z", "uploadDate": "2026-09-12", "daysSincePublished": 41 },
  "category": { "id": "28", "name": "Science & Technology" },
  "stats": { "viewCount": 1284503, "viewCountShortText": "1.3M views", "likeCount": 61240, "dislikeCount": 1930, "commentCount": 842 },
  "engagement": { "engagementRate": 0.04833, "likeToViewRatio": 0.047676, "viewsPerDay": 30723.1 },
  "channel": {
    "id": "UCaB3dE5fG7hI9jK1lM3nO5p",
    "name": "Daily Tech Bites",
    "handle": "@dailytechbites",
    "subscribers": 482000,
    "totalViews": 91234567,
    "videoCount": 412,
    "country": "United States",
    "joinedDate": "2019-03-14",
    "isVerified": false
  },
  "audio": { "isOriginalSound": true, "title": "Original sound - Daily Tech Bites", "shortsUsingSoundCount": 3 },
  "media": { "resolutionLabel": "1080p", "aspectRatio": "9:16", "orientation": "portrait", "fps": 30 },
  "comments": {
    "totalCount": 842,
    "scrapedCount": 1,
    "sortBy": "top",
    "items": [{ "type": "comment", "text": "Number 3 is gold!", "likeCount": 120, "replyCount": 0, "replies": [] }]
  },
  "scrape": { "scrapedAt": "2026-10-24T09:30:00Z", "inputMode": "channel", "order": 1, "detailsFetched": true }
}
```

Empty values are left out of each YouTube Shorts record. Dislikes are estimates, and the sound details appear when YouTube provides them. A `RUN_SUMMARY` record in the key-value store lists, for each channel, how many Shorts were scanned, returned and skipped.

### 💰 Pricing

> **💳 How billing works**
>
> - YouTube Shorts Scraper Max is billed per result: every YouTube Short delivered to the dataset is one result.
> - The current rate is shown on the Actor's **Pricing** tab on Apify Store.
> - Set a maximum cost per run in the run options to cap spending.

Try a small first run with the default 20 Shorts to see what YouTube Shorts Scraper Max returns before you scale up.

### 💡 Tips and Good Practices

- Start YouTube Shorts Scraper Max with a low **Max shorts per channel** to preview the output.
- Use a YouTube channel URL, a `/shorts` URL, a handle or an ID. Videos, Live and Playlists tabs are not supported.
- Full details need extra requests per Short, so a run takes roughly 1–2 seconds per Short in tests.
- YouTube Shorts Scraper Max looks up each Short when filters need exact views, length or date, so narrow filters make runs slower.
- Only public YouTube data is collected. Transcripts and direct download links are not available.

### 🙋 Frequently Asked Questions

#### 🔸 What data does YouTube Shorts Scraper Max extract from each Short?

Each YouTube Shorts Scraper Max record includes title, description, hashtags, tags, views, likes, comments, duration, publish date, category, sound, media formats and YouTube channel statistics.

#### 🔸 Can YouTube Shorts Scraper Max scrape any public YouTube channel?

Yes. YouTube Shorts Scraper Max works with public YouTube channels given as URLs, handles or channel IDs. Channels that cannot be found or loaded are skipped with a warning.

#### 🔸 How many Shorts can YouTube Shorts Scraper Max scrape per channel?

Up to 4,800 per channel, newest first. YouTube delivers 48 Shorts per page, so a channel is read page by page.

#### 🔸 Can YouTube Shorts Scraper Max filter YouTube Shorts by views, length or date?

Yes. Set a minimum view count, a length range and a publish-date range. Skipped Shorts do not count toward your limit.

#### 🔸 Can YouTube Shorts Scraper Max scrape a single YouTube Short?

Yes. Add its YouTube link to **Individual Shorts URLs** and you get the full record, including channel details.

#### 🔸 Does YouTube Shorts Scraper Max need a YouTube login or API key?

No. It collects public YouTube data without a login, cookies or API key.

#### 🔸 Does YouTube Shorts Scraper Max return comments?

Yes. By default each record holds up to 20 top comments with up to 5 replies each. Comments turned off by the creator are marked as disabled.

#### 🔸 Can I download YouTube Shorts videos or transcripts?

No. YouTube Shorts Scraper Max returns metadata and media format details, but not transcripts or direct download links.

### 📬 Support

- Found a bug or need a feature in YouTube Shorts Scraper Max? Open an issue from the Actor page on Apify.
- Share a sample input with your question so the problem can be reproduced quickly.
- Contact me by email: alphascraper69@gmail.com

# Actor input Schema

## `startUrls` (type: `array`):

One or more YouTube **channel** URLs. Accepted formats: `https://www.youtube.com/@handle`, `https://www.youtube.com/@handle/shorts`, `https://www.youtube.com/channel/UC…`, `https://www.youtube.com/c/name` and `https://www.youtube.com/user/name`. A channel URL without a tab is routed to that channel's Shorts tab. Other tabs (Videos, Live, Playlists) and search pages are not supported. Plain @handles go into 'Channel handles' and bare channel IDs into 'Channel IDs' below, and particular Shorts into 'Individual Shorts URLs'. Leave this list empty if you only use those.

## `usernames` (type: `array`):

Channels to scrape by their handle, one per row, with or without the @, for example `MrBeast` or `@MrBeast`. Each handle is opened as `https://www.youtube.com/@handle` and its Shorts are scraped just like a channel URL. This works alongside Start URLs and Channel IDs, and a channel that appears more than once is scraped only once.

## `channelIds` (type: `array`):

Channels to scrape by their ID, one per row. A channel ID is 24 characters long and starts with UC, for example `UCX6OQ3DkcsbYNE6H8uQQuVA`; YouTube shows it under a channel's About → Share channel → Copy channel ID. Each ID is opened as `https://www.youtube.com/channel/ID` and its Shorts are scraped just like a channel URL. IDs that do not match this format are rejected before the run starts.

## `maxshorts` (type: `integer`):

Maximum number of Shorts to collect from **each** channel, newest first. YouTube delivers 48 Shorts per page, so a higher limit means more pages and more requests. The Actor stops earlier when a channel has fewer Shorts than this, or when 'Max pages per channel' is reached.

## `individualShortsUrls` (type: `array`):

Links to the specific Shorts you want, one per row, for example `https://www.youtube.com/shorts/VIDEO_ID` or a share link such as `https://youtube.com/shorts/VIDEO_ID?si=…`. Each one returns the same complete record as a Short found on a channel, including its channel details. Use this instead of channel URLs or together with them. The filters below apply to these Shorts as well, 'Max shorts per channel' does not limit them, and a Short that is also found on one of your channels is returned only once.

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

Only return Shorts that have at least this many views (the exact count at scraping time). Shorts below it are skipped and do not count towards 'Max shorts per channel', so the Actor keeps going further down the channel until enough Shorts qualify or the channel runs out; a built-in page limit stops endless scanning. Set 0 to switch the filter off.

## `minDuration` (type: `object`):

Skip Shorts shorter than this. Fill in minutes, seconds or both: for example 1 minute and 30 seconds, or just 90 seconds (more than 59 seconds is fine). A Short of exactly this length is kept. Leave both boxes at 0 for no minimum.

## `maxDuration` (type: `object`):

Skip Shorts longer than this. Fill in minutes, seconds or both: for example 1 minute, or just 60 seconds. A Short of exactly this length is kept. Leave both boxes at 0 for no maximum.

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

Only return Shorts published on or after this date. Pick a date (YYYY-MM-DD) or type a relative age such as '2 weeks' or '3 months', which means that long ago. Dates are in UTC. Leave empty for no limit. Channels list their Shorts newest first, so a recent date keeps the run short. 'Max shorts per channel' still applies, so raise it to collect every Short published since the date.

## `olderThan` (type: `string`):

Only return Shorts published before this date. Pick a date (YYYY-MM-DD) or type a relative age such as '1 month', which means that long ago. Dates are in UTC. Combine it with 'Newer than' for a date range, in which case this date must be later than the 'Newer than' date. Leave empty for no limit.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.youtube.com/@MrBeast/shorts"
    }
  ],
  "maxshorts": 20,
  "individualShortsUrls": [
    {
      "url": "https://www.youtube.com/shorts/LjLLzh3EH9o"
    }
  ],
  "minViews": 0,
  "minDuration": {
    "minutes": 0,
    "seconds": 0
  },
  "maxDuration": {
    "minutes": 0,
    "seconds": 0
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrls": [
        {
            "url": "https://www.youtube.com/@KVNPRODUCTIONSOFFICIAL"
        },
        {
            "url": "https://www.youtube.com/@BMWNOLIMITM5/shorts"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("alpha-scraper/youtube-shorts-scraper-max").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 = { "startUrls": [
        { "url": "https://www.youtube.com/@KVNPRODUCTIONSOFFICIAL" },
        { "url": "https://www.youtube.com/@BMWNOLIMITM5/shorts" },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("alpha-scraper/youtube-shorts-scraper-max").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 '{
  "startUrls": [
    {
      "url": "https://www.youtube.com/@KVNPRODUCTIONSOFFICIAL"
    },
    {
      "url": "https://www.youtube.com/@BMWNOLIMITM5/shorts"
    }
  ]
}' |
apify call alpha-scraper/youtube-shorts-scraper-max --silent --output-dataset

```

## MCP server setup

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

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/oBwdY9P1wS0XhXtL1/builds/Y7T4g6nwyu40zCbl3/openapi.json
