apihq/youtube-shorts-scraper · YouTube
YouTube Shorts Scraper
Export a YouTube channel's Shorts to JSON from a URL, @handle, or channel ID. One record per Short with title, views, and thumbnail.
$0.0004/short · failed items $0.0000 — on your existing Apify account, a one-item first run costs under a cent.
What does YouTube Shorts Scraper do?
Export a YouTube channel's Shorts to JSON by URL, @handle, or channel ID. No YouTube Data API key or quota. One record per Short with title, views, and thumbnail. Pay-per-Short: a channel that can't be resolved or has no Shorts returns a success:false row and is not charged.
Use it to track short-form trends, watch creators and competitors, or collect Short IDs to feed transcript jobs.
It reads the Shorts tab only. Use the YouTube Channel Scraper for long-form uploads.
Example run
{ "channelUrls": ["@MrBeast", "@totally-wrong-handle"], "maxResults": 5 }outcome
- 5 success: true Short rows from @MrBeast — billed
- 1 success: false row, code: CHANNEL_NOT_FOUND, for the bad handle — not billed
- Run status: SUCCEEDED
- Charged: 5 shorts = $0.002
Good input returns billed rows. Bad input returns free error rows in the same dataset, and the run still succeeds.
Why pipelines pick it
A bad channel never breaks the batch
Misspell a handle or hit a channel that never posted a Short and you get a success:false row back. The rest of the batch keeps going.
You pay only for Shorts
The charge fires per Short delivered, not per dataset write. There is no start fee, so a run that returns zero Shorts costs $0.
Every failure is machine-readable
Stable codes like CHANNEL_NOT_FOUND and NO_SHORTS let your pipeline branch on the error type instead of parsing error text.
No YouTube Data API key or quota
The official Data API needs a Google key and rations daily quota. This actor reads public data from a plain channel URL, @handle, or UC… ID.
Best for: Use it to track short-form trends, watch creators and competitors, or collect Short IDs to feed transcript jobs.
Input & output
{
"channelUrls": [
"https://www.youtube.com/@MrBeast",
"@mkbhd",
"UCX6OQ3DkcsbYNE6H8uQQuVA"
],
"maxResults": 100
}{
"success": true,
"channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"channel_title": "MrBeast",
"video_id": "LgbyEFILLJI",
"title": "$1 vs $10,000 Cake",
"url": "https://www.youtube.com/shorts/LgbyEFILLJI",
"type": "short",
"view_count": "2M views",
"thumbnail_url": "https://i.ytimg.com/vi/LgbyEFILLJI/oardefault.jpg",
"author": "MrBeast"
}{
"success": false,
"channel_url": "@totally-wrong-handle",
"code": "CHANNEL_NOT_FOUND",
"error": "Could not resolve YouTube channel: @totally-wrong-handle",
"request_id": "req_911f37d2e55644ff9d9e4a3f",
"status_code": 404
}Branch on the success field to split hits from misses. Quote the request_id in any support issue and we can trace the exact request.
output fields
| field | type | what it is |
|---|---|---|
| success | boolean | true for a Short (billed), false for a channel that could not be listed (free). |
| channel_id | string | The UC… channel ID the Short belongs to. |
| channel_title | string | The channel's display name. |
| video_id | string | The 11-character YouTube video ID of the Short. |
| title | string | Short title. |
| url | string | Canonical Short URL: youtube.com/shorts/<video_id>. |
| type | string | Content type. Always "short". |
| view_count | string | View count as a display string (e.g. "2M views"). May be empty. |
| thumbnail_url | string | URL of the largest available thumbnail. |
| author | string | Channel author name. |
Error codes, stable across releases
Every failure record carries one of these machine-readable codes. None of them are ever charged.
| code | billed | meaning |
|---|---|---|
| CHANNEL_NOT_FOUND | $0.0000 | The URL, @handle, or ID could not be resolved to a channel. |
| NO_SHORTS | $0.0000 | The channel exists but has never posted a Short. |
| VALIDATION_FAILED | $0.0000 | The input was not a valid channel URL, @handle, or UC… ID. |
| RESOLVE_TIMEOUT | $0.0000 | Resolving the channel identity timed out. |
| CHANNEL_SHORTS_TIMEOUT | $0.0000 | Listing the channel's Shorts timed out. |
| DEADLINE_EXCEEDED | $0.0000 | The per-channel deadline was hit. No charge. |
What a run costs
The charge fires only when a result is delivered, and platform compute is included in the per-result price. To cap the spend of a run, set a limit in Apify's Run Limits panel. The actor stops at the cap and reports how far it got.
What this actor doesn't do
- It reads the Shorts tab only. Use the YouTube Channel Scraper for long-form uploads.
- It returns what the Shorts tab exposes: title, view count, and thumbnail. The tab carries no duration or publish date. Likes, comments, and descriptions are out of scope.
- It returns Shorts newest first. There is no sort by popularity or oldest.
- It reads public channels only. Private and unavailable channels return success:false.
Frequently asked questions
- What input formats are accepted?
- A full channel URL, an @handle, or a UC… channel ID, mixed freely in the same batch. Up to 50 unique channels run per job.
- How many Shorts does it return per channel?
- Each channel is walked newest-first up to maxResults Shorts (default 30).
- Why is there no publish date or duration on Shorts?
- The Shorts tab does not expose them. Rather than guess or scrape each Short individually (which would multiply your cost), the Actor returns exactly what the tab carries: title, view count, and thumbnail.
- What does a channel with no Shorts cost?
- $0. It returns one success:false row with code NO_SHORTS and the run continues.
- Do I need a YouTube Data API key?
- No. The Actor reads YouTube's public data directly. No Google key, no quota.
Pairs with
YouTube Transcript Scraper
Scrape YouTube transcripts, captions, and subtitles as timestamped JSON. One video or a batch of 50. No YouTube Data API key or quota, no browser.
YouTube Channel Scraper
Export a YouTube channel's videos to JSON from a URL, @handle, or channel ID. One record per video with title, views, duration, and thumbnail.
Run it on the Apify account you already have
Paste one input into the actor's console and check the dataset it returns. A one-item first run costs under a cent — no new subscription, pay only for delivered results.
List a channel's Shorts