# YouTube Shorts Scraper - Views, Likes & Hashtags by Channel (`tenfoldfleet/youtube-shorts-scraper`) Actor

Get all YouTube Shorts from a channel or hashtag with views, likes, comment count, publish date, description and hashtags. Scrape Shorts by @handle, channel URL, #hashtag or Shorts URL, no API key or login. $2 per 1,000 Shorts; failed inputs are free.

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

## Pricing

from $2.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

### What does YouTube Shorts Scraper do?

**YouTube Shorts Scraper** gets **all the YouTube Shorts of a channel or a hashtag** from [YouTube](https://www.youtube.com), with each Short's **views, likes, comment count, publish date, description and hashtags**. Give it channel **@handles** or URLs, **#hashtags** or individual **Shorts URLs**, and it returns one clean row per Short.

It works like a **YouTube Shorts API** with no API key, no quota and no login. It runs on plain HTTP requests (no browser), so it's fast and cheap: **$2 per 1,000 Shorts**, and channels, hashtags or Shorts that can't be found are **free**.

### Why use a YouTube Shorts scraper?

- 📈 **Creator and competitor research**: see which Shorts of a channel get the most views, likes and comments, and how often they post.
- 🔥 **Trend discovery**: pull the Shorts YouTube shows for a hashtag (#cooking, #fitness, #asmr) and find what's working in a niche.
- 🤝 **Influencer marketing**: compare engagement (likes and comments per view) across creators before you reach out.
- 🧠 **AI and data pipelines**: feed titles, descriptions and hashtags into an LLM, a dashboard or a spreadsheet.
- 🗓️ **Monitoring**: schedule a run every day and track view counts over time.

Runs on the Apify platform, so you get an **API**, scheduling, webhooks and integrations with Make, Zapier, n8n and Google Sheets. It also works as an **MCP tool for AI agents** through the [Apify MCP server](https://mcp.apify.com).

### What data can it extract?

| Field | Example |
|---|---|
| `shortId`, `url` | `CEJXqm2eiJ0`, `https://www.youtube.com/shorts/CEJXqm2eiJ0` |
| `title` | `What’s Inside My Briefcase?` |
| `viewCount`, `viewCountText` | `41414021`, `41M views` |
| `likeCount` | `738260` |
| `commentCount` | `16793` (null when comments are off) |
| `publishedAt` | `2026-09-27` (ISO date; a full timestamp when YouTube provides one) |
| `durationSec` | `40` when YouTube provides it, otherwise null |
| `description`, `hashtags` | full description; `["shorts", "cooking"]` from the title and description |
| `thumbnailUrl` | vertical thumbnail image |
| `channelId`, `channelName`, `channelHandle` | `UCX6OQ3DkcsbYNE6H8uQQuVA`, `MrBeast`, `@MrBeast` |
| `channelSubscriberCountText` | `519M subscribers` |
| `source`, `sourceInput` | `channel` / `hashtag` / `url` and the input it came from |
| `detailsFetched` | `true` when likes, comments and date were loaded |
| `scrapedAt` | when the row was scraped |

### How to scrape YouTube Shorts

1. Click **Try for free**.
2. Add channels (`@MrBeast`, `https://www.youtube.com/@NASA`, `/channel/UC...` URLs), hashtags without the `#` (`cooking`), or Shorts URLs.
3. Set **Max Shorts per channel or hashtag** (default 50). Channels return their newest Shorts first.
4. Leave **Fetch likes, comments and publish date** on for full data, or turn it off for a faster list of titles, view counts and thumbnails (same price).
5. Click **Start**, then download the results as **JSON, CSV, Excel or HTML**, or read them through the API.

#### Call it from the API

```bash
curl -X POST "https://api.apify.com/v2/acts/tenfoldfleet~youtube-shorts-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"channelUrls": ["@MrBeast"], "maxShortsPerSource": 20}'
```

### How much does it cost to scrape YouTube Shorts?

You pay per Short returned: **$2 per 1,000 Shorts** ($0.002 each), plus a tiny $0.00005 per run start. A channel that doesn't exist, a hashtag without Shorts or a removed Short is **not charged**. Set **Max Shorts in total** or a max cost per run and the scraper stops there.

### Input

```json
{
    "channelUrls": ["@MrBeast", "https://www.youtube.com/@NASA"],
    "hashtags": ["cooking"],
    "shortUrls": ["https://www.youtube.com/shorts/CEJXqm2eiJ0"],
    "maxShortsPerSource": 50,
    "fetchDetails": true,
    "maxItems": 0
}
```

### Output

```json
{
    "shortId": "CEJXqm2eiJ0",
    "url": "https://www.youtube.com/shorts/CEJXqm2eiJ0",
    "title": "What’s Inside My Briefcase?",
    "viewCount": 41414021,
    "viewCountText": "41M views",
    "likeCount": 738260,
    "commentCount": 16793,
    "publishedAt": "2026-09-27",
    "durationSec": null,
    "description": "",
    "hashtags": [],
    "thumbnailUrl": "https://i.ytimg.com/vi/CEJXqm2eiJ0/sardefault.jpg",
    "channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
    "channelName": "MrBeast",
    "channelHandle": "@MrBeast",
    "channelSubscriberCountText": "519M subscribers",
    "source": "channel",
    "sourceInput": "@MrBeast",
    "detailsFetched": true,
    "scrapedAt": "2026-10-05T04:07:40.109Z"
}
```

Inputs that fail come back as free rows with `input`, `reason` (`channel_not_found`, `no_shorts_tab`, `hashtag_no_shorts`, `short_unavailable`, `invalid_input`, `blocked`) and `error`. Download everything as JSON, CSV, Excel or HTML.

### Tips

- The same Short found through two inputs is returned (and charged) once.
- Hashtag results are the Shorts YouTube shows on the hashtag page, usually a few hundred at most.
- Turn off **Fetch likes, comments and publish date** when you only need titles, view counts and thumbnails: it is several times faster.
- If one detail lookup fails after retries, you still get the Short's title, views and thumbnail with `detailsFetched: false`.

### FAQ

#### Do I need a YouTube API key or account?

No. The scraper reads public YouTube pages. No login, cookies or API quota.

#### Can I scrape YouTube Shorts by hashtag?

Yes. Put hashtags without the `#` in **Hashtags**, for example `cooking` or `fitness`.

#### Are view and like counts exact?

With details on, views, likes and comment counts are exact. With details off, views are rounded the way YouTube shows them (`41M views`).

#### Why is `durationSec` sometimes empty?

YouTube only returns the length on some requests. All Shorts are under 3 minutes.

#### Can it scrape regular YouTube videos?

It's built for Shorts. A regular video URL put in **Shorts URLs** is returned (and charged) like a Short. For transcripts of any video, see our YouTube Transcript Scraper.

### Disclaimer

This scraper collects public data only. It does not access private videos, accounts or personal data beyond what channels publish themselves. Make sure your use of the data complies with YouTube's Terms of Service and the laws that apply to you, such as GDPR.

### More tools from Tenfold Fleet

| Actor | Price |
|---|---|
| [AliExpress Products Scraper - Search, Prices & Sold Count](https://apify.com/tenfoldfleet/aliexpress-search-scraper) | $1.5 per 1,000 (product) |
| [Amazon Product Scraper - Details, Prices & Search by ASIN](https://apify.com/tenfoldfleet/amazon-product-scraper) | $1.5 per 1,000 (product) |
| [ATS Jobs Scraper - Greenhouse, Lever, Ashby & 5 More](https://apify.com/tenfoldfleet/ats-jobs-scraper) | $2 per 1,000 (job posting) |
| [Bilibili Scraper - Videos, Comments, Danmaku & Search](https://apify.com/tenfoldfleet/bilibili-scraper) | $5 per 1,000 (video or comment) |
| [Contact Details Scraper - Website Email & Phone Extractor](https://apify.com/tenfoldfleet/company-contact-finder) | $8 per 1,000 (website with contacts) |
| [Google Ads Transparency Center Scraper - Competitor Ads by Site](https://apify.com/tenfoldfleet/google-ads-transparency-scraper) | $1 per 1,000 (ad) |
| [Google News Scraper - Articles, Real URLs & Full Text](https://apify.com/tenfoldfleet/google-news-scraper) | $2 per 1,000 (article) |
| [Google Trends Scraper - Interest, Regions & Related Queries](https://apify.com/tenfoldfleet/google-trends-scraper) | $2 per 1,000 (keyword) |
| [Keyword Search Volume, CPC & Difficulty Checker (Bulk)](https://apify.com/tenfoldfleet/keyword-search-volume) | $5 per 1,000 (keyword with data) |
| [Remote Jobs Aggregator - RemoteOK, WWR, Himalayas & 4 more](https://apify.com/tenfoldfleet/remote-jobs-aggregator) | $1.2 per 1,000 (unique remote job) |
| [SEEK Job Scraper - Australia, NZ, Jobstreet & JobsDB](https://apify.com/tenfoldfleet/seek-job-scraper) | $0.9 per 1,000 (job listing) |
| [SEO Audit Tool - Technical On-Page SEO Checker & Score](https://apify.com/tenfoldfleet/seo-audit-tool) | $20 per 1,000 (page audit) |
| [Shopify Products Scraper - Prices, Variants & Stock](https://apify.com/tenfoldfleet/shopify-products-scraper) | $0.8 per 1,000 (product) |
| [Shopify App & Theme Detector - Store Analyzer & Contacts](https://apify.com/tenfoldfleet/shopify-store-analyzer) | $8 per 1,000 (shopify store) |
| [Sitemap URL Extractor - All URLs from sitemap.xml & robots.txt](https://apify.com/tenfoldfleet/sitemap-url-extractor) | $0.4 per 1,000 (url) |
| [Technology Detector - Wappalyzer & BuiltWith Alternative](https://apify.com/tenfoldfleet/tech-stack-detector) | $10 per 1,000 (website) |
| [URL to Markdown - Web Page to LLM-Ready Text for AI Agents](https://apify.com/tenfoldfleet/url-to-markdown) | $1 per 1,000 (page) |
| [Workday Jobs Scraper - myworkdayjobs.com API with Salary](https://apify.com/tenfoldfleet/workday-jobs-scraper) | $1.5 per 1,000 (job posting) |
| [YouTube Comments Scraper - Replies, Likes & Sort by Newest](https://apify.com/tenfoldfleet/youtube-comments-scraper) | $0.6 per 1,000 (comment) |
| [YouTube Transcript Scraper - Captions & Subtitles API](https://apify.com/tenfoldfleet/youtube-transcript-scraper) | $3 per 1,000 (transcript) |

# Actor input Schema

## `channelUrls` (type: `array`):

YouTube channels to get Shorts from: @handles (@MrBeast), channel URLs (https://www.youtube.com/@MrBeast, /channel/UC..., /c/..., /user/...) or channel IDs. Newest Shorts first.

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

Hashtags to get Shorts for, without the # (cooking, fitness). Returns the Shorts YouTube shows on the hashtag's Shorts page.

## `shortUrls` (type: `array`):

Individual Shorts to look up, e.g. https://www.youtube.com/shorts/CEJXqm2eiJ0 or the 11-character video ID.

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

How many Shorts to return from each channel or hashtag.

## `fetchDetails` (type: `boolean`):

Load each Short's exact views, likes, comment count, publish date, description and hashtags (duration only when YouTube returns it). Turn off for a faster list with title, approximate views and thumbnail only. Same price either way.

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

Stop after this many Shorts across all inputs. 0 = no limit (the run's max cost still applies).

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

Apify datacenter proxy works for YouTube. Listing pages retry through residential proxy only if the datacenter IPs are blocked.

## Actor input object example

```json
{
  "channelUrls": [
    "@MrBeast",
    "https://www.youtube.com/@NASA"
  ],
  "hashtags": [
    "cooking"
  ],
  "maxShortsPerSource": 10,
  "fetchDetails": true,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "channelUrls": [
        "@MrBeast",
        "https://www.youtube.com/@NASA"
    ],
    "hashtags": [
        "cooking"
    ],
    "maxShortsPerSource": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tenfoldfleet/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 = {
    "channelUrls": [
        "@MrBeast",
        "https://www.youtube.com/@NASA",
    ],
    "hashtags": ["cooking"],
    "maxShortsPerSource": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("tenfoldfleet/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 '{
  "channelUrls": [
    "@MrBeast",
    "https://www.youtube.com/@NASA"
  ],
  "hashtags": [
    "cooking"
  ],
  "maxShortsPerSource": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call tenfoldfleet/youtube-shorts-scraper --silent --output-dataset

```

## MCP server setup

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