YouTube Transcript Scraper Goat
Pricing
Pay per usage
YouTube Transcript Scraper Goat
Extract transcripts and captions from public YouTube videos in bulk. Returns timed segments (start, duration, text), the language, whether captions are auto-generated, and an optional joined plain-text blob. Accepts watch URLs, youtu.be links, Shorts, or raw video ids. No login or cookies.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Goutam Soni
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
YouTube Transcript Scraper
Extract transcripts and captions from public YouTube videos in bulk. Give it a list of videos and get back clean transcript text for each one. No login, no cookies, no browser automation.
What it does
For every video you provide, the actor returns:
- The transcript text, as ordered timed segments where available (each with a start time, duration, and text).
- A single joined plain-text version of the whole transcript (optional).
- The language the transcript was served in.
- Whether the captions are auto-generated or human-written.
- A flag telling you whether the result includes per-segment timing.
- A segment count for quick scanning.
It handles long videos correctly. A multi-hour video returns its complete transcript (thousands of segments), not just the first chunk. A tiered fetch keeps results coming even when one path is temporarily unavailable.
Input
| Field | Type | Description |
|---|---|---|
videos | array | List of YouTube videos. Accepts watch URLs, short youtu.be links, Shorts URLs, or raw 11-character video ids. Mix formats freely. |
preferredLanguages | array | Ordered list of language codes to prefer (for example en, es, de, ja). The first available match wins. Default ["en"]. |
includeTimestamps | boolean | Include start and duration per segment. Default true. |
combineToPlainText | boolean | Also emit a single fullText field with the whole transcript joined into one string. Default false. |
concurrency | integer | Number of videos processed in parallel. Default 5. |
proxyConfiguration | object | Optional proxy. Transcripts work cookielessly without one for typical volumes. |
Example input
{"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/dQw4w9WgXcQ","dQw4w9WgXcQ"],"preferredLanguages": ["en", "es"],"includeTimestamps": true,"combineToPlainText": false}
Output
One dataset item per video. Fields are returned in a clean, predictable order.
{"videoId": "dQw4w9WgXcQ","videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Example Video Title","language": "en","isAutoGenerated": false,"isTimed": true,"segmentCount": 61,"segments": [{ "start": 18.64, "duration": 3.24, "text": "We're no strangers to love" },{ "start": 22.64, "duration": 4.32, "text": "You know the rules and so do I" }]}
When combineToPlainText is enabled, each row also includes a fullText field with the entire transcript joined into one string.
Timed vs plain-text results
The isTimed flag tells you what kind of result you got:
isTimed: truemeans the transcript came back with per-segment timing. Thesegmentsarray hasstartanddurationfor each line.isTimed: falsemeans only the transcript text was available. The full text is returned infullText(and as a single text block insegments), with no per-line timing.
The row shape is identical either way, so you can process every row the same.
Videos without a transcript
If a video has no captions available, the actor returns a clean row with an error field set to no_transcript_available and an empty segments array, rather than failing the run. This keeps a bulk run intact even when a few inputs lack captions.
Use cases
- Summarize or analyze video content with your own tools.
- Build searchable archives of a channel's spoken content.
- Feed transcripts into translation or repurposing workflows.
- Power research and content analysis across many videos at once.
Notes
- Works on public videos that have captions (manual or auto-generated).
- Private, age-restricted, or members-only videos cannot be transcribed.
- Language selection prefers a human-written transcript over an auto-generated one in the same language.
FAQ
Do I need a YouTube API key or login?
No. This actor extracts public transcripts without any API key, login, or cookies.
Which videos work?
Any public YouTube video that has captions or auto-generated transcripts available.
What happens if a video has no transcript?
The actor reports that cleanly for that video and continues with the rest of your list.
Can I get transcripts in a specific language?
Yes. Set preferredLanguages, and when a video provides multiple caption tracks the available languages are returned.
Can I get timestamps or one plain-text block?
Both. Use includeTimestamps for per-line timing, or combineToPlainText for a single clean transcript string.
Related actors
Part of the scraper suite by goat255:
- YouTube Channel Scraper - a channel's videos with metadata.
- YouTube Comments Scraper - comments from any video.