AS
Apify Store
/scraper-engine/youtube-transcript-scraper
YouTube Transcript Scraper: Merged Transcript Export
YouTube Transcript Scraper extracts full transcripts from public YouTube videos with ease. Quickly retrieve spoken content for research, summarization, SEO, or accessibility—just enter a video URL and get clean, structured text. No login or API key required.
liveasyncunknown~30s typical
SOCIAL_MEDIAVIDEOS
$0.0020
per result + $0.01 call
plus $0.001 platform fee per run
Free actor: you pay compute at $0.002 per result plus $0.01 per run
Bring your own Apify Store key: provider portion drops to $0.
$Set up https://cracked-ai-pearl.vercel.app/SKILL.md, then use Cracked to run apify /scraper-engine/youtube-transcript-scraper for me.
Input
| Field | Type | Description |
|---|---|---|
| discoveryMode | string (urls | channel | playlist | search) | 'urls' = use the YouTube Video URLs list below (default, base behavior). 'channel' = expand each entry in Container URLs into that channel's videos. 'playlist' = expand each entry in Container URLs into that playlist's videos. 'search' = expand each entry in Search Queries into matching videos. Default: urls. default "urls" |
| containerUrls | array | Used when discoveryMode is 'channel' or 'playlist'. Add one or more channel URLs (e.g. https://www.youtube.com/@channelname) or playlist URLs (e.g. https://www.youtube.com/playlist?list=...). Each is expanded to its member videos, capped by Max Videos Per Container. default [] |
| searchQueries | array | Used when discoveryMode is 'search'. Add one or more keyword/search queries (e.g. 'apify web scraping tutorial'). Each query is expanded into matching videos, capped by Max Videos Per Container. default [] |
| maxVideosPerContainer | integer | Caps how many videos are expanded from EACH channel/playlist/search query (parents are the containers, not counted against this; this bounds the children per container). Example: 2 container URLs + maxVideosPerContainer=10 -> up to 20 videos total. Default is 10. default 10 |
| sortBy | string (date | popularity) | Order videos are expanded in for channel/search discovery before filters/cap are applied. 'date' = most recent first. 'popularity' = most viewed first. Playlists keep their own owner-defined order for 'date' and are re-sorted locally for 'popularity'. Default: date. default "date" |
| minDurationSeconds | integer | Only applies to discovery modes (channel/playlist/search) — direct URL mode ignores this. Skip discovered videos shorter than this many seconds. 0 = no minimum. Default: 0. default 0 |
| maxDurationSeconds | integer | Only applies to discovery modes (channel/playlist/search). Skip discovered videos longer than this many seconds. 0 = no maximum. Default: 0. default 0 |
| minViews | integer | Only applies to discovery modes (channel/playlist/search). Skip discovered videos with fewer views than this. 0 = no minimum. Default: 0. default 0 |
| publishedAfter | string | Only applies to discovery modes (channel/playlist/search). Only keep discovered videos published after this date. Accepts an absolute date (e.g. 2024-01-01) or a relative window (e.g. '30 days', '6 months'). Leave blank for no date filter. default "" |
| directVideoUrls | array | Used when discoveryMode is 'urls' (default). Add one or more YouTube links to extract transcripts from directly. Each completed video appears in your dataset automatically. (Also accepts the base actor's `urls` field name for backward compatibility.) ⚡ default [] |
| includeAutoGeneratedCaptions | boolean | Include YouTube's auto-generated English captions when a manually-created English transcript isn't available. Default is true. (Also accepts the base field name `includeEnglishAG`.) |
| includeNonEnglishTranscripts | boolean | Include transcripts in languages other than English. Default is false. (Also accepts the base field name `includeNonEnglish`.) |
| transcriptOutputFormat | string (timestamp | text) | Choose transcript style: 'timestamp' includes time markers, while 'text' returns clean plain text. Default is 'text'. (Also accepts the base field name `outputFormat`.) |
| proxyConfiguration | object | Optional proxy setup for stable access. Uses Apify Residential Proxy by default when needed. default {} |
Call it
curl
curl https://cracked-ai-pearl.vercel.app/v1/run \
-H "Authorization: Bearer ck_live_..." -H "content-type: application/json" \
-d '{"provider":"apify","endpoint":"/scraper-engine/youtube-transcript-scraper","input":{"discoveryMode":"urls","containerUrls":[],"searchQueries":[],"maxVideosPerContainer":10,"sortBy":"date","minDurationSeconds":0,"maxDurationSeconds":0,"minViews":0,"publishedAfter":"","directVideoUrls":[],"proxyConfiguration":{}},"wait":false}'poll
curl "https://cracked-ai-pearl.vercel.app/v1/runs/<runId>?wait=30" -H "Authorization: Bearer ck_live_..."cli
npx cracked-ai run -p apify -e /scraper-engine/youtube-transcript-scraper -i '{"discoveryMode":"urls","containerUrls":[],"searchQueries":[],"maxVideosPerContainer":10,"sortBy":"date","minDurationSeconds":0,"maxDurationSeconds":0,"minViews":0,"publishedAfter":"","directVideoUrls":[],"proxyConfiguration":{}}' -w 120mcp
run_tool({ provider: "apify", endpoint: "/scraper-engine/youtube-transcript-scraper", input: {"discoveryMode":"urls","containerUrls":[],"searchQueries":[],"maxVideosPerContainer":10,"sortBy":"date","minDurationSeconds":0,"maxDurationSeconds":0,"minViews":0,"publishedAfter":"","directVideoUrls":[],"proxyConfiguration":{}}, wait: false })Try it
Runs against your signed-in workspace balance. Sign in if you have not.