YouTube Shorts Scraper With Transcripts & Captions avatar

YouTube Shorts Scraper With Transcripts & Captions

Pricing

$14.99/month + usage

Go to Apify Store
YouTube Shorts Scraper With Transcripts & Captions

YouTube Shorts Scraper With Transcripts & Captions

The Youtube Shorts Scraper extracts Shorts data including titles, views, likes, comments, creators, hashtags, and video links. Get clean JSON or CSV for trend analysis, content research, audience insights, and automation workflows at scale.

Pricing

$14.99/month + usage

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

1

Monthly active users

3 days ago

Last modified

Share

YouTube Shorts Scraper — Videos, Transcripts and Channel Data

YouTube Shorts Scraper finds Shorts by channel, handle, or keyword search and returns each one as typed JSON: view count, likes, comments, hashtags, full channel metadata, and — the part most Shorts scrapers skip — the spoken transcript pulled straight from the caption track. Choose plain caption lines, [m:ss]-timestamped lines, or one joined string sized for an LLM prompt. Unlike a scraper that only accepts a video URL you already have, this Actor discovers the Shorts itself from a channel or a search term, so you start from "this creator" or "this topic," not from a list of video IDs. This guide covers every input and output field, the transcript-recovery mechanics, and how teams run it for hook analysis, RAG pipelines, and channel monitoring.

What Does YouTube Shorts Scraper Do?

YouTube Shorts Scraper is an Apify Actor that takes a YouTube channel, handle, username, full channel URL, or a plain keyword, finds the Shorts published there (or matching that search), and returns one structured record per Short — video metadata, channel metadata, and the parsed transcript text. No YouTube account, login, or API key is required; every field comes from data YouTube already serves to an anonymous visitor.

  • Resolves channel handles (@MrBeast), bare usernames, full channel URLs, or keyword search terms into a Shorts result set
  • Fetches per-video metadata: views, likes, publish date, duration, hashtags, description links, comment count and comments-off state
  • Recovers channel metadata for the uploader of every Short: subscriber count, verification badge, join date, description, avatar and banner images
  • Parses the transcript from the Short's caption track in one of three output shapes
  • Reports transcript coverage honestly — a Short with no captions returns null, never fabricated text
  • Filters by publish date and sorts by newest, oldest, or view count
  • Runs over Apify Residential proxy by default, which caption-track recovery depends on

Features & Capabilities

The Actor covers Shorts discovery, video and channel metadata, and transcript recovery in a single run — the three things most Shorts tools split across separate calls.

Core features

  • Bulk source input — mix channel handles, usernames, full channel URLs, and keyword searches in one startUrls list; each is processed independently
  • Three transcript shapescaptions (line array), textWithTimestamps ([m:ss] line array), singleStringText (one joined paragraph)
  • Two transcript coverage modesstandard fetches the primary caption track only; aggressive tries every available track plus a raw-timedtext fallback for higher recovery
  • 44 base fields plus 3 transcript fields on every row — transcript, transcriptStatus, transcriptLanguage are appended without touching the base schema
  • Channel enrichment per row — subscriber count, verification, join date, description, avatar/banner URLs, and total-video/total-view counts, resolved from the uploading channel of every single Short
  • Date filter and sortpublishedAfter plus sortOrder (newest, popular, oldest)

How YouTube Shorts Scraper compares to other YouTube Shorts scrapers

Checked on the Apify Store on 26 July 2026. All three named competitors take a video URL or ID you already have — none of them discover Shorts from a channel or a keyword.

FeatureThis Actorlume/yt-transcriptsthirdwatch/youtube-transcripts-scraper
Input typeChannel, handle, username, or keywordVideo URLs onlyVideo URLs or video IDs only
Discovers Shorts for youYesNo — you supply the URLNo — you supply the URL/ID
Transcript output shapes3 (captions / timestamped / single string)Timestamped snippets + joined stringSegments array + joined transcript_text
Channel metadata returnedYes (subscribers, verification, join date, description, avatar/banner)Not documentedNot documented
Transcript coverage mode toggleYes (standard / aggressive)Not documentedNot documented
Per-video language selectionPrimary caption track (standard) or all tracks (aggressive)Language param (en default)languageCode param + preferManual + includeAutoTranslate
Proxy / anti-bot handling documentedYes — Residential, rotating per requestNot documenteduseResidentialProxy fallback after direct-HTTP failure
Pay-per-event pricing publishedNot published on this listingNot documented in READMEPublished: from $0.003/video, unbilled failures

If your use case is feeding structured data to an LLM, the output-format row is the decision-maker — HTML parsing inside an agent loop is a reliability failure mode, not a feature, and all three tools here avoid it by returning typed JSON directly.

When another tool might suit you better

This Actor only scrapes Shorts — it does not process standard long-form YouTube videos. If you already have a list of regular video URLs or IDs and just need transcripts for those, thirdwatch/youtube-transcripts-scraper or lume/yt-transcripts are built exactly for that case and document explicit per-video language controls (languageCode, preferManual, includeAutoTranslate) that this Actor does not expose. If you need only a single video's subtitles with no channel discovery at all, a minimal single-URL tool like datascoutapi/youtube-subtitle-scraper is a lighter option.

YouTube Shorts Scraper within the Scrapio data stack

YouTube Shorts Scraper covers Shorts, their transcripts, and the uploading channel's metadata. For a channel's regular long-form videos with subtitles and translations, use YouTube Video Details Scraper With Subtitles & Translations. For a playlist's videos with transcripts, use Youtube Playlist Scraper (Transcript & Subtitles). For a channel's About-tab contact details rather than its Shorts, use YouTube Channel Contact Extractor.

Why do developers and data teams scrape YouTube Shorts?

🏢 Content marketing and creator agencies

Agencies pull a competitor or client channel's Shorts, sort by viewCount with sortOrder: "popular", and read the transcript of the top performers to find the hook pattern — the first 1–2 spoken lines — that correlates with view count. hashtags and duration get layered in to test format hypotheses (short hooks, specific tag sets) against what actually trends, and the whole set drops into a spreadsheet or BI tool without any manual transcription pass.

📊 AI training data and RAG indexing

transcript in singleStringText format is the field to index — it is spoken content already segmented per video, ready to embed without a separate speech-to-text step. Combine it with title, hashtags, and text (the description) for topic-tagged RAG chunks over a creator's or niche's back catalog. For training data, viewCount, likes, commentsCount, and duration are the most structurally consistent numeric fields across every row, useful for a virality-prediction or format-length model trained on real Shorts performance.

📱 Competitive and market intelligence

Track a competitor channel's numberOfSubscribers and channelTotalVideos run over run to watch growth rate, and diff viewCount on the same id across repeated pulls to see which Shorts are still gaining views days after publish. hashtags across a channel's recent output shows which tags a competitor is currently leaning on.

🔬 Research and academic use

Public-data researchers studying short-form video language, disclosure patterns, or platform trends can pull transcript corpora by keyword or channel without manual collection. Every field returned is data already visible to an anonymous visitor — no private or gated content is included in the output.

🎥 Product and SaaS development

Build a creator-analytics dashboard, a hook-analysis tool, or a captioning/accessibility product on top of transcript, transcriptLanguage, and the metadata fields — the Actor's dataset output is the backend, delivered as one typed row per Short with no HTML to parse.

🍚 Input Parameters

Every field below is read directly from .actor/input_schema.json, in schema order.

ParameterRequiredTypeDefaultDescription
startUrlsYesarray["rainbowicecream9780"]Sources to scrape Shorts from. Add one or more: channel handles (@MrBeast), usernames (mrbeast), full channel URLs (https://www.youtube.com/@MrBeast), or plain search keywords (e.g. cooking tips). Accepts a list of strings or a list of {"url": "..."} objects.
maxResultsNointeger10Maximum number of Shorts to scrape per channel or keyword. Minimum 1, maximum 10000. Higher = more transcripts, longer run.
includeTranscriptNobooleantrueFetch each Short's transcript text from its caption track. Adds transcript, transcriptStatus, and transcriptLanguage to every row.
transcriptFormatNostring (enum)captionsShape of the transcript field: captions (list of text lines), textWithTimestamps (list of [m:ss] text lines), or singleStringText (one joined paragraph — ideal for LLM prompts).
transcriptModeNostring (enum)standardstandard fetches the primary caption track only (fast). aggressive tries every caption track plus a raw-timedtext fallback for higher coverage (slower).
publishedAfterNostringFilter by publish date. Use an absolute date (YYYY-MM-DD) or a relative period. Leave empty to include all Shorts. See the coverage note directly below — not every documented format currently filters.
sortOrderNostring (enum)newestOrder of results: newest, popular (by views), or oldest.
proxyConfigurationNoobject{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}Apify Proxy. Residential is required for transcript / caption-track recovery — YouTube serves caption tracks only to residential browser-fingerprint requests. Kept on by default.

No field in this schema is a credential or API key — the Actor never asks for a YouTube login, cookie, or token. proxyConfiguration is Apify's own proxy selector, not a site credential.

⚠️ publishedAfter — which formats actually filter

The field's own description documents four example formats: 7 days, 2 weeks, 1 month, 1 year. Reading the filter logic directly, only "7 day(s)", "30 day(s)", and "1 year" are matched — the cutoff function checks for the literal substrings "7" + "day", "30" + "day", and "1" + "year" inside the lowercased input. 2 weeks and 1 month — both shown as valid examples in the field's own description — do not match any of those patterns. When a value doesn't match, the filter is silently skipped rather than rejected: the run proceeds and returns Shorts from all dates as if no publishedAfter value had been set. An absolute date typed through the datepicker (YYYY-MM-DD) is affected the same way, because the cutoff function never parses a calendar date at all — it only pattern-matches relative-period keywords. If you need a specific cutoff, verify your run's output actually stops at that date before relying on it; 7 days, 30 days, and 1 year are the values confirmed to work.

Example input

{
"startUrls": ["@MrBeast", "cooking tips"],
"maxResults": 25,
"includeTranscript": true,
"transcriptFormat": "singleStringText",
"transcriptMode": "aggressive",
"sortOrder": "popular",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Supported URL types and input formats

startUrls accepts four distinct shapes, and the Actor tries them in this order before falling back to keyword search:

  • Channel handle: @MrBeast or bare mrbeast (auto-prefixed with @)
  • Channel ID URL: https://www.youtube.com/channel/UC...
  • Full channel or handle URL: https://www.youtube.com/@MrBeast, with or without a trailing /shorts
  • Free-text keyword: any phrase, e.g. cooking tips — if a single word resolves to an empty channel Shorts tab (a false-positive handle match), the Actor automatically retries it as a Shorts search query instead

Each entry in startUrls can also be an object: {"url": "@MrBeast"} — useful when feeding the field from another tool's output without reshaping it.

📦 Output Format

Every Short is one dataset row: 44 base fields plus 3 transcript fields, 47 in total, in a fixed key order on every run. The default dataset view shown in the Apify Console displays 20 of those 47 columns — type, title, id, url, transcript, transcriptStatus, transcriptLanguage, thumbnailUrl, viewCount, date, likes, channelName, channelUrl, numberOfSubscribers, duration, commentsCount, commentsTurnedOff, text, descriptionLinks, hashtags — the full 47-field row is present in every export and through the API regardless of which columns the view table shows.

Output for a Short

{
"title": "Perfect Sourdough In 60 Seconds",
"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": "2025-11-07T00:00:00.000Z",
"likes": 90984,
"location": null,
"channelName": "Bake With Ava",
"channelUrl": "https://www.youtube.com/@bakewithava",
"channelUsername": "bakewithava",
"collaborators": null,
"channelId": "UCabc123def456ghi789jkl",
"channelDescription": "Home baking, one loaf at a time.",
"channelJoinedDate": "Mar 14, 2019",
"channelDescriptionLinks": ["https://instagram.com/bakewithava"],
"channelLocation": "United States",
"channelAvatarUrl": "https://yt3.googleusercontent.com/abc123=s176-c-k-c0x00ffffff-no-rj",
"channelBannerUrl": "https://yt3.googleusercontent.com/def456=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
"channelTotalVideos": 842,
"channelTotalViews": 214500000,
"numberOfSubscribers": 450000,
"isChannelVerified": true,
"inputChannelUrl": "https://www.youtube.com/@bakewithava",
"isAgeRestricted": false,
"aboutChannelInfo": {
"channelDescription": "Home baking, one loaf at a time.",
"channelJoinedDate": "Mar 14, 2019",
"channelDescriptionLinks": ["https://instagram.com/bakewithava"],
"channelLocation": "United States",
"channelUsername": "bakewithava",
"channelAvatarUrl": "https://yt3.googleusercontent.com/abc123=s176-c-k-c0x00ffffff-no-rj",
"channelBannerUrl": "https://yt3.googleusercontent.com/def456=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
"channelTotalVideos": 842,
"channelTotalViews": 214500000,
"numberOfSubscribers": 450000,
"isChannelVerified": true,
"channelName": "Bake With Ava",
"channelUrl": "https://www.youtube.com/@bakewithava",
"channelId": "UCabc123def456ghi789jkl",
"inputChannelUrl": "https://www.youtube.com/@bakewithava",
"isAgeRestricted": false
},
"duration": "00:00:27",
"commentsCount": 7171,
"text": "Here's the fastest way to get a perfect crumb. #baking #sourdough",
"translatedText": null,
"descriptionLinks": ["https://bakewithava.com/recipes/sourdough"],
"subtitles": [
{ "url": "https://www.youtube.com/api/timedtext?v=R7MkZL5i3FQ&lang=en&...", "languageCode": "en", "name": "English" }
],
"order": 1,
"commentsTurnedOff": false,
"fromYTUrl": "https://www.youtube.com/@bakewithava/shorts",
"isMonetized": true,
"hashtags": ["baking", "sourdough"],
"formats": [
{ "quality": "720p", "url": "https://rr3---sn-abc.googlevideo.com/videoplayback?..." }
],
"isMembersOnly": false,
"input": "@bakewithava",
"fromChannelListPage": "shorts",
"isPaidContent": false,
"transcript": "Here's the fastest way to get a perfect crumb every single time.",
"transcriptStatus": "ok",
"transcriptLanguage": "en"
}

Output for the transcript fields

transcript, transcriptStatus, and transcriptLanguage are appended to the base row and only populated when includeTranscript is true.

FieldDescription
transcriptThe parsed transcript, shaped by transcriptFormat. null when no transcript could be recovered — never fabricated.
transcriptStatusok (text returned), no_captions (the Short has no caption track at all), empty (a caption track exists but its text body came back empty), or error (the fetch itself failed).
transcriptLanguageThe caption language code (e.g. en) of the track used, populated whenever a caption track exists — even on rows where the transcript body itself came back empty.

subtitles is a related field on the base row: an array of every caption track found on the Short (url, languageCode, name), independent of which one was actually parsed into transcript. translatedTitle, translatedText, and collaborators are always null, and isMembersOnly/isPaidContent are always false in the current build — the fields are reserved in the schema but not yet populated with real values.

Schema stability and export options

Field names and order stay fixed across runs — the Actor reads YouTube's internal InnerTube JSON responses by key rather than parsing rendered HTML, so a front-end layout change does not by itself break a field. aboutChannelInfo intentionally duplicates several of the flat channel* fields inside one nested object for consumers that prefer a single channel sub-record instead of reading flat keys. Export the dataset as JSON, CSV, Excel/XLSX, or XML from the Apify Console, or stream it through the Apify API — no delivery mechanism beyond what Apify's dataset storage provides natively.

💡 YouTube Shorts Scraper Strategy Guide

Three ways teams put this Actor into production, using its real inputs and outputs.

🎯 Strategy 1: Real-time enrichment pipeline

Trigger a run on a schedule or webhook whenever your CRM or content calendar adds a new channel to track. Run with startUrls set to that channel and maxResults small to catch only its most recent Shorts. Append transcript, viewCount, hashtags, and channelName to the matching record in your destination system, keyed on id. Because transcriptLanguage and transcriptStatus come back on every row, your pipeline can branch on transcriptStatus == "no_captions" and skip enrichment for those rows rather than writing a blank field.

🎯 Strategy 2: Scheduled monitoring and alerting

Use an Apify Schedule to re-run the same startUrls daily or weekly with sortOrder: "popular". Diff viewCount and id against the previous run's dataset to see which Shorts crossed a view threshold you define since the last pull, and alert on the delta — a Short that gained a large share of its total views since the last run is the one worth a closer look, not necessarily the one with the highest raw count.

🎯 Strategy 3: Bulk dataset build

Feed a long list of channels, handles, or keywords into startUrls in one run, or split them across parallel scheduled runs, with maxResults set to the depth you need per source. Aggregate every run's dataset export (CSV or JSON) into your warehouse or vector store, keyed on id to deduplicate reprocessed Shorts. transcriptMode: "aggressive" trades run time for higher transcript coverage when building a corpus where completeness matters more than speed.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time enrichmentCRM/content-calendar systems that need fresh Shorts data per channelScheduled or webhook-triggered, small maxResultsJSON via API, appended to an existing record
Scheduled monitoringTracking view/growth movement on watched channelsRecurring Apify Schedule, sortOrder: popularDataset diffed run-over-run
Bulk dataset buildResearch corpora, RAG indexing, training dataOne large run or parallel scheduled runs, higher maxResultsCSV/JSON export to warehouse or vector store
Scraper NameWhat it extracts
YouTube Video Details Scraper With Subtitles & TranslationsFull-length YouTube video metadata with subtitles and translations
Youtube Playlist Scraper (Transcript & Subtitles)Every video in a playlist, with transcripts
YouTube Search Scraper: Country & Language TargetingKeyword search results across all YouTube video types, localized by country/language
YouTube Channel Contact ExtractorA channel's About-tab contact details
YouTube Community Posts Scraper (Engagement Analytics)A channel's Community-tab posts and engagement
TikTok Video Scraper With Subtitles & TranscriptThe same video-plus-transcript shape, for TikTok
Instagram Reel Transcript ScraperThe same video-plus-transcript shape, for Instagram Reels
Facebook Page Video Transcript ScraperThe same video-plus-transcript shape, for Facebook Page videos

How to integrate YouTube Shorts Scraper with your stack

YouTube Shorts Scraper works with any language or tool that can make an HTTP request, since it runs as a standard Apify Actor.

Python

import csv
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<YOUR_USERNAME>/youtube-shorts-scraper-transcripts-captions").call(run_input={
"startUrls": ["@bakewithava", "sourdough bread"],
"maxResults": 20,
"includeTranscript": True,
"transcriptFormat": "singleStringText",
"transcriptMode": "standard",
"sortOrder": "newest",
"proxyConfiguration": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"]},
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
with open("shorts.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["id", "title", "channelName", "viewCount", "transcriptStatus", "transcript"])
for row in rows:
writer.writerow([
row.get("id"), row.get("title"), row.get("channelName"),
row.get("viewCount"), row.get("transcriptStatus"), row.get("transcript"),
])
print(f"Saved {len(rows)} Shorts to shorts.csv")

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('<YOUR_USERNAME>/youtube-shorts-scraper-transcripts-captions').call({
startUrls: ['@bakewithava', 'sourdough bread'],
maxResults: 20,
includeTranscript: true,
transcriptFormat: 'singleStringText',
sortOrder: 'newest',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
console.log(item.title, item.viewCount, item.transcriptStatus);
}

Works in Go, Ruby, cURL, or any language with an HTTP client — call the Apify API's actor-run endpoint directly if a client library isn't available for your stack.

Async and scheduled pipelines

Start a run and poll or await its completion through apify_client as shown above, or fire-and-forget with an Apify Schedule for recurring pulls — no separate queue or worker to manage. For large maxResults jobs, start the run asynchronously and poll client.run(run_id).get() for status rather than blocking on .call().

Who Needs YouTube Shorts Scraper? (Use Cases & Industries)

🏢 Content marketing agencies

An agency managing a client's Shorts strategy pulls the client's own channel plus several competitor channels weekly, sorts by viewCount, and reads the transcript of each channel's top Shorts to build a monthly hook-pattern report — no manual video-watching required.

📊 AI/ML engineers

Teams building a video-search or recommendation feature index transcript, title, and hashtags per Short into a vector store, using channelName and id as retrieval metadata so results can be traced back to source.

📱 Growth and social teams

Growth teams track numberOfSubscribers and channelTotalVideos on watched channels over time, and mine hashtags across a niche's recent Shorts to spot which tags are trending before they saturate.

🔬 Researchers

Academic and market researchers studying short-form video language or platform dynamics pull transcript corpora by keyword or channel. Only publicly available Shorts and captions are returned — no private, unlisted, or age-gated content.

🎥 SaaS and tool builders

Product teams building a captioning, accessibility, or creator-analytics tool use transcript and transcriptLanguage as the data backend, with transcriptStatus telling their UI exactly when to show "no captions available" instead of an empty box.

Scraping publicly accessible data has been treated as broadly permissible under U.S. law where no authentication is bypassed — see hiQ Labs, Inc. v. LinkedIn Corp., 938 F.3d 985 (9th Cir. 2019), which found that accessing public profile data did not violate the Computer Fraud and Abuse Act. YouTube Shorts Scraper reads only what YouTube already serves to a logged-out visitor: no login, cookie, or session is used.

Scraping YouTube may still conflict with YouTube's own Terms of Service, which is a contractual matter between the user and YouTube rather than a criminal one — enforcement typically takes the form of account or access restrictions rather than litigation against a scraper's users, though this varies by use.

Some fields in the output — channelName, channelDescription, channelLocation, and any real name a creator uses as their channel identity — can constitute personal data about an identifiable individual under GDPR or CCPA when that creator is a natural person rather than a brand. If you store or process this data about EU or California residents, you are the data controller for that processing and are responsible for having a lawful basis for it.

YouTube Shorts Scraper returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications involving personal data.

❓ Frequently asked questions

Does YouTube Shorts Scraper work without a YouTube account?

Yes. No YouTube account, login, cookie, or API key is required. The Actor reads InnerTube endpoints and public watch pages the same way a logged-out browser does. The only credential you need is your own Apify API token to run the Actor.

How does YouTube Shorts Scraper handle YouTube's anti-scraping measures?

Transcript and caption-track recovery routes through Apify Residential proxy by default, rotating to a fresh proxy session on each caption-track attempt, because YouTube serves the full captionTracks block only to residential browser-fingerprint requests. Watch-page and timedtext requests use a Chrome-impersonated TLS/HTTP2 fingerprint (via curl_cffi) rather than a default HTTP client signature, with retries and exponential backoff on both InnerTube API calls and page fetches.

Can I run YouTube Shorts Scraper at scale without getting blocked?

maxResults accepts up to 10,000 per source, and multiple sources run independently within one call. No uptime or success-rate figure is published for this Actor — actual throughput depends on how many sources you supply and whether transcriptMode is set to aggressive, which issues more requests per Short in exchange for higher transcript coverage.

How fresh is the data YouTube Shorts Scraper returns?

Live. Every run calls YouTube's InnerTube API and public watch pages directly — there is no caching layer. Two runs seconds apart on the same channel can return different viewCount or likes values if the Short is still accumulating engagement.

Does maxResults set below 10 actually cap the run to that number?

Not exactly — verify this against your own run before relying on it for cost control. The Actor's internal video-ID collection target is calculated as max(10, maxResults), so a maxResults of, say, 5 still collects and pushes up to 10 candidate Shorts per source rather than 5. Setting maxResults at 10 or above behaves as documented.

Which fields work best for AI training and RAG indexing?

For RAG: transcript in singleStringText format is the primary text chunk, with title and hashtags as topic metadata and channelName/id for source attribution. For training data: viewCount, likes, commentsCount, and duration are the most structurally consistent numeric fields across every row. All fields return as typed primitives, arrays, or nested objects — no HTML or string parsing is needed before indexing.

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

Yes. It is callable as a standard HTTP endpoint through the Apify API, so any agent framework — LangChain, CrewAI, n8n, or a hand-written tool definition — can invoke it and receive typed JSON with no parsing step before it reaches an LLM context window.

What happens when a Short has no captions?

The row is still returned with every metadata field populated normally; only the three transcript fields differ. transcript comes back null, transcriptStatus is "no_captions", and transcriptLanguage is null. No row is silently dropped and no transcript text is invented to fill the gap.

Does the Actor return data about private individuals rather than businesses?

It can. Shorts are public content, but the uploading channel may belong to an individual creator rather than a brand, in which case channelName and related fields describe an identifiable person. The Actor does not distinguish between a personal and a business channel — that assessment, and the lawful basis for storing any personal data returned, is the user's responsibility.

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

Checked on the Apify Store on 26 July 2026: lume/yt-transcripts and thirdwatch/youtube-transcripts-scraper both require you to already have the video URL or ID and focus purely on transcript extraction, with thirdwatch publishing per-video pricing (from $0.003) and unbilled failed rows. Neither discovers Shorts from a channel or keyword the way this Actor does. If your workflow starts from "a video I already found," either of those is a more specialized tool. If it starts from "this creator" or "this topic," this Actor's channel/handle/keyword input and bundled channel metadata cover more of the job in one run.

Disclaimer

YouTube Shorts Scraper extracts only publicly available data from YouTube. This tool is intended for lawful use cases only. Users are responsible for complying with YouTube's Terms of Service and applicable data protection laws in their jurisdiction.