Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
YouTube Shorts Scraper icon

YouTube Shorts Scraper

Scrape YouTube Shorts by channel or keyword. Titles, ids, URLs, exact views and likes, publish dates, thumbnails. No API key. $0.40/1k.

870 runs on Apify $0.0004 per short ($0.4 / 1,000)
Run this in the cloudRun on Apify →

Social Media Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust channelUrls, searchQueries, maxItems (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0004 per short = $0.4 per 1,000

You are charged forWhenPrice
Short scrapedEach YouTube Short written to the dataset. Sample and diagnostic rows are never charged.$0.0004

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-15, and they are what you are actually charged.

Inputs

FieldWhat it doesType
channelUrlsYouTube channels to pull Shorts from, newest first. Any format works: https://www.youtube.com/@MrBeast, @mkbhd, https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA, youtube.com/c/mkbhd, youtube.com/user/PewDiePie, or a bare UC... id. Up to 20 targets per run in total, counting keywords.array
searchQueriesSearch YouTube Shorts for these words or phrases. One row per matching Short. You can mix keywords and channels in the same run.array
maxItemsTotal number of Shorts to return across all channels and keywords. The budget is split evenly between the targets, so four targets and 60 rows gives you fifteen of each. Keep it low while you are testing - you pay per row.integer
maxItemsPerTargetHard cap on how many Shorts to take from each channel or keyword. Leave it empty and the maximum-rows budget is simply split evenly between your targets.integer
includeStatsOn by default. Adds one small request per Short to turn the rounded "27M views" the feed shows into the exact 27,549,434, and to add the exact like count, the publish date and the duration in seconds. Turn it off for a faster run that returns only what the feed itself carries. The price per row is the same either way.boolean
sortBy"Newest first" orders the Shorts this run collected by their real publish date. "Feed order" keeps the order YouTube served them in.string
proxyUrlsLeave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port.array

What you get

A structured dataset — each result includes fields like:

videoIdtitleurlviewCountlikeCountpublishedAtpublishedTimeTextdurationSecondsthumbnailchannelNamechannelIdchannelUrlviewCountTextposition

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Social Media Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

TikTok Scraper - Profiles, Videos, Hashtags & Search iconSocial Media Scrapers

TikTok Scraper - Profiles, Videos, Hashtags & Search

Scrape TikTok profiles, videos, hashtags and search. Play, like, comment and share counts. No login needed from you. $0.25 per 1,000.

5 use cases

Instagram Scraper - Profiles, Posts & Reels (No Login) iconSocial Media Scrapers

Instagram Scraper - Profiles, Posts & Reels (No Login)

Scrape Instagram profiles, posts and reels as JSON: followers, caption, likes, comments, media URLs. No login or API key. $0.45 per 1,000 items.

8 use cases

Tweet Scraper iconSocial Media Scrapers

Tweet Scraper

Scrape X (Twitter) tweets by handle or URL, no API key. Rows carry text, likes, retweets, views and author. Search needs your X cookie.

7 use cases

Twitter (X) User Scraper - Profiles & Followers, No Login iconSocial Media Scrapers

Twitter (X) User Scraper - Profiles & Followers, No Login

Scrape X (Twitter) profiles: followers, following, post count, name, bio and verification. No API key, no login. $0.14 per 1,000 profiles.

2 use cases

TikTok User Scraper - Profiles, Followers & Stats (No Login) iconSocial Media Scrapers

TikTok User Scraper - Profiles, Followers & Stats (No Login)

Scrape TikTok profiles without a login. Get follower, following, likes and video counts, bio, verified flag and avatar. $0.35 per 1,000 profiles.

1 use cases

Reddit Scraper iconSocial Media Scrapers

Reddit Scraper

Scrape Reddit posts with no login or API key. Rows carry titles, selftext, scores, authors, comment counts and permalinks. $0.50 per 1,000 rows, flat.

20 use cases

See all Social Media Scrapers →

YouTube Shorts Scraper: 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 first only sorts what the run collected.

InputChannel links, @handles, UC ids, keywords, or a mix
OutputOne row per Short
Ceiling20 targets and 5,000 rows per run
Account neededNone from you
Price$0.40 per 1,000 Shorts, flat on every plan

🎞️ 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 you give it

{
  "channelUrls": ["https://www.youtube.com/@MrBeast", "@mkbhd"],
  "searchQueries": ["cooking hacks"],
  "maxItems": 60,
  "sortBy": "newest"
}
FieldWhat it is
channelUrlsChannel links, @handles, /channel/UC, /c/, /user/ and legacy vanity links, or a bare UC id.
searchQueriesKeywords. One row per matching Short. Mix them with channels in the same run.
maxItemsRows across the whole run, split evenly between targets. 1 to 5,000. This is your spend cap.
maxItemsPerTargetOptional hard cap per channel or keyword. Leave it empty and the budget simply splits evenly.
includeStatsAdds the exact view count, like count, publish date and duration.
sortBynewest orders the collected Shorts by real publish date. feed keeps YouTube's own order.
proxyUrlsLeave 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, includeStats on and sortBy at newest, so an API caller that wants something else should send it. Run it with empty input and you get one labelled sample row, uncharged, so you can see the shape before spending.

📤 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"
}
FieldWhat it is
videoId, urlThe 11 character id, and the /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 this 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.
input, searchQueryThe target that produced the row, so you can join results back to your list. searchQuery is null on channel rows.
positionWhere the Short sat within its target after ordering, starting at 1.
statsErrorWhy the extra request failed for that Short, when it did. null otherwise.

🧾 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.

Common error codes: NO_RESULTS when a channel has never posted a Short, NOT_FOUND when a handle does not resolve, RATE_LIMITED or SERVER_ERROR when YouTube pushed back, NETWORK when it could not be reached, and TIME_BUDGET when the run ran out of time before reaching a target.

The Overview table hides all three of those columns. In the Console table the sample row and the diagnostics look like ordinary Shorts. Download the JSON, or filter on recordType, before counting anything.

▶️ How to run it

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?

$0.40 per 1,000 Shorts. Flat on every Apify plan, no volume tiers.

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 people use it for

  • Tracking what a competitor 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.

🚧 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, two of them linked 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, with exact view and like countsThis one
Ordinary videos by keyword, or a channel's uploadsYouTube Scraper
A channel's full upload list, with a higher ceilingYouTube Channel Scraper
The spoken words in a ShortYouTube Transcript Scraper
The Short itself as a fileYouTube Downloader

❓ Questions people ask

Do I need a YouTube account? 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.

Is scraping YouTube 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.