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

Shorts from any YouTube channel, newest, most popular, or oldest first, with exact views, likes, and publish dates. Set a date limit to get only new Shorts. No login.

- **URL**: https://apify.com/sedgelabs/youtube-shorts-scraper.md
- **Developed by:** [Sedge Labs](https://apify.com/sedgelabs) (community)
- **Categories:** Videos, Social media
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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

Get the Shorts from any YouTube channel, sorted by latest, most popular or oldest, with exact views,
likes and publish dates. No login and no API key.

### What you get

One row per Short:

- title, URL, video ID
- channel name, ID and handle
- exact views and likes, publish date and time, length in seconds
- full description, keywords, category, thumbnail

The channel's Shorts tab only shows a title and rounded views ("1.4M views"). The actor opens each
Short for the rest. Turn **Exact details** off if the title and rounded views are enough; that skips
the details charge.

### Only new Shorts

Set **Shorts from** to a date (`2026-01-31`) or an age (`30 days`) with sort set to Latest. The run
stops at the first older Short, so you pay only for the ones in the window. Run it on a schedule to
track channels.

### Input example

```json
{
  "channels": ["@MrBeast", "https://www.youtube.com/channel/UCBR8-60-B28hp2BmDPdntcQ"],
  "maxShortsPerChannel": 50,
  "sortBy": "latest",
  "oldestDate": "30 days"
}
```

Channels can be handles, channel URLs or channel IDs.

### Output example

```json
{
  "input": "@MrBeast",
  "rank": 1,
  "type": "short",
  "videoId": "mND4T0lzg_g",
  "url": "https://www.youtube.com/shorts/mND4T0lzg_g",
  "title": "How People Treat You Based on Subscribers",
  "channelName": "MrBeast",
  "channelHandle": "@MrBeast",
  "viewCount": 24789372,
  "viewCountText": "24M views",
  "likeCount": 744342,
  "durationSeconds": 30,
  "publishedAt": "2026-10-23T11:00:08-07:00",
  "category": "Entertainment",
  "hasExactDetails": true
}
```

The full row has more fields; see the Output tab.

### Pricing

$1.00 per 1,000 Shorts, plus $1.00 per 1,000 Shorts for exact details (on by default). Apify's
platform usage and proxies are included. Channels that don't exist or have no Shorts tab cost
nothing.

YouTube declines the exact details for a few Shorts in every hundred. Those rows still arrive with
the title and rounded views, and their details charge is not applied. With a date limit, a Short
that can't be dated goes by the next dated Short after it: if that one is inside the limit, it is
kept; if not, it is left out and named in `RUN_SUMMARY`.

### Why did a channel stop where it did?

Each channel gets one plain sentence in `RUN_SUMMARY`:

- "50 Shorts for @MrBeast: stopped at your limit of 50."
- "5 Shorts for @MrBeast: stopped at the first one older than your date limit."
- "@somechannel: This channel has no Shorts tab."

### FAQ

#### Do I need a YouTube account or proxies?

No. It reads public Shorts logged out and uses Apify's proxy by default.

#### Can I get Shorts by keyword instead of by channel?

Use [YouTube Search Scraper](https://apify.com/sedgelabs/youtube-search-scraper) with type set to
Shorts only.

#### Can I use it through the API, Make, Zapier or n8n?

Yes, like any Apify actor. Call it with your API token and read the dataset when the run finishes.

#### Is scraping YouTube Shorts legal?

The actor collects only public information, logged out. You are responsible for how you use it.
If you're unsure, ask a lawyer. Don't use the data for spam, impersonation or any other unlawful
purpose.

This actor is independent and not affiliated with, endorsed by or sponsored by YouTube or Google.
YouTube is a trademark of Google LLC.

### More from Sedge Labs

- [YouTube Comments Scraper](https://apify.com/sedgelabs/youtube-comments-scraper): comments and replies from any public video, Short or live replay.
- [YouTube Search Scraper](https://apify.com/sedgelabs/youtube-search-scraper): the videos and Shorts from any search, with YouTube's own filters.
- [YouTube Channel Scraper](https://apify.com/sedgelabs/youtube-channel-scraper): a channel's videos, Shorts and live streams, with its profile on every row.

### Support

Open an issue on the Issues tab and include your run link.

# Actor input Schema

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

Channel handles (@name), channel URLs or channel IDs (UC...).

## `maxShortsPerChannel` (type: `integer`):

Stop after this many Shorts per channel.

## `sortBy` (type: `string`):

The channel's own Shorts tab order.

## `includeDetails` (type: `boolean`):

Fetch each Short's exact views, likes, publish date, length, description and keywords. The Shorts tab alone shows only the title and rounded views ("1.4M views"). One extra request per Short, charged as a separate small event.

## `oldestDate` (type: `string`):

Only Shorts published on or after this: a date like 2026-01-31, or an age like "30 days". Stops at the first older Short, so you don't pay for the rest. Needs Sort by Latest and Exact details on.

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

Proxy for the search and channel pages. Apify's datacenter proxy works for these. Exact details always go through Apify residential IPs at no extra proxy cost to you; YouTube refuses them from datacenter IPs.

## Actor input object example

```json
{
  "channels": [
    "@MrBeast"
  ],
  "maxShortsPerChannel": 10,
  "sortBy": "latest",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per Short.

## `summary` (type: `string`):

Per channel: how many Shorts you got and why it stopped.

# 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"
    ],
    "maxShortsPerChannel": 10
};

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

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

```

## MCP server setup

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