YouTube Transcript Scraper (Text + Timestamps, No Login)
Pricing
$4.00 / 1,000 transcript returneds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
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
| Field | Description |
|---|---|
status | OK, NO_CAPTIONS, UNAVAILABLE (private, deleted, region-blocked), BLOCKED (YouTube bot check on every IP tried), ERROR or INVALID_INPUT |
title, channelName, channelId, durationSeconds | Video details |
language, languageName, isAutoGenerated | The caption track used |
availableLanguages | Every caption track on the video (code, name, auto-generated or not) |
text | The whole transcript as plain text |
segments | [{ start, duration, text }] in seconds, for timestamps and subtitles |
translatedTo | Set when you asked for YouTube's machine translation |
warning | e.g. translation was rate-limited, so the original language was returned |
Input
| Field | What to enter | Default |
|---|---|---|
videos | Video URLs (watch, youtu.be, shorts, embed, live) or 11-character IDs. Up to 1,000. | – |
channelOrPlaylistUrls | Channel (youtube.com/@handle, /channel/UC…) or playlist URLs. Up to 20. | – |
maxVideosPerSource | Videos to take from each channel (newest first) or playlist | 20 (max 500) |
preferredLanguages | Language codes in order, e.g. en, es. Human-made captions are preferred over auto-generated ones. | en |
includeAutoGenerated | Use YouTube's automatic captions when there are no human-made ones | on |
translateTo | Optional language code for YouTube's machine translation | – |
includeSegments | Include the timestamped segments array | on |
maxConcurrency | Videos in parallel | 3 (max 10) |
proxyConfiguration | Apify 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_CAPTIONSand 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
BLOCKEDrows orERRORrows withHTTP 429, lowermaxConcurrencyand 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 awarning. - 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.