YouTube Transcript & Subtitle Scraper
Pricing
from $5.00 / 1,000 transcript extracteds
YouTube Transcript & Subtitle Scraper
Turn public YouTube videos and Shorts into clean transcript text, timestamped segments, SRT, WebVTT, Markdown, and RAG-ready chunks. No YouTube API key or YouTube login is required.
Pricing
from $5.00 / 1,000 transcript extracteds
Rating
0.0
(0)
Developer
Sebastián S
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
What is YouTube Transcript & Subtitle Scraper?
YouTube Transcript & Subtitle Scraper reads caption tracks from public YouTube videos and Shorts. Give it a supported URL or raw 11-character ID and receive text, timestamped segments, SRT, WebVTT, Markdown, or RAG-ready chunks in a dataset. Use the output in search, subtitle, localization, analysis, and retrieval workflows without a YouTube API key or login.
- Process 1-1,000 inputs and deduplicate valid video IDs.
- Accept watch,
youtu.be, Shorts, embed, live-VOD, Music watch, and No-Cookie embed URLs. - Prefer or require manual or automatically generated captions.
- Rank BCP 47 languages, fall back, or request an advertised translation.
- Produce text, normalized segments, SRT, WebVTT, Markdown, and segment-aware chunks.
- Return metadata, track details, counts, diagnostics, and typed per-item errors.
- Externalize oversized artifacts instead of truncating them.
It is HTTP-only and does not download media, transcribe audio, sign in, crawl channels or playlists, scrape comments, or generate AI content.
What data can it extract or produce?
| Data | Exact fields or formats |
|---|---|
| Video identity | input, inputIndex, videoId, canonicalUrl |
| Public metadata | title, channelId, channelName, durationSeconds, publishedAt, thumbnailUrl, isShort, isLive |
| Caption selection | languageCode, languageName, sourceLanguageCode, captionType, isGenerated, isTranslated, availableTracks |
| Transcript artifacts | transcriptText, segments, srt, vtt, markdown, chunks |
| Counts and diagnostics | wordCount, characterCount, segmentCount, provider, extractionMs, diagnostics, fetchedAt |
| Result and storage state | status, errorCode, errorMessage, retryable, contentStoredExternally, keyValueStoreId, artifactKeys |
Caption wording, tracks, translations, and metadata are source-dependent. Cleaning does not verify accuracy against the audio.
What can you use the data for?
- Build timestamp-aware search or RAG indexes from known videos.
- Convert YouTube captions into SRT or WebVTT for subtitle editing and accessibility workflows.
- Analyze topics, terminology, mentions, or speaking patterns across a selected video set.
- Supply source text to a separate summarization, classification, moderation, or Q&A pipeline.
- Review native and YouTube-translated caption tracks for localization research.
How much does it cost?
The verified Store configuration uses pay-per-event pricing:
| Event | Current price | Charged when |
|---|---|---|
| Actor Start | $0.00005 | Once when the 512 MB Actor run starts |
transcript-extracted | $0.005 | Once for each successful transcript result |
run cost = $0.00005 + ($0.005 x successful transcripts)
One run with one successful transcript costs $0.00505. Invalid inputs and extraction error rows do not trigger transcript-extracted, but Actor Start still applies. Check the live Pricing tab before large jobs.
How to use YouTube Transcript & Subtitle Scraper
- Open the Actor and click Try for free.
- Add individual public video URLs or IDs under YouTube video URLs or IDs.
- Choose the languages, caption preference, cleaning, and output formats you need.
- Click Start, then open the Output or Dataset tab.
- Preview the rows or export them for your downstream workflow.
Input
This minimal input uses the defaults: English and manual captions preferred, fallback enabled, and text plus segments requested.
{"videoUrls": ["https://www.youtube.com/watch?v=aircAruvnKk"]}
See the Store Input tab for the complete schema.
| Field | Default | Limits and interactions |
|---|---|---|
videoUrls | Required | 1-1,000 URLs or raw IDs. Non-video pages become per-item errors; valid duplicates produce one result. |
preferredLanguages | ["en"] | Up to 20 unique BCP 47 codes in priority order; exact regional matches rank above base-language matches. |
captionPreference | manual-first | manual-first, auto-first, manual-only, or auto-only; an *-only mode may reject an otherwise usable track. |
fallbackToAnyLanguage, translateTo | true, unset | Disabled fallback can return NO_MATCHING_LANGUAGE. A native target wins; otherwise YouTube must advertise the BCP 47 translation. |
outputFormats | ["text", "segments"] | One or more of text, segments, srt, vtt, markdown, chunks. More formats increase output size. |
cleaning | Schema defaults | Covers entities, whitespace, Unicode, exact overlapping duplicates, and optional standalone non-speech cues. paragraphGapSeconds is 0-60 and affects full-text breaks and characterCount, not cue-based formats. |
chunking | 2,000 max / 200 overlap / timestamps on | Used only for chunks. Size is 250-20,000 Unicode code points; overlap is 0-19,999 and smaller than size. |
includeMetadata | true | If false, all eight metadata fields are null; caption discovery still loads video information. |
maxConcurrency, maxRetriesPerVideo, requestTimeoutSecs | 5, 3, 30 | Ranges: 1-20, 0-5 retries after the first attempt, and 10-120 seconds. Concurrency can increase rate limiting; retries multiply possible runtime, requests, and proxy traffic. |
proxyConfiguration | Apify Proxy, RESIDENTIAL | Apify groups/country or custom URLs. One proxy identity, cookie jar, and session per attempt; retries start fresh. |
debug | false | Adds sanitized phase logs without transcripts, cookies, tokens, response bodies, or proxy URLs. |
Accepted forms include YouTube watch, mobile watch, youtu.be, Shorts, embed, live-VOD, Music watch, and No-Cookie embed URLs. A watch URL with list uses its v video. Rows use completion order; sort by inputIndex.
Output
This compact, schema-valid success example uses the same input. Caption text and track selection are illustrative because they are source-dependent.
{"schemaVersion": "1.0","inputIndex": 0,"status": "success","videoId": "aircAruvnKk","canonicalUrl": "https://www.youtube.com/watch?v=aircAruvnKk","languageCode": "en","captionType": "manual","transcriptText": "Example normalized caption text.","segments": [{"index": 0,"startSeconds": 0,"endSeconds": 3,"durationSeconds": 3,"text": "Example normalized caption text."}],"wordCount": 4,"segmentCount": 1,"contentStoredExternally": false,"errorCode": null}
schemaVersion is 1.0; each unique video and invalid input produces one item. The Output tab has the full schema. Unrequested artifacts are null. Metadata and languageName are nullable. isShort is true only for explicit /shorts/{id} input, otherwise null. Success error fields are null; error rows have null metadata, caption, artifact, count, and provider fields.
The default dataset exports JSON, JSONL, CSV, Excel, HTML, XML, or RSS. The default key-value store holds the aggregate OUTPUT summary. Above 8 MiB, requested artifacts move there, inline artifact fields become null, and keyValueStoreId plus optional artifactKeys locate the files.
What happens with errors and partial results?
Input-schema or proxy-initialization errors can fail a run before video processing. Later failures produce status: "error", a stable errorCode, safe errorMessage, and retryable flag without discarding other rows.
- No rows: inspect run status and logs for input, proxy, or storage failures.
- Missing transcript: check
status,errorCode, and whethertextwas requested. If externalized, useartifactKeysandkeyValueStoreId. - Partial results: compare
completed,successful,failed, andbudgetExhaustedinOUTPUT. - Duplicates: valid duplicate IDs produce one row; invalid inputs remain separate.
- Temporary errors: for
RATE_LIMITED,IP_BLOCKED,REQUEST_TIMEOUT, orNETWORK_ERROR, lower concurrency and rerun whenretryableistrue. - Caption errors:
NO_CAPTIONSandTRANSCRIPTS_DISABLEDmean no usable public track.PO_TOKEN_REQUIREDmeans anonymous HTTP-only retrieval is unavailable.
What are the limits, performance characteristics, and best practices?
Verified limits are 1,000 inputs, concurrency 20, five retries after the first attempt, and 120 seconds per request. They are not performance guarantees; completion and success remain source- and network-dependent.
Start at concurrency 5 or lower and request only needed formats. Use segments for timestamped analysis, SRT/VTT for subtitle tools, and chunks for retrieval. Private, members-only, age-restricted, active live, authenticated, channel, playlist, profile, and search inputs are unsupported.
How can you use the API, scheduling, webhooks, and integrations?
The API tab provides REST examples. The official Node.js and Python clients can run the Actor and read its defaultDatasetId.
Save input as a task, attach a schedule, and use webhooks for run events. Dataset output also suits n8n's Apify nodes and Apify MCP. These require Apify authentication, not a YouTube key or login.
Frequently asked questions
Do I need a YouTube API key or account?
No. Extraction is anonymous; Apify API calls still require an Apify token.
Can it process a playlist or channel?
No. Supply individual videos. Other page types return UNSUPPORTED_INPUT_TYPE.
Can it create a transcript when captions are missing?
No. It reads existing public captions and does not transcribe audio.
Is it legal and responsible to use this Actor?
This Actor is not affiliated with or endorsed by YouTube or Google. Use it only when you have the right to retrieve and process the material. Consider YouTube's terms, copyright, privacy, data-protection requirements, and rules for your jurisdiction and downstream use. Do not bypass access controls or redistribute protected content without permission. This is not legal advice.
Which related Actors may help?
Use YouTube Comments Scraper with Replies when you need public comment threads, replies, authors, likes, badges, and creator-interaction signals rather than caption text.
Where can you get support?
Open an item in the Actor's Issues tab. Include the run ID, inputIndex, videoId when safe to share, and errorCode. Never post Apify tokens, proxy URLs, cookies, private inputs, or transcript content you are not allowed to disclose.