YouTube Shorts Scraper - Channel and Keyword Shorts avatar

YouTube Shorts Scraper - Channel and Keyword Shorts

Pricing

from $0.38 / 1,000 shorts

Go to Apify Store
YouTube Shorts Scraper - Channel and Keyword 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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

6

Monthly active users

6 hours ago

Last modified

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.

InputChannel links, @handles, UC ids, keywords, or a mix
OutputOne row per Short: exact views and likes, publish date, duration, title, thumbnail, channel name, id and link
Ceiling20 targets and 5,000 rows per run
Account neededNone 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 getField
The 11 character id and the /shorts/ linkvideoId, url
Titletitle
Exact views, the feed's rounded text, and a flag when only the rounded figure was availableviewCount, viewCountText, viewCountIsApproximate
Exact likeslikeCount
Publish date, or the relative text on search rowspublishedAt, publishedTimeText
Length in secondsdurationSeconds
Thumbnailthumbnail
The channel: name, id and linkchannelName, channelId, channelUrl
Which of your channels or keywords produced the row, and its place in that listinput, searchQuery, position
Why the exact stats did not come back, when they did notstatsError

โ–ถ๏ธ How to scrape YouTube Shorts

  1. Open YouTube Shorts Scraper and click Try for free.
  2. Press Start with the input empty first. You get the free sample row and can see the shape.
  3. Paste channels into Channel URLs or handles, or keywords into Keywords.
  4. Set Maximum rows. Keep it small while you are testing.
  5. 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"
}
FieldDefaultWhat it is
channelUrlsnoneChannel links, @handles, /channel/UC, /c/, /user/ and legacy vanity links, or a bare UC id.
searchQueriesnoneKeywords. One row per matching Short. Mix them with channels in the same run.
maxItemsnone (the form starts at 20)Rows across the whole run, split evenly between targets. 1 to 5,000. This is your spend cap.
maxItemsPerTargetnoneOptional hard cap per channel or keyword. Leave it empty and the budget simply splits evenly.
includeStatsonAdds the exact view count, like count, publish date and duration. Only an explicit false turns it off.
sortBynone (the form starts at newest)newest orders the collected Shorts by real publish date. feed keeps YouTube's own order.
proxyUrlsnoneLeave 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"
}
FieldHow to read it
urlThe /shorts/<id> link. The same video also plays at /watch?v=<id>.
viewCount, viewCountIsApproximateThe exact figure when stats came back. When they did not, the count is parsed from the feed text and the flag turns true.
likeCountExact, or null when the creator hides likes or the stats request failed.
publishedAt, publishedTimeTextA real UTC timestamp when stats came back. The relative string is what search rows carry instead.
searchQuerynull on channel rows.
positionWhere 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.

RowHow to spot itBilled
A ShortrecordType: "short"yes
The free samplerecordType: "sample", _sample: trueno
A diagnosticrecordType: "diagnostic", ok: false, an errorCodeno

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.

CodeWhat it means
NO_RESULTSThe channel has never posted a Short.
NOT_FOUNDThe handle does not resolve.
BLOCKED, RATE_LIMITED, SERVER_ERROR, NETWORKThat target would not answer this run. Re-running usually clears it.
TIME_BUDGETThe run ran out of time before reaching that target.
PROXY_INPUT_ADJUSTEDA connection setting in your input could not be used and was replaced. The run carried on.
CHARGE_ERRORSome charges could not be recorded.
UNEXPECTED_ERRORSomething 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:

  1. Run this on a keyword in your niche and sort the rows on viewCount.
  2. Paste the url of the top Shorts into the Video URLs or IDs box of YouTube Transcript Scraper to read how each one opens.
  3. 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.
  • newest sorts what this run collected, not YouTube's whole catalogue for that target.
  • Hidden likes stay hidden. likeCount comes back null rather 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 wantUse
Shorts from a channel or a keyword, with exact view and like countsThis one
Ordinary videos by keyword, or a channel's newest uploadsYouTube Scraper
A channel's uploads, up to 2,000 per runYouTube Channel Scraper
What a Short says, as text, SRT and VTTYouTube Transcript Scraper
The Short itself as a fileYouTube Downloader Pro
To publish your own vertical clip as a ShortYouTube Uploader Pro for Shorts
The same kind of short video from TikTokTikTok Scraper
The reels on a public Instagram profileInstagram 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.

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.