YouTube Shorts Scraper: Sponsor Segments, Sentiment & Topics
Pricing
Pay per usage
YouTube Shorts Scraper: Sponsor Segments, Sentiment & Topics
YouTube Shorts Scraper extracts Shorts from any YouTube channel or search query. Capture video URLs, titles, creators, views, likes, comments, audio, and metadata. Ideal for trend research, content analysis, competitive tracking, and workflows needing structured YouTube Shorts data.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
YouTube Shorts Scraper — Sponsor Segments, Sentiment & Topics
YouTube Shorts Scraper pulls Shorts video metadata and three computed brand-safety signals — sponsor-segment detection, sentiment scoring, and topic extraction — from any channel, handle, username, or keyword search, plus the channel's own creator details. Every response is typed, normalized JSON: no HTML, no selectors, no parsing step before it reaches your pipeline or an LLM. Point it at a creator and rows stream into the dataset as each Short finishes. After reading this page you will know which fields are populated, which are reserved placeholders, and where the real limitations sit.
What is YouTube Shorts Scraper: Sponsor Segments, Sentiment & Topics?
YouTube Shorts Scraper is an Apify Actor that turns a YouTube channel, handle, username, or free-text keyword into a structured dataset of Shorts videos, their channel/creator context, and computed brand-safety analytics. No YouTube account, login, cookie, or API key is required anywhere in the request flow — every field comes from what YouTube already serves an anonymous visitor. Because it is a standard Apify Actor, it is also callable from any HTTP client or agent framework through the Apify API, with no separate signup flow.
- Scrape Shorts video metadata — title, views, likes, duration, hashtags, captions, description links.
- Look up community-submitted sponsor segments from the public SponsorBlock database.
- Score sentiment (-5 to +5) and extract keywords and topic categories from the title and description.
- Pull channel/creator context — subscriber count, verification, join date, about-page description.
- Export as JSON, CSV, or Excel — no proxy management required by default.
What data does YouTube Shorts Scraper collect?
Every run returns three groups of data for each Short: the video itself, the channel that posted it, and computed brand-safety analytics layered on top.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Shorts video | title, views, likes, duration, comments, hashtags, captions | title, viewCount, likes, duration, commentsCount, hashtags, subtitles |
| Channel / creator | name, handle, subscriber count, verification, about info | channelName, channelUsername, numberOfSubscribers, isChannelVerified, aboutChannelInfo |
| Brand-safety analytics | sponsor segments, sentiment score, keywords, topics | sponsorSegments, hasSponsorSegments, sentimentScore, keywords, topics |
The video and channel groups are the full set YouTube exposes on an anonymous page view — nothing is inferred or guessed when a field cannot be resolved, it is returned as null instead. The analytics group is computed by the Actor itself after the video and channel data are fetched, from the title and description text already collected, so it never requires a second round trip to a third-party AI service.
Need more YouTube data?
If you need channel-level discovery and audience-tier scoring instead of per-Short brand-safety data, API Empire also publishes YouTube Influencer Tier Finder, which classifies channels by keyword or URL into nano-to-mega influencer tiers with views-per-subscriber and avg-views-per-video reach metrics. Pair the two when you need to shortlist channels first, then vet their individual Shorts for sponsorship activity and sentiment.
How does YouTube Shorts Scraper differ from the official YouTube Data API?
The YouTube Data API v3 is Google's own public interface for YouTube metadata; YouTube Shorts Scraper reads the same public Shorts pages without asking you to hold a Google Cloud project or manage a quota.
| Feature | YouTube Data API v3 | YouTube Shorts Scraper |
|---|---|---|
| Authentication | API key required for public reads; OAuth 2.0 required for user-authorized operations (per Google's YouTube Data API documentation, checked 2026-07-25) | None — fully keyless, no Google Cloud project needed |
| Default quota | 10,000 units/day default allocation, extendable via a quota increase request (Google's published documentation) | No platform-imposed quota; governed by your Apify usage |
| Sponsor-segment detection | Not offered | Built in, via a SponsorBlock lookup per video |
| Sentiment / topic tagging | Not offered | Built in, via a keyless lexicon analyzer |
| Shorts-specific extraction | General video/search endpoints; no dedicated Shorts-only filter | Reads each channel's Shorts tab directly, and applies YouTube's own "Type: Shorts" search filter for keyword input |
| Output shape | Raw API JSON — you normalize field names and types yourself | Pre-normalized, stable 50-key schema on every run |
| Setup time | Google Cloud project, API key or OAuth consent screen, quota request if you exceed the default | Start the Actor on Apify with an Apify account — no separate credential |
Use the official API when you need Google-guaranteed access inside its published quota, or OAuth-gated data tied to your own channel. Use YouTube Shorts Scraper when you need Shorts-specific public metadata plus sponsor-segment, sentiment, and topic enrichment without provisioning a Google Cloud project or tracking a daily unit budget.
🎯 Why do developers and teams scrape YouTube Shorts?
For AI engineers and agent builders
sentimentScore, topics, and sponsorSegments are pre-computed and typed, so a RAG pipeline or agent tool can filter and route Shorts without running its own classification step. A brand-safety agent can query for hasSponsorSegments: true and sentimentLabel in ["positive", "slightly positive"] to shortlist creators for outreach, then hand the text, hashtags, and topics fields straight into an LLM context window as pre-chunked, stable-schema input — no HTML stripping or field-name guessing between the scrape and the prompt.
For marketers and brand teams
Sponsorship and influencer-marketing teams use sponsorSegments and hasSponsorSegments to see which Shorts in a niche already carry paid placements, and at what timestamp and category (sponsor, self-promo, intro, outro). Pull a competitor's channel with publishedAfter/publishedBefore set to a specific quarter, then cross-reference sentimentLabel against viewCount to see whether their sponsored content is landing well with their audience before proposing a similar deal.
For researchers and analysts
Content and platform researchers use the sentimentScore, keywords, and topics fields to study how Shorts framing correlates with engagement across a niche or date range, working entirely from publicly available video and channel metadata. A topics distribution across a hashtag-driven keyword search (e.g. funny shorts) gives a snapshot of which content categories dominate a search result set on a given day, without opening a single video manually.
For developers building data products
channelId, channelUrl, and the full aboutChannelInfo block give enough channel identity to build a scheduled monitoring pipeline — re-run the same startUrls weekly, diff sponsorSegments and sentimentScore per id, and surface new sponsorships or sentiment shifts to a downstream dashboard or Slack alert without re-deriving channel identity each run.
How to scrape YouTube Shorts (step by step)
- Open YouTube Shorts Scraper on its Apify Store listing and click Try for free.
- Add one or more channel handles, usernames, channel URLs, or keywords to
startUrls— this is the only required input. - Set
maxResults, toggleincludeSponsorSegmentsandincludeAnalytics, and optionally setpublishedAfter/publishedBeforeto bound an exact campaign window. - Click Start — each input is resolved to a Shorts tab or a Shorts-filtered search, and enriched rows stream into the dataset as each video finishes processing.
- Open Storage → Dataset (or call the Apify API) to download results as JSON, CSV, or Excel.
What to do when YouTube changes its structure
The Actor is maintained, and its output schema — field names and types — stays stable across YouTube's internal layout changes, so downstream integrations keep working without code changes on your end. No specific update turnaround time is published.
⚠️ What changed in YouTube scraping recently?
YouTube's anti-bot posture on video and audio stream delivery tightened through 2025 with expanded enforcement of PO tokens — a cryptographically signed value generated by YouTube's BotGuard script that proves a request came from a real browser — on streaming and detailed-playback endpoints. Since early 2026, community trackers (including yt-dlp's GitHub issue tracker) report YouTube pushing SABR-only delivery on its web client, which removes the older adaptiveFormats direct-download URLs for some sessions.
This mainly affects tools built to download the actual video/audio stream. YouTube Shorts Scraper reads video, channel, and description metadata through YouTube's own Innertube JSON endpoints rather than downloading stream files, so its core fields (title, views, likes, description, hashtags, channel data, captions listing) are not directly exposed to SABR enforcement. The formats field, which does carry raw playback URLs, is the one output most likely to be affected by tightening stream-delivery rules going forward. The Actor is maintained against these changes as they land; no fixed turnaround time is published.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | ✅ Yes | array | Where 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", "funny shorts"] |
maxResults | No | integer | Maximum number of Shorts to scrape per channel or keyword. Minimum 1, maximum 10000, default 10. Higher = more data, longer run. | 25 |
includeSponsorSegments | No | boolean | Look up community-submitted sponsor/self-promo/intro/outro segments from the public SponsorBlock database for each Short. Adds a sponsorSegments array with categories, timestamps, and votes. Coverage is partial (commonly ~30–40% of videos have data); Shorts with no data return null. Default true. | true |
includeAnalytics | No | boolean | Run a keyless lexicon analyzer over each Short's title and description to produce a signed sentiment score (-5..+5), a sentiment label, extracted keywords, and topic categories. Default true. | true |
publishedAfter | No | string | Lower date bound. Use a date (YYYY-MM-DD) or relative time (7 days, 2 weeks, 1 month, 1 year). Leave empty for no lower bound. | "2025-01-01" |
publishedBefore | No | string | Upper date bound. Same formats as publishedAfter; pairs with it to capture an exact campaign window. Leave empty for no upper bound. | "2025-12-31" |
sortOrder | No | string | Order of results: newest (default), oldest, or popular (by view count). | "newest" |
proxyConfiguration | No | object | Turn on Apify Proxy for more reliable scraping (useful in EU or restricted regions). Off = direct connection; works in most regions. Prefilled {"useApifyProxy": false}. | {"useApifyProxy": false} |
Example input
{"startUrls": ["@MrBeast", "mrbeast", "https://www.youtube.com/@MrBeast", "funny shorts"],"maxResults": 25,"includeSponsorSegments": true,"includeAnalytics": true,"publishedAfter": "2025-01-01","publishedBefore": "2025-12-31","sortOrder": "newest","proxyConfiguration": { "useApifyProxy": false }}
Common pitfall: maxResults values below 10 do not reduce the row count below 10 per channel or keyword — the Actor always targets at least 10 Shorts internally before applying your other filters, so maxResults: 3 can still return (and charge for) up to 10 rows for that input. Set maxResults to 10 or higher if you need the returned count to match your input exactly. Separately, for publishedAfter/publishedBefore, prefer an absolute YYYY-MM-DD date over a relative phrase whenever the exact boundary matters — relative values are parsed by digit and unit pattern, and the safest inputs are single-digit day/week/month counts or 1 year.
⬆️ Output
Every Short is one dataset row, with the same 50 keys in the same order on every run. Fields that could not be resolved come back as null rather than being omitted, so downstream code never needs a presence check. Export as JSON, CSV, or Excel, or read the dataset through the Apify API. sponsorSegments/hasSponsorSegments and sentimentScore/sentimentLabel/keywords/topics are still present as keys on every row, but stay null when the corresponding input toggle (includeSponsorSegments / includeAnalytics) is switched off. Turning off includeSponsorSegments also skips one extra HTTP request per video (the SponsorBlock lookup); includeAnalytics is a local computation with no network cost, so switching it off changes the output but not the run's request volume.
Scraped Short
{"title": "The BEST $50 Budget Gaming Setup","translatedTitle": null,"type": "shorts","id": "R7MkZL5i3FQ","url": "https://www.youtube.com/shorts/R7MkZL5i3FQ","thumbnailUrl": "https://i.ytimg.com/vi/R7MkZL5i3FQ/hqdefault.jpg","viewCount": 6449357,"date": "2024-11-07T00:00:00.000Z","likes": 90984,"location": null,"channelName": "TechReviewsDaily","channelUrl": "https://www.youtube.com/@TechReviewsDaily","channelUsername": "TechReviewsDaily","collaborators": null,"channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA","channelDescription": "Budget tech reviews and setup guides, twice a week.","channelJoinedDate": "Mar 4, 2016","channelDescriptionLinks": ["https://linktr.ee/techreviewsdaily"],"channelLocation": "United States","channelAvatarUrl": "https://yt3.ggpht.com/abc123=s176-c-k-c0x00ffffff-no-rj","channelBannerUrl": "https://yt3.googleusercontent.com/def456","channelTotalVideos": 812,"channelTotalViews": 145000000,"numberOfSubscribers": 450000,"isChannelVerified": false,"inputChannelUrl": "https://www.youtube.com/@TechReviewsDaily","isAgeRestricted": false,"aboutChannelInfo": {"channelDescription": "Budget tech reviews and setup guides, twice a week.","channelJoinedDate": "Mar 4, 2016","channelDescriptionLinks": ["https://linktr.ee/techreviewsdaily"],"channelLocation": "United States","channelUsername": "TechReviewsDaily","channelAvatarUrl": "https://yt3.ggpht.com/abc123=s176-c-k-c0x00ffffff-no-rj","channelBannerUrl": "https://yt3.googleusercontent.com/def456","channelTotalVideos": 812,"channelTotalViews": 145000000,"numberOfSubscribers": 450000,"isChannelVerified": false,"channelName": "TechReviewsDaily","channelUrl": "https://www.youtube.com/@TechReviewsDaily","channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA","inputChannelUrl": "https://www.youtube.com/@TechReviewsDaily","isAgeRestricted": false},"duration": "00:00:27","commentsCount": 7171,"text": "Best cheap gaming setup you can build today for under $50. Full parts list in the pinned comment. #gaming #setup #budget","translatedText": null,"descriptionLinks": ["https://linktr.ee/techreviewsdaily"],"subtitles": [{ "url": "https://www.youtube.com/api/timedtext?v=R7MkZL5i3FQ&lang=en", "languageCode": "en", "name": "English (auto-generated)" }],"order": 3,"commentsTurnedOff": false,"fromYTUrl": "https://www.youtube.com/@TechReviewsDaily/shorts","isMonetized": true,"hashtags": ["gaming", "setup", "budget"],"formats": [{ "quality": "720p", "url": "https://rr3---sn-abc123.googlevideo.com/videoplayback?..." }],"isMembersOnly": false,"input": "@TechReviewsDaily","fromChannelListPage": "shorts","isPaidContent": false,"sponsorSegments": [{ "category": "sponsor", "startTime": 3.2, "endTime": 9.8, "votes": 12, "actionType": "skip", "UUID": "9e1c2a7f-4b3d-4e2a-9c1a-7f2e5d8b6a10" }],"hasSponsorSegments": true,"sentimentScore": 2.4,"sentimentLabel": "positive","keywords": ["gaming", "setup", "budget", "cheap", "parts"],"topics": ["gaming", "tech & gadgets"]}
Output fields
Identity & timing: title (string or null), translatedTitle (reserved — always null in the current build, not populated), type (constant "shorts"), id (11-character YouTube video ID), url (canonical youtube.com/shorts/… link), thumbnailUrl, date (ISO-8601 string derived from the publish-date text; carries day precision only — the time component is always 00:00:00.000Z), duration (zero-padded HH:MM:SS, derived from the largest of several duration signals in the player response).
Engagement: viewCount, likes, commentsCount (all parsed to integers, or null when not resolvable), commentsTurnedOff (boolean).
Content: text (description; falls back to the title text when the description is empty), translatedText (reserved — always null), descriptionLinks (URLs found in the description or title), hashtags (parsed from #tags in the description or title), formats (array of {quality, url} for available renditions; URLs are truncated to 120 characters plus ...), subtitles (array of {url, languageCode, name} caption tracks, or null when none exist), location (recording location text when YouTube exposes it, else null), isMonetized (boolean or null, from the player's microformat when present), isPaidContent (reserved — always false, not detected from the response), isMembersOnly (reserved — always false, not detected from the response).
Channel / creator: channelName, channelUrl, channelUsername, channelId, channelDescription, channelJoinedDate, channelDescriptionLinks, channelLocation, channelAvatarUrl, channelBannerUrl, channelTotalVideos, channelTotalViews, numberOfSubscribers, isChannelVerified (boolean), inputChannelUrl (normalized https://www.youtube.com/@handle form), isAgeRestricted (reserved — always false, not detected from the response despite the field name), collaborators (reserved — always null), aboutChannelInfo (an object duplicating the fifteen channel fields above in one place, for convenience when you only want to destructure channel data once).
Run context: order (sequential integer marking the order this row was fetched and written within its input during the run — see the limitation below), fromYTUrl (the resolved Shorts-tab or search URL this batch was fetched from), input (the raw startUrls entry that produced this row), fromChannelListPage ("shorts" or "search", depending on how the video was discovered).
Brand-safety & analytics:
sponsorSegments— Array of{category, startTime, endTime, votes, actionType, UUID}looked up from the public SponsorBlock database by video ID, ornullwhen the video has no community submissions (an HTTP 404 from SponsorBlock, not an error). This is a lookup against a third-party crowd-sourced database, not a model or classifier run by the Actor.hasSponsorSegments— Boolean;truewhen SponsorBlock returned at least one segment.sentimentScore— Signed number from-5(very negative) to+5(very positive), computed by a keyless lexicon analyzer (method below), not an AI model.sentimentLabel— One ofpositive,slightly positive,neutral,slightly negative,negative.keywords— Up to 12 of the most frequent meaningful terms from the title and description, after stopword and short-token removal.topics— List of matched categories from a fixed 14-category taxonomy (e.g.gaming,food & cooking,tech & gadgets,finance & business).
How sponsor segments, sentiment, and topics are actually computed
These are three separate, keyless, non-AI features — none of them call a language model or external classification API:
- Sponsor-segment detection queries the public SponsorBlock API (
sponsor.ajay.app/api/skipSegments) by video ID for nine categories (sponsor,selfpromo,interaction,intro,outro,preview,music_offtopic,poi_highlight,filler) and returns whatever the community has submitted, unmodified, with start/end timestamps in seconds and each segment's vote count. It never fabricates a segment — no community data meansnull. - Sentiment scoring tokenizes the combined title and description, matches tokens against two fixed dictionaries (roughly 60 positive terms scored 1–3, roughly 40 negative terms scored -1 to -3), flips the sign when a negation word (
not,no,never,cannot, …) appears in the two preceding tokens, sums the signed hits, and normalizes with a VADER-style formula (raw / sqrt(raw² + 15), scaled to ±5 and rounded to two decimals). - Keyword extraction counts token frequency on the same text after dropping a fixed ~70-word stopword list, tokens under three characters, and pure numbers, then returns the top 12 by frequency.
- Topic extraction checks the tokenized text against a fixed set of trigger keywords per category (14 categories total) and includes a topic whenever any of its trigger words appears — a keyword-overlap match, not a confidence-scored classification.
⚠️ A real limitation: sortOrder does not reorder the dataset itself
sortOrder is accepted and its sort logic runs correctly, but rows are written to the Apify dataset as each video's detail fetch completes — not after sorting — so the sorted result is computed but never re-applied to what is already on the dataset. In practice, treat the dataset's row order as best-effort/arrival order rather than a guaranteed newest/oldest/popular sequence, and sort client-side on the date or viewCount fields after export if a specific order matters for your use case.
How does YouTube Shorts Scraper compare to other YouTube Shorts scrapers?
| Feature | YouTube Shorts Scraper | Generic alternative |
|---|---|---|
| Output format | Typed, normalized JSON with a stable 50-key schema | Often raw HTML, or field names that drift between runs |
| Sponsor-segment detection | Built in — a SponsorBlock lookup per video | Usually absent, or requires a separate tool |
| Sentiment & topic tagging | Included by default, keyless lexicon-based | Often missing, or gated behind a paid add-on |
| Input flexibility | Channel handle, username, URL, or free-text keyword search, mixed in one run | Frequently one input mode per run |
| Campaign date window | publishedAfter and publishedBefore bound an exact range | Often a single relative "recent" filter, if any |
If you're building an AI agent or RAG pipeline, the output format row is the decision-maker — parsing HTML inside an agent loop is a reliability failure mode, not a feature. A stable, typed schema is what lets you write a parser once and stop touching it every time a page redesign ships.
How many results can you scrape with YouTube Shorts Scraper?
maxResults accepts 1 to 10,000 Shorts per channel or keyword (schema minimum 1, maximum 10000, default 10) — but the run itself never fetches fewer than 10 video IDs per input, since the internal fetch target is max(10, maxResults). A maxResults of 1–9 still returns up to 10 rows for that input; set it to 10 or higher for the row count to match your input exactly.
Pagination is continuation-token based: the Actor walks the channel's Shorts tab (or a Shorts-filtered search) collecting unique video IDs until it reaches the target count or YouTube stops returning a continuation token. There is no additional hard cap in the Actor beyond the 10,000 schema maximum, which Apify enforces at input-validation time. No benchmarked run time is published — actual duration depends on your target volume, the number of inputs, and whether includeSponsorSegments/includeAnalytics add per-video lookups.
Integrate YouTube Shorts Scraper and automate your workflow
YouTube Shorts Scraper works with any language or tool that can send an HTTP request.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("<YOUR_USERNAME>/youtube-shorts-scraper-sponsor-segments-sentiment-topics").call(run_input={"startUrls": ["@MrBeast", "funny shorts"],"maxResults": 25,"includeSponsorSegments": True,"includeAnalytics": True,"sortOrder": "newest",})for short in client.dataset(run["defaultDatasetId"]).iterate_items():print(short["title"], short["sentimentLabel"], short["hasSponsorSegments"])
Works in Python, Node.js, Go, Ruby, cURL.
Automation platforms (n8n, Make, LangChain)
In n8n, use the Apify node (or an HTTP Request node against the Apify run endpoint with your token) and pass the same JSON shown above; the built-in Schedule Trigger node turns a weekly sponsorship sweep into a no-code workflow. In Make, use the Apify module's "Run Actor and get dataset items" action and map the output straight into a Google Sheets, Airtable, or Slack module. In LangChain, the Apify integration (ApifyWrapper / ApifyDatasetLoader) can call any Apify Actor by its ID — pointing it at this Actor's slug lets an agent trigger a run and load the resulting dataset as a retrieval step without a custom tool wrapper.
Is it legal to scrape YouTube Shorts?
Yes — YouTube Shorts Scraper only reads what YouTube already serves to any anonymous visitor; no login, cookie, or session is used anywhere in the request flow, and nothing behind a login wall or a members-only gate is accessed. Video and channel metadata of this kind is generally treated as publicly accessible business/content data, subject to YouTube's Terms of Service rather than a login-bypass concern.
Some fields — channelName, channelUsername, channelDescription, and similar — can identify an individual when a channel is run by a private person rather than a brand or business. If you store or process this data at scale, especially for EU or California residents, GDPR and CCPA obligations around lawful basis, storage, and use may attach to those identifying fields even though the data was collected from a public page. Consult legal counsel for commercial use cases involving bulk creator or personal data.
❓ Frequently asked questions
Does YouTube Shorts Scraper work without a YouTube account?
Yes. Every request — the Shorts-tab fetch, the search query, the video-detail lookup, the channel "About" lookup, and the SponsorBlock lookup — is made anonymously. No YouTube account, login, cookie, or API key of any kind is required.
How often is the scraped data updated?
Live, on every run. The Actor makes fresh requests to YouTube's own Innertube endpoints and to SponsorBlock each time it runs — nothing is served from a cache between runs.
What happens if a channel or keyword returns no Shorts?
If a channel's Shorts tab returns no video IDs, the Actor automatically retries the same input as a keyword search before giving up — this handles cases like a single word that could be either a handle or a search term. If the input still resolves to zero Shorts, no rows are written (and none are charged) for that input, and the run continues with the remaining inputs.
Can I scrape private or members-only Shorts?
No — only publicly accessible Shorts are returned; nothing behind a login or membership gate is requested. Be aware that the isMembersOnly and isAgeRestricted output fields are reserved and always return false in the current build regardless of the video's actual status, so they cannot be used to detect restricted content — only the absence of a row for a fully gated video reflects that restriction.
Does maxResults apply per channel or across my whole run?
Per input. maxResults is the target for each entry in startUrls individually, not a shared total — three channels at maxResults: 20 can return up to 60 rows combined, not 20. This also means the internal 10-row floor described above (see the Input section's pitfall note) applies separately to every channel or keyword you list, not once for the whole run.
What if I enter an invalid or nonexistent channel handle?
The Actor tries to resolve it to a Shorts URL, gets no video IDs back, falls back to a keyword search on the same text, and if that also returns nothing, moves on without writing or charging for a row. No fabricated or placeholder row is ever pushed for a failed lookup.
Does YouTube Shorts Scraper work for AI agent workflows and LLM pipelines?
Yes. It is callable as a standard HTTP endpoint through the Apify API, so any agent framework — LangChain, CrewAI, a custom tool definition — can invoke it and receive typed JSON directly. Every response is normalized, so there is no HTML-parsing step between the scrape and the prompt.
How does YouTube Shorts Scraper handle YouTube's anti-bot system?
It sends browser-matching request headers (a full Chrome desktop user agent plus sec-ch-ua/sec-fetch-* headers), extracts a fresh YouTube client version token before each channel or search request rather than hardcoding one, and retries failed requests up to three times with exponential backoff. It does not render pages in a browser or solve CAPTCHAs — it calls YouTube's own internal JSON (Innertube) endpoints directly. Apify Proxy is available as an optional input for higher-volume or region-restricted use, off by default.
How does YouTube Shorts Scraper compare to other YouTube Shorts scrapers?
Checked on the Apify Store on 2026-07-25: buseta/yt-shorts-premium-scraper's listing advertises AI-branded content and comment-sentiment analysis with four scraping modes (search, channels, hashtags, video URLs) and comment scraping — not measured here. devilscrapes/youtube-shorts-sponsorship-signals reads spoken transcripts for sponsor phrases and produces a 0–1 heuristic sponsorship score, a different method from this Actor's SponsorBlock lookup. wetyr_corporation/youtube-transcript-ai-suite focuses on full-video transcripts with summary, sentiment, and topic extraction plus webhook delivery, rather than Shorts-specific channel/keyword scraping. YouTube Shorts Scraper's distinct combination is community-sourced sponsor-segment timestamps (SponsorBlock) alongside keyless sentiment and topic tagging, in one Shorts-focused Actor with no separate AI add-on pricing tier.
Does YouTube Shorts Scraper return data in a format LLMs can use directly?
Yes. Every response is typed, normalized JSON with stable field names across runs. No HTML, no selectors, no parsing. Pass a row directly into an LLM context window, index it into a vector store, or route it through an agent tool.
Can I use YouTube Shorts Scraper without managing proxies?
Yes, for most volumes — the Actor runs on a direct connection by default. proxyConfiguration is available if you want to route requests through Apify Proxy for higher volume or a specific region, but it is not required to get results.
What happens when YouTube changes its structure or blocks the scraper?
The scraper is maintained, and its output schema stays stable — field names and types do not change on your end even when YouTube's internal page structure does. No numeric turnaround time is promised for any given fix.
💬 Your feedback
Found a bug, or need a field that YouTube exposes but this Actor doesn't return yet? We want to know. Open an issue on the Actor's Issues tab on Apify Console, or reach out through the API Empire publisher page — reports that include a sample channel or keyword are the fastest to act on.