YouTube Transcript & Subtitle Scraper avatar

YouTube Transcript & Subtitle Scraper

Pricing

from $5.00 / 1,000 transcript extracteds

Go to Apify Store
YouTube Transcript & Subtitle Scraper

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

Sebastián S

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

8 days ago

Last modified

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?

DataExact fields or formats
Video identityinput, inputIndex, videoId, canonicalUrl
Public metadatatitle, channelId, channelName, durationSeconds, publishedAt, thumbnailUrl, isShort, isLive
Caption selectionlanguageCode, languageName, sourceLanguageCode, captionType, isGenerated, isTranslated, availableTracks
Transcript artifactstranscriptText, segments, srt, vtt, markdown, chunks
Counts and diagnosticswordCount, characterCount, segmentCount, provider, extractionMs, diagnostics, fetchedAt
Result and storage statestatus, 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:

EventCurrent priceCharged when
Actor Start$0.00005Once when the 512 MB Actor run starts
transcript-extracted$0.005Once 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

  1. Open the Actor and click Try for free.
  2. Add individual public video URLs or IDs under YouTube video URLs or IDs.
  3. Choose the languages, caption preference, cleaning, and output formats you need.
  4. Click Start, then open the Output or Dataset tab.
  5. 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.

FieldDefaultLimits and interactions
videoUrlsRequired1-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.
captionPreferencemanual-firstmanual-first, auto-first, manual-only, or auto-only; an *-only mode may reject an otherwise usable track.
fallbackToAnyLanguage, translateTotrue, unsetDisabled 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.
cleaningSchema defaultsCovers 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.
chunking2,000 max / 200 overlap / timestamps onUsed only for chunks. Size is 250-20,000 Unicode code points; overlap is 0-19,999 and smaller than size.
includeMetadatatrueIf false, all eight metadata fields are null; caption discovery still loads video information.
maxConcurrency, maxRetriesPerVideo, requestTimeoutSecs5, 3, 30Ranges: 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.
proxyConfigurationApify Proxy, RESIDENTIALApify groups/country or custom URLs. One proxy identity, cookie jar, and session per attempt; retries start fresh.
debugfalseAdds 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 whether text was requested. If externalized, use artifactKeys and keyValueStoreId.
  • Partial results: compare completed, successful, failed, and budgetExhausted in OUTPUT.
  • Duplicates: valid duplicate IDs produce one row; invalid inputs remain separate.
  • Temporary errors: for RATE_LIMITED, IP_BLOCKED, REQUEST_TIMEOUT, or NETWORK_ERROR, lower concurrency and rerun when retryable is true.
  • Caption errors: NO_CAPTIONS and TRANSCRIPTS_DISABLED mean no usable public track. PO_TOKEN_REQUIRED means 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.

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.

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.