YouTube Shorts Scraper - Channel and Keyword Shorts
Pricing
from $0.38 / 1,000 shorts
YouTube Shorts Scraper - Channel and Keyword Shorts
Scrape YouTube Shorts from any channel's Shorts tab or by keyword, no login. Each row has the title, video id, URL, exact view count and exact like count, plus the publish date, duration, thumbnail, channel name and id. Up to 5,000 Shorts per run. $0.40 per 1,000 Shorts.
Pricing
from $0.38 / 1,000 shorts
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
6
Monthly active users
6 hours ago
Last modified
Categories
Share
Scrape YouTube Shorts from a channel or a keyword, with exact view and like counts: give it
channels and you get their Shorts feeds, newest first; give it keywords and you get the Shorts that
match. Every row carries the exact view count and like count, not the rounded "15M" the feed
prints, plus the publish date, duration, thumbnail and channel.
Worth knowing before you plan around it: a keyword search returns YouTube's best matches for that
phrase, not every Short that exists, and newest only sorts what the run collected.
| Input | Channel links, @handles, UC ids, keywords, or a mix |
| Output | One row per Short: exact views and likes, publish date, duration, title, thumbnail, channel name, id and link |
| Ceiling | 20 targets and 5,000 rows per run |
| Account needed | None from you |
| Price | $0.40 per 1,000 Shorts, flat on every plan. The free plan's $5 a month covers about 12,500 |
๐ What YouTube Shorts Scraper does
Channel Shorts come from the channel's own Shorts tab, so they are Shorts because YouTube filed them there, not because something guessed from their length. Keyword Shorts come from the Shorts filter on search, and the ordinary long videos YouTube mixes into that filter are dropped rather than returned.
With includeStats on, each Short gets one extra small request that turns the feed's rounded
"15M views" into the exact 15198235, and adds the exact like count, the real publish date and the
duration. Turn it off for a quicker run that returns only what the feed itself carries. The price per
row is the same either way.
maxItems is the budget for the whole run, split evenly between your targets. Four targets and 60
rows gives fifteen of each. A Short that two of your targets both return is dropped before it is
enriched, so it is never returned or billed twice.
๐ What data you get from each YouTube Short
| What you get | Field |
|---|---|
The 11 character id and the /shorts/ link | videoId, url |
| Title | title |
| Exact views, the feed's rounded text, and a flag when only the rounded figure was available | viewCount, viewCountText, viewCountIsApproximate |
| Exact likes | likeCount |
| Publish date, or the relative text on search rows | publishedAt, publishedTimeText |
| Length in seconds | durationSeconds |
| Thumbnail | thumbnail |
| The channel: name, id and link | channelName, channelId, channelUrl |
| Which of your channels or keywords produced the row, and its place in that list | input, searchQuery, position |
| Why the exact stats did not come back, when they did not | statsError |
โถ๏ธ How to scrape YouTube Shorts
- Open YouTube Shorts Scraper and click Try for free.
- Press Start with the input empty first. You get the free sample row and can see the shape.
- Paste channels into Channel URLs or handles, or keywords into Keywords.
- Set Maximum rows. Keep it small while you are testing.
- Download the dataset as JSON, CSV or Excel, or read it over the Apify API.
๐ฐ How much does it cost to scrape YouTube Shorts?
$0.40 per 1,000 Shorts. Flat on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 12,500 Shorts.
You pay per Short row delivered. The sample row, diagnostic rows, duplicates inside a run and the long videos discarded from a filtered search are never billed. A channel that has never posted a Short delivers no charged rows, just one uncharged diagnostic saying so.
๐ฅ What you give it
{"channelUrls": ["https://www.youtube.com/@MrBeast", "@mkbhd"],"searchQueries": ["cooking hacks"],"maxItems": 60,"sortBy": "newest"}
| Field | Default | What it is |
|---|---|---|
channelUrls | none | Channel links, @handles, /channel/UC, /c/, /user/ and legacy vanity links, or a bare UC id. |
searchQueries | none | Keywords. One row per matching Short. Mix them with channels in the same run. |
maxItems | none (the form starts at 20) | Rows across the whole run, split evenly between targets. 1 to 5,000. This is your spend cap. |
maxItemsPerTarget | none | Optional hard cap per channel or keyword. Leave it empty and the budget simply splits evenly. |
includeStats | on | Adds the exact view count, like count, publish date and duration. Only an explicit false turns it off. |
sortBy | none (the form starts at newest) | newest orders the collected Shorts by real publish date. feed keeps YouTube's own order. |
proxyUrls | none | Leave it empty. Fill it in only if you want the traffic to leave through servers you already pay for. |
Channels and keywords together count towards the 20 target limit. The input form starts
maxItems at 20 and sortBy at newest, so an API caller that wants something else should send it.
๐ค What you get back
A real row from a real run:
{"ok": true,"charged": true,"recordType": "short","input": "https://www.youtube.com/@MrBeast","searchQuery": null,"videoId": "T_SMf9j50uc","title": "Can We Build an Entire Village?","url": "https://www.youtube.com/shorts/T_SMf9j50uc","viewCount": 15198235,"viewCountText": "15M views","viewCountIsApproximate": false,"likeCount": 569725,"publishedAt": "2026-09-18T16:00:01.000Z","publishedTimeText": null,"durationSeconds": 39,"thumbnail": "https://i.ytimg.com/vi/T_SMf9j50uc/frame0.jpg","channelName": "MrBeast","channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA","channelUrl": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA","position": 1,"statsError": null,"scrapedAt": "2026-09-21T01:23:09.898Z"}
| Field | How to read it |
|---|---|
url | The /shorts/<id> link. The same video also plays at /watch?v=<id>. |
viewCount, viewCountIsApproximate | The exact figure when stats came back. When they did not, the count is parsed from the feed text and the flag turns true. |
likeCount | Exact, or null when the creator hides likes or the stats request failed. |
publishedAt, publishedTimeText | A real UTC timestamp when stats came back. The relative string is what search rows carry instead. |
searchQuery | null on channel rows. |
position | Where the Short sat within its target after ordering, starting at 1. |
๐งพ Reading the output
Three kinds of row can land in your dataset, and recordType is the field that tells them apart.
| Row | How to spot it | Billed |
|---|---|---|
| A Short | recordType: "short" | yes |
| The free sample | recordType: "sample", _sample: true | no |
| A diagnostic | recordType: "diagnostic", ok: false, an errorCode | no |
charged is a row-type marker written alongside recordType: real rows carry true, the sample and
diagnostics carry false. Treat it as "this is a data row", not as a receipt. The run's own charged
event count is the receipt.
| Code | What it means |
|---|---|
NO_RESULTS | The channel has never posted a Short. |
NOT_FOUND | The handle does not resolve. |
BLOCKED, RATE_LIMITED, SERVER_ERROR, NETWORK | That target would not answer this run. Re-running usually clears it. |
TIME_BUDGET | The run ran out of time before reaching that target. |
PROXY_INPUT_ADJUSTED | A connection setting in your input could not be used and was replaced. The run carried on. |
CHARGE_ERROR | Some charges could not be recorded. |
UNEXPECTED_ERROR | Something broke inside the run. It is not charged. |
A run whose time limit or maximum cost leaves no room for a single Short ends as failed, rather than finishing with nothing.
The Overview table hides recordType, charged and errorCode. In the Console table the sample
row and the diagnostics look like ordinary Shorts. Download the JSON, or filter on recordType,
before counting anything.
๐ก What people use it for
- Tracking what a rival channel posts as Shorts and how the view counts move week to week.
- Finding the format that works for a keyword before shooting your own.
- Pulling exact view and like counts for a report, which the feed's rounded text cannot give you.
- Feeding Short links into a downloader or a transcript actor for the ones worth studying.
From a keyword to the hooks that work, in three runs:
- Run this on a keyword in your niche and sort the rows on
viewCount. - Paste the
urlof the top Shorts into the Video URLs or IDs box of YouTube Transcript Scraper to read how each one opens. - Paste the same links into the Video URLs box of YouTube Comments Scraper to see what viewers asked for.
๐ง What it does not do
- No comments, descriptions, hashtags, audio or transcripts. Rows describe the Short, not what is in it. Other actors cover those, in the table below.
- Keyword results are matches, not an index. YouTube decides what a phrase returns, and a second run can return a slightly different set.
newestsorts what this run collected, not YouTube's whole catalogue for that target.- Hidden likes stay hidden.
likeCountcomes backnullrather than guessed. - Nothing signed in. Members-only and age-restricted Shorts are not reachable.
- 20 targets per run, counting channels and keywords together.
- A channel with no Shorts tab returns a diagnostic, not an empty success.
๐งญ Which YouTube scraper do you need?
| If you want | Use |
|---|---|
| Shorts from a channel or a keyword, with exact view and like counts | This one |
| Ordinary videos by keyword, or a channel's newest uploads | YouTube Scraper |
| A channel's uploads, up to 2,000 per run | YouTube Channel Scraper |
| What a Short says, as text, SRT and VTT | YouTube Transcript Scraper |
| The Short itself as a file | YouTube Downloader Pro |
| To publish your own vertical clip as a Short | YouTube Uploader Pro for Shorts |
| The same kind of short video from TikTok | TikTok Scraper |
| The reels on a public Instagram profile | Instagram Reel Scraper |
โ Questions people ask
Do I need a YouTube account to scrape Shorts?
No. Everything here works signed out, and there is no API key.
Is maxItems per target?
No, per run. It is split evenly between your targets unless you set maxItemsPerTarget.
Why is one row's view count rounded?
Its stats request did not come back. viewCountIsApproximate is true on exactly those rows, and
statsError says what happened.
Can I get Shorts published between two dates?
Not directly. Sort by newest, pull more rows than you need, and filter on publishedAt yourself.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/youtube-shorts-scraper. Either way
the run happens on your Apify account at the same price.
Is scraping YouTube Shorts legal?
This reads public Shorts and public channel pages, nothing signed in. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
๐ If something breaks
Open the Issues tab on the actor page. Include the channel or keyword you used and the run ID, and the log is enough for us to see what happened.