YouTube Transcript Scraper
Pricing
$2.00 / 1,000 video transcripts
YouTube Transcript Scraper
Turn public YouTube video links into transcript text and timestamped segments for research, AI workflows and content briefs. Export SRT or VTT when requested. No YouTube login or API key required; videos must have accessible captions.
Pricing
$2.00 / 1,000 video transcripts
Rating
0.0
(0)
Developer
Nick McNemar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn video links into text with usable timestamps
Retrieve accessible YouTube captions as transcript text, timestamped segments, SRT or VTT. Use the text in your own research or AI workflow. This Actor retrieves captions; it does not transcribe audio or generate summaries. Supply individual video links, not channel or playlist URLs.
Get a useful first result
- Open the Input tab and select JSON. Paste the small example below.
- Check Pricing and set your run spending limit, then start the run.
- Inspect
transcript,segmentsanderror. Each segment includes a start time; review caption accuracy before quoting. - Export the result as JSON or CSV. Check a small sample before increasing the input size.
{"videoUrls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"],"outputFormats": ["text","segments"],"maxItems": 1}
The sample incurs $0.002 in Actor event fees if it returns the intended number of rows. The rate checked September 7, 2026 is $2.00 per 1,000 output rows. Check the live Pricing tab before running; taxes or other account services may be separate.
What can I use it for?
- AI and RAG pipelines. Turn a supplied list of individual video links into text your LLM can read, chunk and embed. Timestamped segments let you cite the exact moment in the video.
- Content repurposing. Draft blog posts, newsletters, show notes and social snippets from what was actually said.
- Research and monitoring. Search across hundreds of talks, interviews, earnings calls or lectures for the terms you care about.
- Accessibility and localisation. Export SRT or VTT files, or use YouTube's own machine translation to get a transcript in another language.
- SEO and analysis. Keyword density, topic clustering and quote extraction across a competitor's catalogue.
- Data enrichment. Attach transcripts to a spreadsheet of video links in one run.
What data does it return?
One record per video:
| Field | Meaning |
|---|---|
videoId, url, input | The resolved video, its canonical URL and the exact string you supplied |
title, channelName, channelId | Video metadata from YouTube |
durationSeconds, viewCount | Length and public view count |
language, languageName | Language of the returned text |
sourceLanguage | The caption track the text came from (differs from language when translated) |
isAutoGenerated | true when YouTube generated the captions automatically rather than the uploader |
isTranslated, translatedTo | Whether YouTube machine-translated the text, and into what |
availableLanguages, availableLanguagesDetailed | Every caption track the video offers, with names and auto-generated flags |
translationLanguages | Language codes the track can be translated into |
transcript | The full text, one continuous string |
segments | [{ start, duration, text }] in seconds |
srt, vtt | Ready-to-save subtitle files (only when requested) |
wordCount, characterCount, segmentCount | Size of the transcript |
error | null on success, otherwise a plain-language reason |
Videos without captions, private videos, age-restricted videos and invalid links are still returned as records with an error, so your input and output always line up one to one.
Illustrative output
The example below explains the output shape; values are illustrative and are not a live result or a promise that every field is populated.
{"videoId": "jNQXAC9IVRw","url": "https://www.youtube.com/watch?v=jNQXAC9IVRw","title": "Me at the zoo","channelName": "jawed","durationSeconds": 19,"language": "en","languageName": "English","isAutoGenerated": false,"isTranslated": false,"availableLanguages": ["en", "es", "fr"],"transcript": "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. And that's pretty much all there is to say.","segments": [{ "start": 0.0, "duration": 2.5, "text": "All right, so here we are in front of the elephants." },{ "start": 2.5, "duration": 5.0, "text": "The cool thing about these guys is that they have really, really, really long trunks," }],"wordCount": 39,"segmentCount": 5,"error": null}
How to use it
- Paste your video links or IDs into YouTube videos, one per line. You can also pass them through the API as
videoUrls. - Optionally set a Preferred language (defaults to English) and, if you want a translation, a Translate to code.
- Tick the Output formats you need. Plain text and timestamped segments are on by default; add SRT or VTT if you want subtitle files.
- Click Start. Download results from the Output tab as JSON, CSV, Excel or XML, or read them from the dataset via the API.
Input example
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/jNQXAC9IVRw","https://www.youtube.com/shorts/aqz-KE-bpKQ"],"language": "en","outputFormats": ["text", "segments", "srt"],"maxItems": 100}
How it works
The actor asks YouTube's own player service which caption tracks a video offers, chooses the best match for your preferred language, and downloads that track in YouTube's structured format. It then normalises the timing, decodes text encoding artefacts, and builds the outputs you asked for from the same data, so the plain text, segments, SRT and VTT always agree.
Language selection follows a fixed order you can rely on: an uploaded track in your preferred language, then an auto-generated track in that language, then any uploaded track, then the first track the video has. Set Prefer human-made captions to off if you would rather take auto-generated captions when both exist. When you request a translation, the actor translates from the track it selected and reports both the source and target language.
If YouTube refuses a direct request, the actor automatically retries that video through a residential proxy. You do not need to configure anything for this, and it only happens when needed, which keeps the cost per video low.
Pricing
You pay per video processed. There are no subscriptions or minimums, and you can cap the maximum spend of any run before it starts. Videos that turn out to have no transcript still count as processed, because the actor has to query YouTube to find that out β keep your input list clean to get the most from a run.
Scope and responsible use
This actor retrieves only the caption data that YouTube already serves publicly for a video. It does not log in, does not use cookies or credentials, does not download video or audio, and does not attempt to bypass age gates, membership restrictions or privacy settings. If a creator has not made captions available, the actor reports that rather than working around it. You are responsible for using transcripts in line with the rights of the people who made the content and the laws that apply to you.
Limitations
- Videos with no captions of any kind, private videos, members-only videos and most age-restricted videos cannot be transcribed and are returned with an
error. - Auto-generated captions are only as accurate as YouTube's speech recognition, and translations are machine-made.
- Live streams that are still in progress do not have a finished transcript.
- Playlists and channel URLs are not expanded; supply the individual video links.
Something wrong?
Open an issue on this actor's Issues tab with the video link and what you expected. YouTube changes its internals from time to time and include the affected input and expected output so the issue can be investigated.
Before a larger run
Error rows are also charged. Start small and inspect errors before processing a long list. These are paid examples, not a free-results offer. No source-site API key is needed for the example in Console; programmatic Apify API access still requires Apify authentication.
Five internal launch smoke rounds passed on September 6, 2026. This describes small-input test coverage, not customer reviews, a service-level guarantee or a large-batch benchmark. Website behavior and data availability can change.