YouTube Transcript Scraper avatar

YouTube Transcript Scraper

Pricing

$2.00 / 1,000 video transcripts

Go to Apify Store
YouTube Transcript Scraper

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

Nick McNemar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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

  1. Open the Input tab and select JSON. Paste the small example below.
  2. Check Pricing and set your run spending limit, then start the run.
  3. Inspect transcript, segments and error. Each segment includes a start time; review caption accuracy before quoting.
  4. 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:

FieldMeaning
videoId, url, inputThe resolved video, its canonical URL and the exact string you supplied
title, channelName, channelIdVideo metadata from YouTube
durationSeconds, viewCountLength and public view count
language, languageNameLanguage of the returned text
sourceLanguageThe caption track the text came from (differs from language when translated)
isAutoGeneratedtrue when YouTube generated the captions automatically rather than the uploader
isTranslated, translatedToWhether YouTube machine-translated the text, and into what
availableLanguages, availableLanguagesDetailedEvery caption track the video offers, with names and auto-generated flags
translationLanguagesLanguage codes the track can be translated into
transcriptThe full text, one continuous string
segments[{ start, duration, text }] in seconds
srt, vttReady-to-save subtitle files (only when requested)
wordCount, characterCount, segmentCountSize of the transcript
errornull 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

  1. Paste your video links or IDs into YouTube videos, one per line. You can also pass them through the API as videoUrls.
  2. Optionally set a Preferred language (defaults to English) and, if you want a translation, a Translate to code.
  3. Tick the Output formats you need. Plain text and timestamped segments are on by default; add SRT or VTT if you want subtitle files.
  4. 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.