YouTube Transcript Scraper: Subtitles, Captions, Playlists avatar

YouTube Transcript Scraper: Subtitles, Captions, Playlists

Pricing

$3.00 / 1,000 transcript scrapeds

Go to Apify Store
YouTube Transcript Scraper: Subtitles, Captions, Playlists

YouTube Transcript Scraper: Subtitles, Captions, Playlists

Bulk-extract YouTube transcripts (manual or auto captions) with timestamps as text, SRT, VTT or JSON, in the original language or auto-translated. Videos, Shorts & playlists; includes title, channel, duration, views, publish date. $3 per 1,000 videos.

Pricing

$3.00 / 1,000 transcript scrapeds

Rating

0.0

(0)

Developer

PulseData

PulseData

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

2 hours ago

Last modified

Share

YouTube Transcript Scraper

YouTube Transcript Scraper downloads the transcript of YouTube videos, Shorts and whole playlists, from manually created subtitles or from YouTube's auto-generated captions. Each video comes back as one JSON item with the transcript as plain text, timestamped segments, SRT or WebVTT, plus video metadata such as title, channel, duration, views and publish date. It costs $3 per 1,000 transcripts, and videos without a usable transcript are not charged.

No YouTube Data API key is needed and there is no quota.

Features

  • Convert a YouTube video to text: the full transcript as one plain text field, with a word count.
  • Get a YouTube transcript with timestamps as JSON segments (start, duration, text).
  • Download YouTube subtitles as SRT or VTT, ready for video editors and players.
  • Download transcripts for a whole YouTube playlist by pasting the playlist URL or ID.
  • Translate a YouTube transcript to English (or any language code) with YouTube's own caption translation through translateTo.
  • Choose the transcript language: give preferred language codes in order; manual captions are preferred over auto-generated ones within a language.
  • Lists every caption track a video has in availableLanguages, with language code, name, whether it is auto-generated and whether it is translatable.

Use cases

  • RAG and LLM apps: build a knowledge base from a channel's or playlist's videos, then summarise, search or answer questions over it.
  • Content repurposing: turn videos into blog posts, newsletters, show notes or social posts.
  • Research and monitoring: search transcripts for brand or keyword mentions, and analyse what competitors say in their videos.
  • Accessibility and localisation: SRT and VTT files in the original language or translated.
  • Finding a moment in a video: search the timestamped segments for a word and jump to that second.

Input

{
"videoUrls": [
"https://www.youtube.com/watch?v=aircAruvnKk",
"https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi"
],
"languages": ["en", "de"],
"fallbackToAnyLanguage": true,
"translateTo": "en",
"outputFormats": ["text", "segments", "srt"],
"includeMetadata": true,
"maxVideosPerPlaylist": 50
}
FieldTypeDefaultWhat it does
videoUrlsarrayrequiredVideo URLs (watch, youtu.be, Shorts, embed, live), bare 11-character video IDs, playlist URLs or playlist IDs.
languagesarray["en"]Preferred language codes in order. Leave empty to take the first track.
fallbackToAnyLanguagebooleantrueIf no preferred language exists, use the first available track.
translateTostringnoneHave YouTube translate the transcript into this language code.
outputFormatsarray["text", "segments"]Any of text, segments, srt, vtt.
includeMetadatabooleantrueAdd title, description, channel, duration, views, publish date, keywords, thumbnail and category.
maxVideosPerPlaylistinteger0Limit when expanding playlists; 0 means all.
concurrencyinteger5Videos processed in parallel, 1 to 20.
proxyConfigurationobjectno proxyOptional Apify Proxy settings.

Output

{
"videoId": "aircAruvnKk",
"url": "https://www.youtube.com/watch?v=aircAruvnKk",
"source": "https://www.youtube.com/watch?v=aircAruvnKk",
"scrapedAt": "2026-09-25T09:12:40.118Z",
"title": "But what is a neural network? | Deep learning chapter 1",
"description": "What are the neurons, why are there layers …",
"channelName": "3Blue1Brown",
"channelId": "UCYO_jab_esuFRV4b17AJtAw",
"durationSeconds": 1104,
"viewCount": 18923411,
"publishDate": "2017-10-05",
"uploadDate": "2017-10-05",
"category": "Education",
"keywords": ["neural networks", "deep learning"],
"isLive": false,
"thumbnail": "https://i.ytimg.com/vi/aircAruvnKk/sddefault.jpg",
"language": "en",
"languageName": "English",
"isAutoGenerated": false,
"translatedTo": null,
"availableLanguages": [
{ "language": "en", "name": "English", "autoGenerated": false, "translatable": true },
{ "language": "de", "name": "German", "autoGenerated": false, "translatable": true }
],
"segmentCount": 304,
"wordCount": 3120,
"text": "Here is a 28 by 28 pixel image …",
"segments": [
{ "start": 4.2, "duration": 3.1, "text": "Here is a 28 by 28 pixel image" }
],
"srt": "1\n00:00:04,200 --> 00:00:07,300\nHere is a 28 by 28 pixel image\n"
}

Only the formats listed in outputFormats are included. With includeMetadata off, the item keeps only title and channelName from the metadata.

Videos without a usable transcript come back with an error field and are not charged:

  • NO_CAPTIONS: the video has no caption tracks at all.
  • NO_MATCHING_LANGUAGE: none of your languages exist and fallbackToAnyLanguage is off. availableLanguages shows what the video does have.
  • A playability status such as LOGIN_REQUIRED or UNPLAYABLE, followed by YouTube's reason, for private, removed or restricted videos.
  • PLAYLIST_FAILED if a playlist could not be expanded.

Pricing

Pay per event: $0.003 per transcript (transcript-scraped), which is $3 per 1,000. Only items with a transcript are charged; error items are free.

Worked example: a playlist of 200 videos where 190 have captions costs 190 x $0.003 = $0.57. The 10 videos without captions appear in the dataset with an error and cost nothing. Choosing more output formats or turning on translation does not change the price.

FAQ

Does this work for videos without subtitles? Only if YouTube generated automatic captions for the video, which it does for many videos in widely spoken languages. Videos with no caption track at all return NO_CAPTIONS and are not charged. The actor does not do its own speech recognition.

Can I get the transcript in a different language? Yes. languages picks the source track, and translateTo asks YouTube to translate that track. Translation works when the track is marked translatable in availableLanguages.

Which formats are supported? Plain text, timestamped segments (JSON), srt and vtt, in any combination in one run. The whole dataset can be exported as JSON, CSV, Excel and other formats.

Can I process a whole channel? Not by channel URL. Paste a playlist of the channel, such as its uploads playlist (a playlist ID starting with UU), or list the channel's videos with the YouTube Channel Videos Scraper and pass the URLs here.

Do I need proxies? Usually not. If YouTube asks for a sign-in on a video and you have not set a proxy, the actor retries that video through Apify residential proxy.

Is this suitable for RAG and LLM apps? Yes, that is a main use. You get clean text plus metadata per video. The actor can be called through the Apify API and SDKs, scheduled, and used as an MCP tool by AI agents, or connected through the Apify integrations for LangChain, LlamaIndex, Make, Zapier and n8n.