YouTube Shorts Scraper avatar

YouTube Shorts Scraper

Pricing

$19.99/month + usage

Go to Apify Store
YouTube Shorts Scraper

YouTube Shorts Scraper

YouTube Shorts Scraper extracts data from YouTube Shorts, including titles, captions, creators, thumbnails, metrics, sounds, hashtags, and timestamps. Ideal for trend tracking, content research, competitor analysis, and automating structured YouTube Shorts insights at scale.

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

3 days ago

Last modified

Share

YouTube Shorts Scraper — Views, Likes and Channel Data

YouTube Shorts Scraper pulls Shorts from any YouTube channel or search keyword and returns them as structured JSON — title, view count, likes, duration, publish date, comments, hashtags, and the uploading channel's subscriber count, avatar, and about-page details. Point it at a channel handle, a full URL, or a plain keyword like "funny shorts," and every Short it finds lands in your dataset as one typed row. Content strategists, social listening teams, and researchers use it to track a channel's Shorts output or scan a topic across many creators at once, without ever opening a video player.

What is YouTube Shorts Scraper?

YouTube Shorts Scraper is an Apify Actor that reads a channel's Shorts feed or a Shorts-filtered YouTube search and returns each Short as a structured dataset row. No YouTube account, login, or API key is required — it sends anonymous requests to YouTube's own internal endpoints, the same ones the youtube.com web app uses to render the page you'd see as a visitor.

  • Discovery by four input shapes — channel handle (@MrBeast), plain username (mrbeast), full channel or Shorts URL, or a free-text search keyword — the Actor detects which one you gave it
  • Automatic keyword fallback — if a channel-style input has no Shorts tab content, the Actor retries it as a keyword search instead of returning nothing
  • Engagement fields — view count, likes, comment count, and whether comments are turned off
  • Channel context on every row — subscriber count, join date, verification badge, avatar and banner URLs, and a nested aboutChannelInfo summary, with no separate channel lookup needed
  • Sort and date filters — newest, oldest, or most popular by views, plus a publish-date cutoff (see the constraints below before you rely on it)
  • Export as JSON, CSV, or Excel, or read the dataset straight through the Apify API

What data can I extract with YouTube Shorts Scraper?

Every Short is one dataset row with 41 fields covering the video itself, the channel that posted it, and how the Actor found it. The default dataset view surfaces the 17 most-used columns; every field below is written to the underlying row regardless of which columns you display.

FieldExample valueUse case
title"Satisfying sounds #asmr #funny"Headline text for indexing or display
type"shorts"Constant record-type marker
id"gnuiMgTzKMQ"11-character YouTube video ID
url"https://www.youtube.com/shorts/gnuiMgTzKMQ"Canonical watch link
thumbnailUrl"https://i.ytimg.com/vi/gnuiMgTzKMQ/hqdefault.jpg"Preview image
viewCount1180Engagement ranking, popularity sort
date"2026-06-24T10:01:00.000Z"Freshness filtering, timeline sorting
likes198Engagement ranking
locationnullRecording location, when YouTube exposes it
channelName"Coco Creator Rainbow"Display / grouping
channelUrl"https://www.youtube.com/channel/UC3N1..."Canonical channel link
channelUsername"rainbowicecream9780"The channel's @handle
channelId"UC3N1VbltR6aREupzvJ8y-sw"Stable channel identifier
channelDescription"Thank you so much!..."Channel bio text
channelJoinedDate"Aug 9, 2021"Channel age
channelDescriptionLinks[]Outbound links in the channel bio
channelLocation"United States"Channel's stated country
channelAvatarUrl"https://yt3.googleusercontent.com/..."Profile image
channelBannerUrl"https://yt3.googleusercontent.com/..."Channel banner image
channelTotalVideos193Channel output volume
channelTotalViews917769889Channel-wide reach
numberOfSubscribers1390000Reach / audience size
isChannelVerifiedfalseTrust signal
inputChannelUrl"https://www.youtube.com/@rainbowicecream9780"Normalized handle URL
isAgeRestrictedfalseContent gating flag
aboutChannelInfo{ "channelName": "...", "numberOfSubscribers": 1390000, ... }Same channel fields bundled as one nested object
duration"00:00:26"Format filtering, runtime analysis
commentsCount0Engagement, null when not found
text""Full Short description
descriptionLinks[]Outbound links parsed from the description
subtitlesnullCaption tracks: url, languageCode, name
order1Rank within this run's result set after sorting
commentsTurnedOfffalseWhether the creator disabled comments
fromYTUrl"https://www.youtube.com/@rainbowicecream9780/shorts"The page the Actor listed this Short from
isMonetizednullMonetization flag, when YouTube reports it
hashtags["asmr", "funny"]Parsed from the description or title
formats[{ "quality": "1080p", "url": "https://...(truncated)..." }]Stream metadata — see the note below
isMembersOnlyfalseChannel-membership gating flag
input"https://www.youtube.com/@rainbowicecream9780"The original startUrls entry that produced this row
fromChannelListPage"shorts""shorts" or "search" — how the video was discovered
isPaidContentfalsePaid-promotion disclosure flag

Engagement and channel fields

viewCount, likes, commentsCount, and commentsTurnedOff are the per-video engagement signals. numberOfSubscribers, channelTotalVideos, channelTotalViews, isChannelVerified, and channelJoinedDate describe the channel behind the Short — all fetched in the same run, so you never need a second lookup to know who posted a viral Short and how established their channel is.

Discovery and freshness fields

order and fromChannelListPage tell you how a row was found — its rank in the run and whether it came from a channel's Shorts tab or a keyword search. date, combined with sortOrder and publishedAfter, is what you filter and sort on for anything time-sensitive.

One field to note: formats[].url is a stream URL truncated to 120 characters with "..." appended — a format fingerprint, not a working download link. If you need playable video files, this is a metadata scraper, not a downloader.

⚠️ maxResults and publishedAfter don't behave exactly as described

Two input parameters have real edge cases worth knowing before your first run, verified directly from the Actor's source.

maxResults has a floor of 10. Internally, the Actor computes its collection target as max(10, maxResults) — so setting maxResults to any value from 1 to 9 still collects up to 10 Shorts, not fewer. The dataset is not trimmed back down to your requested number afterward. If you need exactly one or two rows, filter after the run rather than relying on a low maxResults.

publishedAfter only recognizes three literal patterns. The schema's datepicker accepts an absolute date (YYYY-MM-DD) or a relative phrase, but the filter logic checks for substrings, not a real date parser: a value containing both "7" and "day" (e.g. "7 days"), a value containing both "30" and "day" (e.g. "30 days"), or a value containing both "1" and "year" (e.g. "1 year"). Anything else — an absolute YYYY-MM-DD date, "2 weeks", "1 month", "14 days" — matches none of the three checks, so no cutoff is applied and the run returns every Short it finds, unfiltered by date. Use the exact phrases "7 days", "30 days", or "1 year" if you need the filter to actually take effect.

How does YouTube Shorts Scraper differ from the official YouTube Data API?

YouTube publishes an official Data API v3, and its search.list endpoint can list a channel's uploads or search across YouTube — but it has no dedicated Shorts resource type or filter parameter. Using it for a bulk Shorts-only feed means fetching contentDetails.duration for every candidate video and filtering to short runtimes yourself. It also requires a Google Cloud project and an API key, and every call is metered against a daily quota that Google sets and can change — check Google's current Data API documentation for the live terms before planning volume around it.

FeatureYouTube Data API v3YouTube Shorts Scraper
Setup requiredGoogle Cloud project, API keyApify account only
Daily quotaGoogle-set unit quota, subject to changeNo API quota to manage
Dedicated Shorts filterNo distinct Shorts resource typeReads the channel's Shorts tab directly, plus a Shorts-typed search request
Keyword search fallbackYou build and paginate search.list yourselfBuilt in — retries as a keyword search automatically
Channel about-page fieldsSeparate channels.list call per channelIncluded on the same row as aboutChannelInfo
Output shapeRaw per-endpoint API JSONOne flat, typed dataset row per Short

Why doesn't the Data API just return Shorts?

Shorts are not a first-class resource type in the Data API — they are ordinary uploads under 60 seconds shown in a distinct UI surface, not a separately filterable category. search.list will hand back both Shorts and regular videos mixed together for any query. This Actor's own code has to work around the same gap: it uses YouTube's internal "Type: Shorts" search parameter first, and when a result doesn't come back tagged clearly as a Short, it falls back to inspecting the thumbnail overlay style and video length to confirm it. That's the practical reason a purpose-built scraper exists here rather than a thin Data API wrapper.

Use the official Data API when you already have a Google Cloud project, need other YouTube resources beyond Shorts, or want Google's supported terms for a production integration. Use YouTube Shorts Scraper when you want Shorts specifically, without managing quota, keys, or a duration-filtering step yourself.

How to use data extracted from YouTube Shorts?

Content strategists and creators

Point startUrls at your own channel or a handful of competitors, set sortOrder to "popular", and pull title, viewCount, likes, duration, and hashtags for the Shorts that are actually landing. Comparing your top performers' hashtags and duration against a competitor's gives you a concrete pattern to test next, instead of guessing from the public view counter alone.

Agencies and social listening

Run the same keyword or client-channel list on a recurring Apify schedule and diff viewCount, numberOfSubscribers, and commentsCount run over run to flag a Short that's accelerating or a channel that's growing fast enough to matter for a brand-monitoring report.

Market research and trend intelligence

Search a topic keyword instead of a channel — "funny shorts", "cooking hacks" — and group the results by channelName and hashtags to see which creators and tags are currently active in a niche, using date and viewCount together to separate a sustained trend from a single viral spike.

AI agents and automated pipelines 🤖

Because every row is typed JSON with a stable 41-key shape, it drops straight into an agent tool call or a RAG index. text, title, and hashtags carry the descriptive content for retrieval; channelName, numberOfSubscribers, and date give an agent the structured facts it needs to answer "who's currently posting about X, and how big are they" without re-scraping anything itself.

⬇️ Input

ParameterRequiredTypeDescriptionExample Value
startUrlsYesarrayWhere to scrape Shorts from. Add one or more: channel handles (@MrBeast), usernames (mrbeast), full URLs (https://www.youtube.com/@MrBeast), or search keywords (e.g. funny shorts). Default ["rainbowicecream9780"].["@MrBeast", "cooking hacks"]
maxResultsNointegerMaximum number of Shorts to scrape per channel or keyword. Ranges from 1 to 10,000. Higher = more data, longer run. Minimum 1, maximum 10000, default 10.50
publishedAfterNostringFilter by publish date. Use a date (YYYY-MM-DD) or relative time (e.g. 7 days, 2 weeks, 1 month, 1 year). Leave empty to include all Shorts. See the constraints above — only "7 days", "30 days", and "1 year" are actually applied."7 days"
sortOrderNostringOrder of results: Newest first, Oldest first, or by Popularity (views). Enum: "newest" (Newest), "popular" (Popular), "oldest" (Oldest). Default "newest"."popular"
proxyConfigurationNoobjectTurn on Apify Proxy for more reliable scraping (useful in EU or restricted regions). Off = direct connection; works in most regions and for Apify QA.{"useApifyProxy": false}

Example input

{
"startUrls": ["@MrBeast", "mrbeast", "https://www.youtube.com/@MrBeast", "funny shorts"],
"maxResults": 50,
"publishedAfter": "30 days",
"sortOrder": "popular",
"proxyConfiguration": { "useApifyProxy": false }
}

Common pitfall: mixing a channel entry with a single common word. A one-word startUrls entry like "funny" first resolves to @funny/shorts; if that channel's Shorts tab comes back empty, the Actor automatically retries the same entry as a keyword search — so you may get keyword-search results back for what looked like a channel handle. Use the full @handle or channel URL when you specifically mean a channel.

⬆️ Output

Every run pushes typed, normalized JSON — the same 41 keys on every row, in the same order, whether the row came from a channel's Shorts tab or a keyword search. Missing values come back as null (or [] for list fields) rather than a missing key, so downstream code never needs a presence check. Export as JSON, CSV, or Excel, or read the dataset through the Apify API.

Each row pushed to the dataset is billed once under the row_result charged event. An input that turns up nothing — a channel with no Shorts, or a search with no results — contributes zero rows and is not charged.

Example output

{
"title": "Satisfying sounds #asmr #funny #animation #shortvideo #music #shorts",
"type": "shorts",
"id": "gnuiMgTzKMQ",
"url": "https://www.youtube.com/shorts/gnuiMgTzKMQ",
"thumbnailUrl": "https://i.ytimg.com/vi/gnuiMgTzKMQ/hqdefault.jpg",
"viewCount": 1180,
"date": "2026-06-24T10:01:00.000Z",
"likes": 198,
"location": null,
"channelName": "Coco Creator Rainbow",
"channelUrl": "https://www.youtube.com/channel/UC3N1VbltR6aREupzvJ8y-sw",
"channelUsername": "rainbowicecream9780",
"channelId": "UC3N1VbltR6aREupzvJ8y-sw",
"channelDescription": "Thank you so much! I appreciate you all watching the videos.",
"channelJoinedDate": "Aug 9, 2021",
"channelDescriptionLinks": [],
"channelLocation": "United States",
"channelAvatarUrl": "https://yt3.googleusercontent.com/nVSr8lanf5UPU4Mc6oWOmKWqQ8VoFceHcQsM5sW63ZPp4r1S6M6pHr4stNOMGyknf1ig1Wjh3A=s160-c-k-c0x00ffffff-no-rj",
"channelBannerUrl": "https://yt3.googleusercontent.com/Wg27ZtirmK5sH4Bx7atk4CugZubFCTwsXZsKdITtWPT6aTiikJgl26heFNxnM16UJi0-qnlUxQ=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
"channelTotalVideos": 193,
"channelTotalViews": 917769889,
"numberOfSubscribers": 1390000,
"isChannelVerified": false,
"inputChannelUrl": "https://www.youtube.com/@rainbowicecream9780",
"isAgeRestricted": false,
"aboutChannelInfo": {
"channelDescription": "Thank you so much! I appreciate you all watching the videos.",
"channelJoinedDate": "Aug 9, 2021",
"channelDescriptionLinks": [],
"channelLocation": "United States",
"channelUsername": "rainbowicecream9780",
"channelAvatarUrl": "https://yt3.googleusercontent.com/nVSr8lanf5UPU4Mc6oWOmKWqQ8VoFceHcQsM5sW63ZPp4r1S6M6pHr4stNOMGyknf1ig1Wjh3A=s160-c-k-c0x00ffffff-no-rj",
"channelBannerUrl": "https://yt3.googleusercontent.com/Wg27ZtirmK5sH4Bx7atk4CugZubFCTwsXZsKdITtWPT6aTiikJgl26heFNxnM16UJi0-qnlUxQ=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
"channelTotalVideos": 193,
"channelTotalViews": 917769889,
"numberOfSubscribers": 1390000,
"isChannelVerified": false,
"channelName": "Coco Creator Rainbow",
"channelUrl": "https://www.youtube.com/channel/UC3N1VbltR6aREupzvJ8y-sw",
"channelId": "UC3N1VbltR6aREupzvJ8y-sw",
"inputChannelUrl": "https://www.youtube.com/@rainbowicecream9780",
"isAgeRestricted": false
},
"duration": "00:00:26",
"commentsCount": 0,
"text": "",
"descriptionLinks": [],
"subtitles": null,
"order": 1,
"commentsTurnedOff": false,
"fromYTUrl": "https://www.youtube.com/@rainbowicecream9780/shorts",
"isMonetized": null,
"hashtags": [],
"formats": [],
"isMembersOnly": false,
"input": "https://www.youtube.com/@rainbowicecream9780",
"fromChannelListPage": "shorts",
"isPaidContent": false
}

How do you filter and target specific Shorts?

Targeting on this Actor comes down to three real controls: what you search on, how you sort what comes back, and how much of it you keep.

Channel vs. keyword decides completeness. A channel handle, username, or URL scopes the run to exactly that creator's Shorts tab — accurate but limited to what they've posted. A free-text keyword scopes it to a Shorts-filtered YouTube search — broader, but a mix of creators and less predictable per-channel coverage. Mix both in the same startUrls array to cover a client list and a topic search in one run.

sortOrder is applied after the Shorts are collected, not as a live YouTube query parameter — "popular" re-ranks the fetched batch by viewCount descending, while "newest" and "oldest" re-rank by date. It changes the order you receive results in, not which Shorts get fetched in the first place.

publishedAfter and maxResults are the volume and freshness controls — but see the constraints section above before you rely on either one for precision: publishedAfter only recognizes "7 days", "30 days", and "1 year", and maxResults below 10 doesn't reduce the row count below 10.

{ "startUrls": ["@MrBeast"], "sortOrder": "popular", "maxResults": 50 }
{ "startUrls": ["funny shorts", "cooking hacks"], "sortOrder": "newest", "maxResults": 100 }
{ "startUrls": ["mrbeast"], "publishedAfter": "7 days", "sortOrder": "newest" }
ScraperWhat it extracts
YouTube Search Scraper — Channel Contact LinksYouTube search results with channel contact details
YouTube Video Details & Comments ScraperFull video metadata plus comment threads
YouTube Playlist Scraper — Creator Contact LinksPlaylist contents with creator contact data
YouTube Channel Keyword Research ScraperChannel-level keyword and content research
TikTok Video Scraper — Hashtag, Sound and ReachShort-form TikTok videos by hashtag or sound
Instagram Reels Hashtag ScraperShort-form Instagram Reels by hashtag

How to extract YouTube Shorts data programmatically

YouTube Shorts Scraper runs as a standard Apify Actor — one API call in, structured JSON out. Start it from the Apify Console, call it through apify_client, or trigger it on a recurring Apify schedule or webhook.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<YOUR_USERNAME>/youtube-shorts-scraper").call(run_input={
"startUrls": ["@MrBeast", "cooking hacks"],
"maxResults": 50,
"sortOrder": "popular",
})
for short in client.dataset(run["defaultDatasetId"]).iterate_items():
print(short["title"], short["viewCount"], short["channelName"])

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

Export to spreadsheets or CRM

Export the dataset as CSV or Excel directly from the Apify Console, or pull it through the API and map title, channelName, numberOfSubscribers, viewCount, and url into your tracking sheet or CRM columns — every field name stays the same across runs, so the mapping only needs to be set up once.

Scraping publicly visible video and channel data is broadly treated as permissible where no login or authentication is bypassed, and YouTube Shorts Scraper reads only what any anonymous visitor already sees on a channel's Shorts tab or in search results.

Titles, view counts, channel names, subscriber counts, and descriptions are public creator and business data — the kind YouTube surfaces to every visitor to promote the content — not private personal data, so GDPR's personal-data regime does not attach to this output the way it would to a private profile scrape. What does apply is YouTube's own Terms of Service and general database-rights and unfair-competition rules covering systematic reuse of a compiled dataset.

Consult legal counsel for commercial applications involving bulk storage of personal data, or before republishing extracted content as a competing product.

❓ FAQ

What if a channel has zero Shorts, or the search keyword returns nothing?

That input simply contributes zero rows — the Actor does not write a placeholder or error item to the dataset for it. Check the run log, which prints a line like 📊 <input>: 0 Shorts saved to dataset for every startUrls entry, successful or not.

Can I get channel data along with the Shorts?

Yes. Subscriber count, join date, verification status, avatar, banner, and total video/view counts are fetched automatically for every Short's channel and included on the same row — both as flat fields and bundled again under aboutChannelInfo. No separate channel lookup is needed.

How accurate is the view and like data?

The Actor returns the compact view and like counts exactly as YouTube displays them on the page at request time (for example, "1.2K" parses to 1200). Accuracy depends on YouTube's own reporting and updates whenever you re-run the Actor; there is no caching layer in between.

How many Shorts can I get per run?

Up to 10,000 per startUrls entry, set by maxResults. Note the floor covered above: any maxResults value under 10 still collects up to 10 Shorts rather than fewer, since the internal collection target is max(10, maxResults).

Does publishedAfter support any date I type in?

No — only the exact phrases "7 days", "30 days", and "1 year" are recognized by the current filter logic. An absolute YYYY-MM-DD date or any other relative phrase ("2 weeks", "1 month", "14 days") does not match, and the run returns every Short unfiltered by date. See the constraints section above.

Does sortOrder change which Shorts get collected, or just the order?

Just the order. sortOrder is applied after the Shorts are fetched — "popular" re-ranks the collected batch by view count, "newest"/"oldest" re-rank by publish date. It does not change which Shorts are found in the first place.

Does YouTube Shorts Scraper work with Claude, ChatGPT, and AI agent frameworks?

Yes, as a standard HTTP endpoint. Any agent framework that can call the Apify API — LangChain, CrewAI, a custom tool definition — can invoke it and receive typed JSON directly. It is not currently offered through an MCP server.

How does YouTube Shorts Scraper compare to other YouTube Shorts scrapers?

Checked on the Apify Store on 25 July 2026: streamers/youtube-shorts-scraper is the most-used dedicated Shorts scraper and documents an explicit error-item system (codes like CHANNEL_HAS_NO_SHORTS, VIDEO_UNAVAILABLE) written to the dataset alongside normal rows, plus MCP server access — this Actor instead simply contributes zero rows for an input that fails, logged rather than written as a dataset item. tictechid/anoxvanzi-Transcriber and convertfleetdotonline/youtube-downloader solve different problems entirely — transcription and direct-download URL resolution, respectively — rather than structured Shorts metadata and channel data.

Can I use YouTube Shorts Scraper without a YouTube API key or developer account?

Yes. No Google Cloud project, API key, or YouTube login is required — only an Apify account to run the Actor.

Conclusion

YouTube Shorts Scraper turns any channel's Shorts feed or a topic keyword into structured, 41-field JSON rows — engagement numbers, publish dates, and full channel context in a single run, with no YouTube API key to manage. It's built for content strategists benchmarking creators, agencies tracking clients on a schedule, and researchers or AI pipelines that need Shorts data in a stable schema rather than a raw page scrape. Open YouTube Shorts Scraper on Apify, paste in a channel or keyword, and start the run.

💬 Your feedback

Found a bug, or need a field that YouTube exposes but this Actor doesn't return yet? Open an issue on the Actor's Issues tab — reports that include the exact startUrls value you ran are the fastest to reproduce and fix.