YouTube Transcript Scraper (Text + Timestamps, No Login) avatar

YouTube Transcript Scraper (Text + Timestamps, No Login)

Pricing

$4.00 / 1,000 transcript returneds

Go to Apify Store
YouTube Transcript Scraper (Text + Timestamps, No Login)

YouTube Transcript Scraper (Text + Timestamps, No Login)

Get YouTube transcripts as clean text plus timestamped segments from video URLs, channels or playlists. Picks your language, lists every caption language, supports auto-translation, and only charges for transcripts actually returned.

Pricing

$4.00 / 1,000 transcript returneds

Rating

0.0

(0)

Developer

Eddie Power

Eddie Power

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Turn any YouTube video into clean text. Paste video links, a channel or a playlist, and get back the full transcript as one block of text plus timestamped segments, the caption language, every language the video has captions in, and the video title. No YouTube account, no API key, no cookies.

Great for:

  • 🤖 AI and RAG pipelines: feed transcripts to ChatGPT, Claude or your own vector database
  • ✍️ Content repurposing: turn videos into blog posts, show notes, summaries or social posts
  • 🔎 Research and monitoring: search what a channel says across all its videos
  • ♿ Accessibility and subtitles: export timed captions for editing

What you get

FieldDescription
statusOK, NO_CAPTIONS, UNAVAILABLE (private, deleted, region-blocked), BLOCKED (YouTube bot check on every IP tried), ERROR or INVALID_INPUT
title, channelName, channelId, durationSecondsVideo details
language, languageName, isAutoGeneratedThe caption track used
availableLanguagesEvery caption track on the video (code, name, auto-generated or not)
textThe whole transcript as plain text
segments[{ start, duration, text }] in seconds, for timestamps and subtitles
translatedToSet when you asked for YouTube's machine translation
warninge.g. translation was rate-limited, so the original language was returned

Input

FieldWhat to enterDefault
videosVideo URLs (watch, youtu.be, shorts, embed, live) or 11-character IDs. Up to 1,000.–
channelOrPlaylistUrlsChannel (youtube.com/@handle, /channel/UC…) or playlist URLs. Up to 20.–
maxVideosPerSourceVideos to take from each channel (newest first) or playlist20 (max 500)
preferredLanguagesLanguage codes in order, e.g. en, es. Human-made captions are preferred over auto-generated ones.en
includeAutoGeneratedUse YouTube's automatic captions when there are no human-made oneson
translateToOptional language code for YouTube's machine translation–
includeSegmentsInclude the timestamped segments arrayon
maxConcurrencyVideos in parallel3 (max 10)
proxyConfigurationApify Proxy. Residential is the default because YouTube bot-checks most datacenter IPs.Apify Proxy, RESIDENTIAL
{
"videos": ["https://www.youtube.com/watch?v=jNQXAC9IVRw", "dQw4w9WgXcQ"],
"channelOrPlaylistUrls": ["https://www.youtube.com/@RickAstleyYT"],
"maxVideosPerSource": 10,
"preferredLanguages": ["en"]
}

Example output

{
"status": "OK",
"videoId": "jNQXAC9IVRw",
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"title": "Me at the zoo",
"channelName": "jawed",
"channelId": "UC4QobU6STFB0P71PMvOGN5A",
"durationSeconds": 19,
"language": "en",
"languageName": "English",
"isAutoGenerated": false,
"translatedTo": null,
"availableLanguages": [
{ "code": "en", "name": "English", "isAutoGenerated": false },
{ "code": "de", "name": "German", "isAutoGenerated": false }
],
"text": "All right, so here we are, in front of the elephants the cool thing about these guys is that they have really... really really long trunks and that's cool (baaaaaaaaaaahhh!!) and that's pretty much all there is to say",
"segments": [
{ "start": 1.2, "duration": 2.16, "text": "All right, so here we are, in front of the elephants" },
{ "start": 5.318, "duration": 2.656, "text": "the cool thing about these guys is that they have really..." }
],
"segmentCount": 6,
"error": null,
"warning": null,
"scrapedAt": "2026-10-26T10:40:00.000Z"
}

Export as JSON, CSV, Excel or via the API. The Timestamped segments view gives one row per caption line.

Pricing

Pay per event: you only pay for transcripts actually returned (status: OK). Videos with no captions, unavailable or blocked videos, errors and invalid inputs are free. See the Pricing tab for the current price. Set a maximum cost per run and the Actor stops cleanly when it's reached.

Limitations (please read)

  • Captions only, no speech-to-text. If a video has no captions at all (human-made or automatic), you get NO_CAPTIONS and aren't charged. Very new videos may not have automatic captions yet.
  • Rate limits and bot checks. YouTube throttles heavy traffic and shows a bot check to most datacenter IPs, so residential proxy is the default. The Actor spaces out requests, retries with backoff, rotates proxy sessions and tries several public player clients. If you still see BLOCKED rows or ERROR rows with HTTP 429, lower maxConcurrency and run again later.
  • Channels and playlists list public videos only. Members-only, private and age-restricted videos may return UNAVAILABLE.
  • YouTube changes things. This Actor reads YouTube's public caption data the same way the YouTube player does. If YouTube changes how that works, results may fail until the Actor is updated; issues reported in the Issues tab are fixed as fast as possible.
  • Machine translation (translateTo) is rate-limited much more strictly by YouTube. When it fails, you get the original-language transcript with a warning.
  • Auto-generated captions have no punctuation guarantees and can contain recognition errors.

Responsible use

Transcripts belong to the video creators. Use them for personal research, accessibility, analysis or with the creator's permission, and follow YouTube's Terms of Service and copyright law in your country. Don't republish transcripts as your own content. This Actor is independent and not affiliated with or endorsed by YouTube or Google.