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

\[💰 $1.5 / 1K] Extract YouTube Shorts from any channel, search, or URL — titles, view counts, likes, comment counts, hashtags, durations, thumbnails, and full channel details. Filter by upload date, sort by newest, popular, or oldest, and localize across 40+ countries.

- **URL**: https://apify.com/solidcode/youtube-shorts-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Videos, Social media, Developer tools
- **Stats:** 3 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. 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

Pull YouTube Shorts at scale — exact view, like, and comment counts, hashtags, durations, upload dates, and full creator profiles for every vertical video. Feed it channels, keyword searches, or pasted URLs and get one clean row per Short. Built for creators, social media marketers, and trend researchers who need Shorts performance data in a spreadsheet instead of copying numbers off the app one video at a time.

### Why This Scraper?

- **Three input modes in one run** — scrape a channel's entire Shorts tab, run keyword searches that return Shorts only, or paste direct Short, channel, and `/hashtag/<tag>/shorts` URLs, and mix all three in a single job.
- **Exact view and like counts on every Short** — precise figures pulled straight from the video, not the rounded "1.2M"-style numbers shown on cards, plus a per-Short comment count.
- **Full channel profile on every row** — channel name, handle, channel ID, subscriber count, and verified badge attached to each Short, so there's no separate table to join.
- **Extended creator About data on demand** — one toggle adds channel description, join date, location, avatar, banner, total video count, and lifetime total views.
- **40+ country and 19-language localization** — pull region-specific Shorts and localized titles and metadata for markets from the US and UK to Japan, Brazil, India, and beyond.
- **Rich per-Short metadata** — hashtags, exact duration (seconds plus readable "0:24" text), thumbnail URL, ISO upload date, and human "2 weeks ago" published text on every result.
- **Four content flags per Short** — members-only, age-restricted, subtitles-available, and comments-turned-off surfaced for filtering and compliance checks.
- **Three sort orders plus a date floor** — order the collected Shorts newest, most popular, or oldest, and drop anything older than a date you set ("2024-01-01" or "7 days").
- **Flat, one-row-per-Short output** — every Short is a single clean row ready for spreadsheets, BI tools, or a database, with no nested unpacking.

### Use Cases

**Creator & Channel Analytics**
- Benchmark your Shorts against a competitor's full Shorts tab by view, like, and comment count
- Track which topics, hashtags, and durations drive the most views on a channel
- Build a performance dashboard from a creator's entire Shorts back-catalog
- Measure posting cadence from exact upload dates and published-time text

**Trend & Hashtag Research**
- Pull Shorts for a keyword or `/hashtag/<tag>/shorts` page to see what's surfacing right now
- Compare how a single trend performs across 40+ country markets
- Spot rising formats early by sorting a hashtag's Shorts by most popular

**Competitor Monitoring**
- Watch rival channels' newest Shorts with a date floor so you only pull recent uploads
- Compare subscriber counts, verified status, and lifetime total views side by side
- Track a competitor's Shorts output volume over time

**Influencer & Lead Discovery**
- Find creators by keyword search and capture handle, subscriber count, and location
- Shortlist partners by verified badge and subscriber threshold
- Vet reach with extended channel profiles — join date, total videos, total views

**Data & Integration**
- Feed a flat, one-row-per-Short dataset into BI tools and spreadsheets
- Enrich an existing creator database with fresh Shorts performance figures
- Power alerts on new Shorts from a watchlist of channels

### Getting Started

#### Scrape a Channel's Shorts

The simplest start — one channel, sensible defaults:

```json
{
    "channels": ["@MrBeast"]
}
````

#### Keyword Search with a Result Cap

```json
{
    "searchQueries": ["satisfying recipes", "gym motivation"],
    "maxResults": 50,
    "country": "gb"
}
```

#### Multi-Source Run with Channel Details

Mix channels, pasted URLs, a hashtag page, sorting, and a date floor in one job:

```json
{
    "channels": ["nasa"],
    "startUrls": [
        "https://www.youtube.com/@mkbhd/shorts",
        "https://www.youtube.com/shorts/XCGVurja73c",
        "https://www.youtube.com/hashtag/cooking/shorts"
    ],
    "maxResults": 100,
    "sortBy": "popular",
    "oldestPostDate": "3 months",
    "includeChannelDetails": true
}
```

### Input Reference

#### What to Scrape

At least one source is required. Combine any of the three.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `channels` | string\[] | `[]` | Channel usernames with or without the `@` (e.g. `nasa`, `@mkbhd`) or channel URLs. Each channel's Shorts tab is scraped independently. |
| `searchQueries` | string\[] | `[]` | Keywords to search on YouTube (e.g. `satisfying recipes`). Only Shorts are returned. Each query runs independently. |
| `startUrls` | string\[] | `[]` | Paste YouTube URLs directly — channel URLs (`/@handle`, `/channel/UC...`, `/c/...`, `/user/...`), individual Short URLs (`/shorts/...`), and hashtag URLs (`/hashtag/...`). |

#### Results

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `30` | Maximum Shorts per channel, search query, or hashtag. Set to `0` to fetch every available Short. An individual Short URL always returns exactly one result. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `oldestPostDate` | string | *(none)* | Only include Shorts uploaded on or after this date. Accepts an exact date (`2024-01-01`) or a relative window (`7 days`, `3 months`). Applies to channel inputs. |
| `sortBy` | select | `Newest first` | Order the collected Shorts: **Newest first**, **Most popular**, or **Oldest first**. |

#### Localization

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `country` | select | `United States` | Localize results to one of 40+ countries. Affects which Shorts appear and their localized metadata. |
| `language` | select | `English` | Interface language for Short titles and metadata — one of 19 languages, from Japanese and Korean to Arabic, Hebrew, and Portuguese. |

#### Enrichment

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeChannelDetails` | boolean | `true` | Enrich each Short with extended channel details — description, join date, location, avatar, banner, total videos, and total views. Adds one lookup per unique channel. Turn off for faster, leaner results. |

### Output

Each Short is one flat row. Here's a representative result with channel details enabled:

```json
{
    "id": "XCGVurja73c",
    "type": "short",
    "url": "https://www.youtube.com/shorts/XCGVurja73c",
    "title": "I Raced The Fastest Man On Earth",
    "text": "Could I beat an Olympic sprinter? #shorts #challenge",
    "thumbnailUrl": "https://i.ytimg.com/vi/XCGVurja73c/oardefault.jpg",
    "duration": 24,
    "durationText": "0:24",
    "viewCount": 69694950,
    "likeCount": 1730291,
    "commentsCount": 14000,
    "date": "2026-06-24T16:00:14+00:00",
    "publishedText": "2 weeks ago",
    "hashtags": ["#shorts", "#challenge"],
    "hasSubtitles": false,
    "isMembersOnly": false,
    "isMonetized": null,
    "isAgeRestricted": false,
    "commentsTurnedOff": false,
    "channelName": "MrBeast",
    "channelUrl": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA",
    "channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
    "channelUsername": "@MrBeast",
    "numberOfSubscribers": 507000000,
    "isChannelVerified": true,
    "channelDescription": "SUBSCRIBE FOR A COOKIE!",
    "channelJoinedDate": "2012-02-19",
    "channelLocation": "United States",
    "channelAvatarUrl": "https://yt3.googleusercontent.com/example-avatar.jpg",
    "channelBannerUrl": "https://yt3.googleusercontent.com/example-banner.jpg",
    "channelTotalVideos": 992,
    "channelTotalViews": 132996068543,
    "input": "@MrBeast"
}
```

#### Core Short Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Short video ID |
| `type` | string | Always `"short"` |
| `url` | string | Canonical Shorts URL (`/shorts/<id>`) |
| `title` | string | Short title |
| `text` | string | Caption / description text |
| `thumbnailUrl` | string | Thumbnail image URL |
| `duration` | number | Length in seconds |
| `durationText` | string | Human-readable length (e.g. `0:24`) |
| `date` | string | Upload date (ISO 8601) |
| `publishedText` | string | Relative published text (e.g. `2 weeks ago`) |
| `hashtags` | string\[] | Hashtags found in the caption |
| `input` | string | The source (channel, query, or URL) that produced this row |

#### Engagement

| Field | Type | Description |
|-------|------|-------------|
| `viewCount` | number | Exact view count |
| `likeCount` | number | Exact like count |
| `commentsCount` | number | Number of comments on the Short |
| `commentsTurnedOff` | boolean | Whether comments are disabled |

#### Content Flags

| Field | Type | Description |
|-------|------|-------------|
| `hasSubtitles` | boolean | Whether captions/subtitles exist |
| `isMembersOnly` | boolean | Members-only content flag |
| `isMonetized` | boolean | Monetization flag |
| `isAgeRestricted` | boolean | Age-restriction flag |

#### Channel

Present on every row.

| Field | Type | Description |
|-------|------|-------------|
| `channelName` | string | Channel display name |
| `channelUrl` | string | Channel URL |
| `channelId` | string | Channel ID (`UC...`) |
| `channelUsername` | string | Channel handle (e.g. `@MrBeast`) |
| `numberOfSubscribers` | number | Subscriber count |
| `isChannelVerified` | boolean | Verified badge |

#### Extended Channel

Populated when `includeChannelDetails` is on.

| Field | Type | Description |
|-------|------|-------------|
| `channelDescription` | string | Channel About description |
| `channelJoinedDate` | string | Channel creation date |
| `channelLocation` | string | Channel country / location |
| `channelAvatarUrl` | string | Channel avatar URL |
| `channelBannerUrl` | string | Channel banner URL |
| `channelTotalVideos` | number | Total videos on the channel |
| `channelTotalViews` | number | Lifetime channel view count |

### Tips for Best Results

- **Start small, then scale** — set `maxResults` to 10-30 on your first run to confirm the data fits your needs, then raise it (or use `0` for every available Short).
- **Turn on channel details only when you need profiles** — it adds one lookup per unique channel. Leave it off for faster, leaner runs when the per-Short numbers are all you want.
- **Sorting applies to the collected set** — YouTube serves Shorts newest-first, so with a result cap, "Most popular" ranks the Shorts collected under that cap, not YouTube's global ranking. Raise `maxResults` for a wider popularity pool.
- **Use the date floor on channels and hashtags** — those arrive newest-first, so `oldestPostDate` stops collection as soon as an older Short appears. It doesn't narrow keyword searches.
- **Mix sources freely** — channels, keyword searches, and URLs all run in one job and land in one dataset.
- **Match country and language to your target market** — a German run localizes titles and metadata, not just which Shorts appear.
- **Captions can be blank** — `text` and `hashtags` come from a Short's caption/description, which some big-brand creators leave empty, so those fields may be blank even when the on-screen title shows a hashtag.

### Pricing

**From $1.50 per 1,000 results** — well below the going rate for YouTube Shorts data. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows the total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.18 | $0.17 | $0.16 | $0.15 |
| 1,000 | $1.80 | $1.70 | $1.60 | $1.50 |
| 10,000 | $18.00 | $17.00 | $16.00 | $15.00 |
| 100,000 | $180.00 | $170.00 | $160.00 | $150.00 |

A "result" is one Short row in the output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate research, analytics, and content strategy. You are responsible for complying with applicable laws and YouTube's Terms of Service. Extract only publicly available data, respect creators' rights, and do not use collected data for spam, harassment, or any unlawful purpose. Handle any personal data in line with applicable privacy regulations.

# Actor input Schema

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

Channel usernames or links whose Shorts tab you want to scrape. Enter a username with or without the '@' (e.g. 'nasa', '@mkbhd') or paste a channel URL (e.g. https://www.youtube.com/@NASA). Each channel is scraped independently.

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

Keywords to search on YouTube (e.g. 'satisfying recipes', 'gym motivation'). Only Shorts are returned. Each query runs independently. Leave empty if you only want to scrape channels or URLs.

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

Paste YouTube URLs directly. Accepts channel URLs (/@handle, /channel/UC..., /c/..., /user/...), individual Shorts URLs (/shorts/...), and hashtag URLs (/hashtag/...). Mix any of these in one list.

## `maxResults` (type: `integer`):

Maximum number of Shorts to fetch per channel, search query, or hashtag (up to 100,000). Set to 0 to fetch every available Short; extremely large channels are still collected up to a high internal safety ceiling (roughly 15,000 Shorts per source). Individual Shorts URLs always return exactly one result regardless of this setting.

## `oldestPostDate` (type: `string`):

Only include Shorts uploaded on or after this date. Accepts an exact date (e.g. '2024-01-01') or a relative window (e.g. '7 days', '3 months'). Leave empty for no date limit. Applies to channel and hashtag inputs (search results are not date-filtered).

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

Order the collected Shorts by newest, most viewed, or oldest. Sorting is applied to the Shorts collected for each source after their exact upload dates and view counts are gathered. When a result cap is set, this orders the Shorts collected under that cap (YouTube serves newest first), not YouTube's global ranking.

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

Localize results to this country. Affects which Shorts are shown and their localized metadata.

## `language` (type: `string`):

Interface language for Short titles and metadata returned in the response.

## `includeChannelDetails` (type: `boolean`):

Enrich each Short with extended details about its channel — description, join date, location, avatar, banner, total video count, and total view count. Adds one extra fetch per unique channel. Turn off for faster, leaner results.

## Actor input object example

```json
{
  "channels": [],
  "searchQueries": [],
  "startUrls": [],
  "maxResults": 30,
  "sortBy": "newest",
  "country": "us",
  "language": "en",
  "includeChannelDetails": true
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of all Shorts with the most useful fields at a glance.

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

Per-Short detail rows with duration, view count, like count, comment count, hashtags, channel info, and thumbnails.

# 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": [],
    "searchQueries": [],
    "startUrls": [],
    "maxResults": 30,
    "sortBy": "newest",
    "country": "us",
    "language": "en",
    "includeChannelDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/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": [],
    "searchQueries": [],
    "startUrls": [],
    "maxResults": 30,
    "sortBy": "newest",
    "country": "us",
    "language": "en",
    "includeChannelDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/youtube-shorts-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [],
  "searchQueries": [],
  "startUrls": [],
  "maxResults": 30,
  "sortBy": "newest",
  "country": "us",
  "language": "en",
  "includeChannelDetails": true
}' |
apify call solidcode/youtube-shorts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/youtube-shorts-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Shorts Scraper",
        "description": "[💰 $1.5 / 1K] Extract YouTube Shorts from any channel, search, or URL — titles, view counts, likes, comment counts, hashtags, durations, thumbnails, and full channel details. Filter by upload date, sort by newest, popular, or oldest, and localize across 40+ countries.",
        "version": "1.0",
        "x-build-id": "TVTT7A3dMak7F20WP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~youtube-shorts-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-youtube-shorts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~youtube-shorts-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-youtube-shorts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~youtube-shorts-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-youtube-shorts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "channels": {
                        "title": "Channels",
                        "type": "array",
                        "description": "Channel usernames or links whose Shorts tab you want to scrape. Enter a username with or without the '@' (e.g. 'nasa', '@mkbhd') or paste a channel URL (e.g. https://www.youtube.com/@NASA). Each channel is scraped independently.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQueries": {
                        "title": "Search Queries",
                        "type": "array",
                        "description": "Keywords to search on YouTube (e.g. 'satisfying recipes', 'gym motivation'). Only Shorts are returned. Each query runs independently. Leave empty if you only want to scrape channels or URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "YouTube URLs",
                        "type": "array",
                        "description": "Paste YouTube URLs directly. Accepts channel URLs (/@handle, /channel/UC..., /c/..., /user/...), individual Shorts URLs (/shorts/...), and hashtag URLs (/hashtag/...). Mix any of these in one list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Maximum Shorts per Source",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of Shorts to fetch per channel, search query, or hashtag (up to 100,000). Set to 0 to fetch every available Short; extremely large channels are still collected up to a high internal safety ceiling (roughly 15,000 Shorts per source). Individual Shorts URLs always return exactly one result regardless of this setting.",
                        "default": 30
                    },
                    "oldestPostDate": {
                        "title": "Oldest Post Date",
                        "type": "string",
                        "description": "Only include Shorts uploaded on or after this date. Accepts an exact date (e.g. '2024-01-01') or a relative window (e.g. '7 days', '3 months'). Leave empty for no date limit. Applies to channel and hashtag inputs (search results are not date-filtered)."
                    },
                    "sortBy": {
                        "title": "Sort Shorts By",
                        "enum": [
                            "newest",
                            "popular",
                            "oldest"
                        ],
                        "type": "string",
                        "description": "Order the collected Shorts by newest, most viewed, or oldest. Sorting is applied to the Shorts collected for each source after their exact upload dates and view counts are gathered. When a result cap is set, this orders the Shorts collected under that cap (YouTube serves newest first), not YouTube's global ranking.",
                        "default": "newest"
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "us",
                            "gb",
                            "ca",
                            "au",
                            "nz",
                            "ie",
                            "fr",
                            "de",
                            "es",
                            "it",
                            "nl",
                            "be",
                            "pt",
                            "ch",
                            "at",
                            "se",
                            "no",
                            "dk",
                            "fi",
                            "pl",
                            "jp",
                            "kr",
                            "hk",
                            "tw",
                            "sg",
                            "my",
                            "th",
                            "id",
                            "ph",
                            "vn",
                            "in",
                            "br",
                            "mx",
                            "ar",
                            "cl",
                            "co",
                            "ae",
                            "sa",
                            "tr",
                            "il",
                            "za",
                            "eg"
                        ],
                        "type": "string",
                        "description": "Localize results to this country. Affects which Shorts are shown and their localized metadata.",
                        "default": "us"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "fr",
                            "de",
                            "es",
                            "it",
                            "pt",
                            "nl",
                            "pl",
                            "tr",
                            "ru",
                            "ja",
                            "ko",
                            "zh-CN",
                            "zh-TW",
                            "ar",
                            "he",
                            "th",
                            "vi",
                            "id"
                        ],
                        "type": "string",
                        "description": "Interface language for Short titles and metadata returned in the response.",
                        "default": "en"
                    },
                    "includeChannelDetails": {
                        "title": "Include Channel Details",
                        "type": "boolean",
                        "description": "Enrich each Short with extended details about its channel — description, join date, location, avatar, banner, total video count, and total view count. Adds one extra fetch per unique channel. Turn off for faster, leaner results.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
