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

Scrape YouTube Shorts by keyword, hashtag, or channel with views, likes, comments, duration, tags, and channel details — export to JSON, CSV, or Sheets.

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

## Pricing

$3.00 / 1,000 short scrapeds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## YouTube Shorts Scraper

Scrape YouTube Shorts by keyword, hashtag, or channel - with view, like, and comment counts, duration, tags, hashtags, and the channel behind every Short. No login or cookies required.

Give it a list of search terms, `#hashtags`, or channels, and it returns one clean row per Short, ready to export to JSON, CSV, Excel, or Google Sheets.

### What you get

For every Short:

- **videoId**, **url**, **title**, **description**
- **publishedAt** and **durationSeconds**
- **viewCount**, **likeCount**, **commentCount**
- **channelId**, **channelTitle**, **channelUrl** - the creator behind the Short
- **thumbnailUrl** - the vertical cover frame
- **tags** (creator-set tags) and **hashtags** (extracted from the title and description)
- **language** - the declared audio or metadata language when available
- **sourceType** / **sourceQuery** / **position** - which query, hashtag, or channel surfaced the Short and its rank

Results are de-duplicated across all queries in a run.

### Use cases

- **Trend research** - see which Shorts are winning for a keyword or hashtag right now, sorted by views or upload date
- **Competitor analysis** - pull a channel's full Shorts catalog with engagement metrics and spot their best-performing formats
- **Influencer discovery** - find creators posting Shorts in your niche and rank them by views and engagement
- **Content ideation** - mine titles, hashtags, and tags from top Shorts to plan your own
- **Hashtag monitoring** - track new Shorts posted under a campaign or brand hashtag
- **Dataset building** - collect thousands of labelled Shorts for analysis or model training

### How to use

1. Enter one or more **Search queries or hashtags**, one per line. Start an entry with `#` to search a hashtag (for example `#homeworkout`).
2. Optionally enter one or more **Channels** - handles (`@mkbhd`), channel URLs, or `UC...` IDs - to scrape their Shorts tab.
3. Set **Max Items per query** (default 100, `0` for everything YouTube returns, up to 5,000 per query).
4. For searches, choose **Sort by** (relevance, view count, or upload date) and **Uploaded within** (24 hours, 7 days, 30 days, or a year).
5. Run the actor - results stream into the **Dataset** tab as they are found.

Channel Shorts tabs are always returned newest first.

### Output format

Each dataset record:

```json
{
  "videoId": "HcvRafAt9eY",
  "url": "https://www.youtube.com/shorts/HcvRafAt9eY",
  "title": "Vegan mushroom pâté 🍄 #cooking #veganrecipes #plantbased",
  "description": "Rich, savory and ridiculously good on toasted bread...",
  "publishedAt": "2026-09-03T13:00:37Z",
  "durationSeconds": 58,
  "viewCount": 6512,
  "likeCount": 412,
  "commentCount": 18,
  "channelId": "UC1bBqwotWgZ99ZDWwv0eh0g",
  "channelTitle": "Soy Boy",
  "channelUrl": "https://www.youtube.com/channel/UC1bBqwotWgZ99ZDWwv0eh0g",
  "thumbnailUrl": "https://i.ytimg.com/vi/HcvRafAt9eY/maxresdefault.jpg",
  "tags": ["vegan", "pate", "mushroom"],
  "hashtags": ["cooking", "veganrecipes", "plantbased"],
  "language": "en",
  "sourceType": "search",
  "sourceQuery": "vegan cooking",
  "position": 1
}
```

### Pricing

You pay a small fixed amount per Short returned. There is no charge for queries or channels that return nothing.

### Tips

- Combine **Sort by: View count** with **Uploaded within: Last 7 days** to surface what is trending in a niche this week.
- Hashtag entries are matched exactly, so `#homeworkout` and `#homeworkouts` are different searches.
- Set **Max Items per query** to `0` when you want a channel's complete Shorts back catalog.
- If YouTube begins blocking requests from the default network, enable **Proxy configuration** with Apify Proxy.

### FAQ

**Does this download the videos?**
No. It returns metadata and links. Pair it with a video downloader actor if you need the media files.

**Can I scrape a channel's regular videos too?**
This actor is dedicated to Shorts. Use the YouTube Channel Videos Scraper for long-form uploads and live streams.

**Why are some Shorts longer than 60 seconds?**
YouTube now allows Shorts up to three minutes. Anything YouTube lists in the Shorts feed is included.

# Actor input Schema

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

Keywords or hashtags to search Shorts for, one per line. Start an entry with # to search a hashtag (e.g. #vegancooking). Each entry is scraped up to Max Items per query.

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

YouTube channels whose Shorts tab you want to scrape, one per line. Accepts a handle (@mkbhd), a channel URL, or a UC... channel ID.

## `maxItemsPerQuery` (type: `integer`):

Maximum number of Shorts to return for each search query, hashtag, or channel. Set 0 for as many as YouTube will return (up to 5,000 per query).

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

Ordering of search and hashtag results. Channel Shorts tabs are always returned newest first.

## `uploadedWithin` (type: `string`):

Only return Shorts uploaded within this period. Applies to search queries and hashtags.

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

Optional. Leave off by default. Enable Apify Proxy only if YouTube starts blocking requests from the default network.

## Actor input object example

```json
{
  "searchQueries": [
    "vegan cooking",
    "#homeworkout"
  ],
  "channels": [],
  "maxItemsPerQuery": 100,
  "sortBy": "relevance",
  "uploadedWithin": "any",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One record per Short: videoId, url, title, description, publishedAt, durationSeconds, viewCount, likeCount, commentCount, channelId, channelTitle, channelUrl, thumbnailUrl, tags, hashtags, language, sourceType, sourceQuery, position.

# 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 = {
    "searchQueries": [
        "vegan cooking",
        "#homeworkout"
    ],
    "channels": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/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 = {
    "searchQueries": [
        "vegan cooking",
        "#homeworkout",
    ],
    "channels": [],
}

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/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 '{
  "searchQueries": [
    "vegan cooking",
    "#homeworkout"
  ],
  "channels": []
}' |
apify call seemuapps/youtube-shorts-scraper --silent --output-dataset

```

## MCP server setup

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