# YouTube Shorts Scraper

Collect a YouTube account's Shorts videos with engagement and the posting account's profile, or look up a specific Short by its link — enter up to 20 lines and export ready-to-use data for research or content strategy.

- Template page: [https://www.octoparse.com/template/youtube-shorts-scraper](https://www.octoparse.com/template/youtube-shorts-scraper)
- Categories: Social Media
- Status: `PUBLISHED`
- Run mode: `CLOUD`

## Pricing

Current price: **$2.03/1,000 lines**. Billing is based on output rows; an Octoparse subscription may be required.

## What is an Octoparse template?

An Octoparse template is a ready-to-use scraping workflow with predefined inputs and structured outputs. Use the exact parameter keys below; do not invent parameters.

## Overview

This ready-to-use template collects structured data from web pages.

## Output

The current workflow extracts 20 fields, including `UserId`, `Username`, `accountName`, `articleType`, `channelDescriptionLinks`, `channelThumbnailList`, `commentCount`, `contentId`, `contentText`, `contentTitle`, `contentUrl`, `fansCount`, `hashtags`, `input`, `isVerified`, `joinedDate`, `likeCount`, `location`, `publishTime`, `viewCount`.

## Use Cases

- Use structured results for research, comparison, and monitoring.
- Collect rows without building the extraction workflow from scratch.
- Combine results with other templates for downstream enrichment.
- Review a representative result before starting a large batch.

## Why Octoparse

- **No coding required:** complete UserAccount/AccountUrl/ShortUrls, CrawlNum and start the template in cloud mode.
- **Flexible export:** review and export results as CSV, Excel, or JSON.

## Input

### UserAccount/AccountUrl/ShortUrls

Required. Direct video URLs Constraints: minItems=1; maxItems=10000; items.minLength=1; items.maxLength=10000.

### CrawlNum

Optional. Leave it blank to scrape all. Constraints: minimum=10, maximum=100000.

## How to Use

# YouTube Shorts Scraper – Usage Guide

## Pricing
$2.03 per 1,000 rows collected.

## Input Parameters

- **UserAccount/AccountUrl/ShortUrls** – Up to 20 lines. Each line can be:
  - A YouTube account handle (`@handle`) or a channel homepage link → collects that account's Shorts.
  - A direct YouTube Shorts link → collects only that one Short.
- **CrawlNum** – (Optional) Number of Shorts to collect per account line. Leave blank to collect all available. If set, must be 5 or higher. Does not apply to direct‑Shorts‑link lines – those always return one row.

## Output Fields

Every row includes:

- `contentId`, `contentTitle`, `contentUrl`, `articleType` (always `"short"`), `viewCount`, `contentText`, `commentCount`, `likeCount`, `hashtags`, `publishTime`
- `Username`, `accountName`, `UserId`, `isVerified`, `joinedDate`, `location`, `fansCount`, `channelDescriptionLinks`, `channelThumbnailList`
- `input` – the exact line you submitted for that row.

> **Note:** `viewCount`, `channelDescriptionLinks`, and `channelThumbnailList` are **only** returned for account/channel input lines. For direct Shorts links, these fields are blank.

## How to Use

1. Open the template and click **Try it!**.
2. Enter up to 20 lines in **UserAccount/AccountUrl/ShortUrls**.
3. Set **CrawlNum** (blank = all available; or a number ≥ 5).
4. Start the task (cloud run only).
5. Review the collected rows.
6. Export in your preferred format.

## Limitations

- Maximum 20 input lines per task.
- `CrawlNum` only applies to account/channel lines; direct Shorts links always produce exactly one row.
- `CrawlNum` must be blank or ≥ 5 – cannot request fewer than 5 Shorts for an account.
- `viewCount`, `channelDescriptionLinks`, and `channelThumbnailList` are blank for direct‑Shorts‑link rows.
- `articleType` is always `"short"`.
- Runs in the cloud only.

## Tips

- Mix account and direct‑link inputs in one task when you need both a full channel scan and specific Shorts.
- Leave `CrawlNum` blank only if you truly want the channel's full Shorts history (large channels may produce long runs).
- Use the `input` field to trace rows back to your submitted lines.
- Combine `hashtags` and `contentText` to identify recurring themes.

## Limitations

Results depend on what the source site exposes at run time. Fields may be empty when a source page does not provide a value. The template enforces the input limits shown above.

## Tips

Use specific, valid inputs and review a representative result before starting a large batch. Remove duplicate inputs when repeated records are not needed.

## FAQ

### What do I need to enter?

Use the exact inputs and limits listed above.

### What data does this template return?

See Output Schema below; availability can vary by source record.

### How is usage billed?

See the Pricing section above for current pricing and billing details.

## Related Templates

- [YouTube Video List Scraper](https://www.octoparse.com/template/youtube-video-list-scraper)
- [YouTube Details & Comments Scraper (Free)](https://www.octoparse.com/template/youtube-details-comments-scraper-free)
- [YouTube Community Scraper](https://www.octoparse.com/template/youtube-community-scraper)
- [YouTube Comments & Replies Scraper](https://www.octoparse.com/template/youtube-comments-replies-scraper)
- [YouTube Channel Scraper](https://www.octoparse.com/template/youtube-channel-scraper)

## Input Schema

```json
{
  "title": "YouTube Shorts Scraper input",
  "description": "Input parameters configured for the current published template version.",
  "type": "object",
  "schemaVersion": 1,
  "additionalProperties": false,
  "properties": {
    "userAccount/AccountUrl/ShortUrls": {
      "title": "UserAccount/AccountUrl/ShortUrls",
      "description": "Direct video URLs",
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 10000
      },
      "minItems": 1,
      "maxItems": 10000,
      "x-octoparse": {
        "apiEnabled": true
      }
    },
    "crawlNum": {
      "title": "CrawlNum",
      "description": "Leave it blank to scrape all.",
      "type": "integer",
      "minimum": 10,
      "maximum": 100000,
      "x-octoparse": {
        "apiEnabled": true
      }
    }
  },
  "required": [
    "userAccount/AccountUrl/ShortUrls"
  ]
}
```

## Input JSON Example

Example 1

```json
{
  "userAccount/AccountUrl/ShortUrls": [
    "@FoxNews"
  ]
}
```

Example 2

```json
{
  "userAccount/AccountUrl/ShortUrls": [
    "@FoxNews"
  ]
}
```

Example 3

```json
{
  "crawlNum": 12,
  "userAccount/AccountUrl/ShortUrls": [
    "https://www.youtube.com/@Xenost-j3i"
  ]
}
```

Example 4

```json
{
  "userAccount/AccountUrl/ShortUrls": [
    "https://www.youtube.com/@MuscleBlaze"
  ]
}
```

Example 5

```json
{
  "userAccount/AccountUrl/ShortUrls": [
    "https://www.youtube.com/@TheWholeTruthFoodsYT"
  ]
}
```


## Output Schema

```json
{
  "schemaVersion": 1,
  "type": "object",
  "properties": {
    "UserId": {
      "type": "string",
      "description": ""
    },
    "Username": {
      "type": "string",
      "description": ""
    },
    "accountName": {
      "type": "string",
      "description": ""
    },
    "articleType": {
      "type": "string",
      "description": ""
    },
    "channelDescriptionLinks": {
      "type": "string",
      "description": ""
    },
    "channelThumbnailList": {
      "type": "string",
      "description": ""
    },
    "commentCount": {
      "type": "string",
      "description": ""
    },
    "contentId": {
      "type": "string",
      "description": ""
    },
    "contentText": {
      "type": "string",
      "description": ""
    },
    "contentTitle": {
      "type": "string",
      "description": ""
    },
    "contentUrl": {
      "type": "string",
      "description": ""
    },
    "fansCount": {
      "type": "string",
      "description": ""
    },
    "hashtags": {
      "type": "string",
      "description": ""
    },
    "input": {
      "type": "string",
      "description": ""
    },
    "isVerified": {
      "type": "string",
      "description": ""
    },
    "joinedDate": {
      "type": "string",
      "description": ""
    },
    "likeCount": {
      "type": "string",
      "description": ""
    },
    "location": {
      "type": "string",
      "description": ""
    },
    "publishTime": {
      "type": "string",
      "description": ""
    },
    "viewCount": {
      "type": "string",
      "description": ""
    }
  },
  "title": "YouTube Shorts Scraper output",
  "description": "Initial output fields derived from the current published implementation. Field descriptions are maintained by Data Center; production field names and types should be refreshed from recent successful runs.",
  "additionalProperties": false
}
```

## Output Example

Example 1

```json
{
  "UserId": "UCXIJgqnII2ZOINSWNOGFThA",
  "Username": "FoxNews",
  "accountName": "Fox News",
  "articleType": "short",
  "channelDescriptionLinks": "[{\"text\": \"Facebook\", \"url\": \"https://www.facebook.com/FoxNews/\"}]",
  "channelThumbnailList": "[{\"height\": 900, \"url\": \"https://yt3.googleusercontent.com/G3gLy3HBgiZ21mEt1uzR0VPA6VXpsgJReuD7Z91nHwcgyFVu_QpHNpxuULN1D0YEQBwD0F1HwQ=s900-c-k-c0x00ffffff-no-rj\", \"width\": 900}]",
  "commentCount": "",
  "contentId": "8ogLENB0yPU",
  "contentText": "",
  "contentTitle": "Anti-ICE protesters MOCKED for blocking NYC traffic #shorts",
  "contentUrl": "https://www.youtube.com/shorts/8ogLENB0yPU",
  "fansCount": "15500000",
  "hashtags": "",
  "input": "@FoxNews",
  "isVerified": "",
  "joinedDate": "2006-09-19T00:00:00",
  "likeCount": "",
  "location": "United States",
  "publishTime": "",
  "viewCount": "24000"
}
```

Example 2

```json
{
  "UserId": "UCXIJgqnII2ZOINSWNOGFThA",
  "Username": "FoxNews",
  "accountName": "Fox News",
  "articleType": "short",
  "channelDescriptionLinks": "[{\"text\": \"Facebook\", \"url\": \"https://www.facebook.com/FoxNews/\"}]",
  "channelThumbnailList": "[{\"height\": 900, \"url\": \"https://yt3.googleusercontent.com/G3gLy3HBgiZ21mEt1uzR0VPA6VXpsgJReuD7Z91nHwcgyFVu_QpHNpxuULN1D0YEQBwD0F1HwQ=s900-c-k-c0x00ffffff-no-rj\", \"width\": 900}]",
  "commentCount": "",
  "contentId": "A5Y4JNXOpUo",
  "contentText": "",
  "contentTitle": "'HE DIDN'T KNOW EITHER!': Watters makes HILARIOUS flub #texas #shorts #jessewatters",
  "contentUrl": "https://www.youtube.com/shorts/A5Y4JNXOpUo",
  "fansCount": "15500000",
  "hashtags": "",
  "input": "@FoxNews",
  "isVerified": "",
  "joinedDate": "2006-09-19T00:00:00",
  "likeCount": "",
  "location": "United States",
  "publishTime": "",
  "viewCount": "26000"
}
```

Example 3

```json
{
  "UserId": "UC6VBobwMlMuAQPcc04ImdLQ",
  "Username": "Xenost-j3i",
  "accountName": "Xenost ",
  "articleType": "short",
  "channelDescriptionLinks": "[{\"text\": \"forms.gle/zFaZTSZvpcceYtL36\", \"url\": \"https://forms.gle/zFaZTSZvpcceYtL36\"}]",
  "channelThumbnailList": "[{\"height\": 900, \"url\": \"https://yt3.googleusercontent.com/nbJhiIkQllBwMGyAGPg6KJXkeAJMV7t5t8szNyssfgQjYNrV8Bq3dTAmwzLiAYwJJUHLijKLSRE=s900-c-k-c0x00ffffff-no-rj\", \"width\": 900}]",
  "commentCount": "",
  "contentId": "pFHlbrw_QUQ",
  "contentText": "",
  "contentTitle": "I caught SANTA breaking into my dad’s room!",
  "contentUrl": "https://www.youtube.com/shorts/pFHlbrw_QUQ",
  "fansCount": "1030000",
  "hashtags": "",
  "input": "https://www.youtube.com/@Xenost-j3i",
  "isVerified": "",
  "joinedDate": "2026-07-07T00:00:00",
  "likeCount": "",
  "location": "United States",
  "publishTime": "",
  "viewCount": "9300000"
}
```

Example 4

```json
{
  "UserId": "UCKlSCO8Tnr1_QUSDNjWCwjA",
  "Username": "MuscleBlaze",
  "accountName": "MuscleBlaze",
  "articleType": "short",
  "channelDescriptionLinks": "[{\"text\": \"muscleblaze.com\", \"url\": \"http://www.muscleblaze.com\"}]",
  "channelThumbnailList": "[{\"height\": 900, \"url\": \"https://yt3.googleusercontent.com/NSEc_yyb3bEuHrrV6y4kslw8iiQJz22D_cH22jxsIoSS6VPDHSDVUjlnsccYcZlTPOsINwKh=s900-c-k-c0x00ffffff-no-rj\", \"width\": 900}]",
  "commentCount": "7",
  "contentId": "65AcXryyerQ",
  "contentText": "Everyone says, \"Trust your gut.\"\n\nBut what if your gut has been making questionable decisions?\n\nWatch Ashneer Grover learn that lesson the hard way in this hilarious new film, where one gut feeling leads to a very interesting decision.\n\nBecause when it comes to whey protein, what matters isn't just how much protein you consume, it's how much your body actually absorbs.\n\nWith 50% higher protein absorption and 2 U.S. patents, Biozyme Performance Whey helps your body make better use of every scoop, supporting a lighter gut and better performance.\n\nCertified by Labdoor (USA), Informed Choice (UK), and Trustified (Asia), it's one of the most rigorously tested whey proteins on the market.\n\nBetter absorption. Better gut. Better gut feeling.\n\n#AshneerGrover #BiozymePerformanceWhey #WheyProtein #ProteinAbsorption #GutHealth #Fitness #MuscleRecovery #GymNutrition #SportsNutrition #ProteinSupplement\n\nStack your stock of 100% genuine supplements from: https://www.muscleblaze.com/",
  "contentTitle": "The Cost of a Bad Gut Feeling | Ft. Ashneer Grover | Biozyme Performance Whey",
  "contentUrl": "https://www.youtube.com/shorts/65AcXryyerQ",
  "fansCount": "1060000",
  "hashtags": "[\"#AshneerGrover\", \"#GutHealth\", \"#MuscleRecovery\", \"#BiozymePerformanceWhey\", \"#WheyProtein\", \"#ProteinAbsorption\", \"#Fitness\", \"#GymNutrition\", \"#SportsNutrition\", \"#ProteinSupplement\"]",
  "input": "https://www.youtube.com/@MuscleBlaze",
  "isVerified": "TRUE",
  "joinedDate": "",
  "likeCount": "187",
  "location": "India",
  "publishTime": "2026-06-08T00:00:00",
  "viewCount": "7500"
}
```

Example 5

```json
{
  "UserId": "UCmSMymgGOIp-RsWA0py1y4A",
  "Username": "TheWholeTruthFoodsYT",
  "accountName": "The Whole Truth",
  "articleType": "short",
  "channelDescriptionLinks": "[{\"text\": \"bit.ly/3mWhu02\", \"url\": \"https://bit.ly/3mWhu02\"}]",
  "channelThumbnailList": "[{\"height\": 900, \"url\": \"https://yt3.googleusercontent.com/QuUcjPlZ0IJQzyTuuLP5_NBQvxyMG_LjtxtkEvaaX6c_AWREv8B5iT3iWK4BMbXONVz3EEaxug=s900-c-k-c0x00ffffff-no-rj\", \"width\": 900}]",
  "commentCount": "3",
  "contentId": "ZamsUThQcEE",
  "contentText": "What's the real truth behind the 10,000 steps?\nShould you chase ten thousand or find your optimal number?\n\n#ytshorts #youtubeshorts #Youtube",
  "contentTitle": "Pt 1 Should You Complete those 10K Steps? #ytshorts",
  "contentUrl": "https://www.youtube.com/shorts/ZamsUThQcEE",
  "fansCount": "65400",
  "hashtags": "[\"#ytshorts\", \"#youtubeshorts\", \"#Youtube\"]",
  "input": "https://www.youtube.com/@TheWholeTruthFoodsYT",
  "isVerified": "FALSE",
  "joinedDate": "2020-08-19T00:00:00",
  "likeCount": "143",
  "location": "India",
  "publishTime": "2024-05-13T00:00:00",
  "viewCount": "4900"
}
```

## API

`POST https://openapi.octoparse.com/api/agentTools/executeTask`

This is the OpenAPI Agent Tools `executeTask` endpoint. Authenticate with a Bearer token.

Request body:

`templateName` is the template slug; `parameters` is a JSON object string whose keys match Input Schema; `taskName`, `idempotencyKey`, and `maxCollectedRows` are optional.

Obtain a token:

```http
POST https://openapi.octoparse.com/token
Content-Type: application/json

{
  "username": "YOUR_USERNAME",
  "password": "YOUR_PASSWORD",
  "grant_type": "password"
}
```

Use `data.access_token` as `Authorization: Bearer <token>`. After starting, poll `getTaskStatus` and export with `exportData`.

```json
{
  "templateName": "youtube-shorts-scraper",
  "taskName": "YouTube Shorts Scraper",
  "parameters": "{\"userAccount/AccountUrl/ShortUrls\":[\"@FoxNews\"]}"
}
```

## Python Example

```python
import json
import requests

OPENAPI_BASE = "https://openapi.octoparse.com"
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"

parameters = json.loads("{\"userAccount/AccountUrl/ShortUrls\":[\"@FoxNews\"]}")

response = requests.post(
    f"{OPENAPI_BASE}/api/agentTools/executeTask",
    headers={
        "Authorization": f"Bearer {ACCESS_TOKEN}",
        "Content-Type": "application/json",
    },
    json={
        "templateName": "youtube-shorts-scraper",
        "taskName": "YouTube Shorts Scraper",
        "parameters": json.dumps(parameters, ensure_ascii=False),
    },
    timeout=60,
)
print(response.status_code)
print(response.json())
```

## HTTP/cURL Example

```bash
curl -X POST "https://openapi.octoparse.com/api/agentTools/executeTask" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON'
{
  "templateName": "youtube-shorts-scraper",
  "taskName": "YouTube Shorts Scraper",
  "parameters": "{\"userAccount/AccountUrl/ShortUrls\":[\"@FoxNews\"]}"
}
JSON
```

## MCP Setup

Connect an MCP-compatible AI client to `https://mcp.octoparse.com` using browser OAuth or an Octoparse API key. Find `youtube-shorts-scraper`, inspect its inputs, create a cloud task with the exact Input Schema keys, and export JSON results.

## Machine-readable Resources

- [Template contract](https://www.octoparse.com/templates/youtube-shorts-scraper.json)
- [Manifest](https://www.octoparse.com/templates/youtube-shorts-scraper-manifest.json)
