YouTube Transcript Scraper: Captions, SRT & Text avatar

YouTube Transcript Scraper: Captions, SRT & Text

Pricing

from $0.50 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper: Captions, SRT & Text

YouTube Transcript Scraper: Captions, SRT & Text

Get YouTube transcripts and captions as plain text, timed segments, SRT or WebVTT, from video links, whole channels or playlists, in any language YouTube offers. Videos without captions are free.

Pricing

from $0.50 / 1,000 transcripts

Rating

0.0

(0)

Developer

Stratum ICS

Stratum ICS

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

YouTube Transcript Scraper gets the transcripts and captions of YouTube videos as plain text, timed segments, SRT or WebVTT subtitles, from single video links, whole channels or playlists. It reads the captions YouTube itself shows (creator-made or automatic) in any language the video offers, and returns one clean row per video with the title, channel, publish date, duration and language.

Use it as a YouTube transcript API without a YouTube API key or login: paste links, press Start, and download the results as JSON, CSV or Excel, or feed them straight into your AI tools. Videos without captions are saved with a clear status and are not charged.

Why use this YouTube Transcript Scraper?

  • Links, channels and playlists in one run. Paste watch, youtu.be, Shorts or live links, @handles or channel links, and playlist links. Channels and playlists are read up to the number of videos you choose.
  • The right language by default. Without settings you get each video in its original spoken language. YouTube adds automatic captions in dubbed languages to many videos; the scraper finds the language that was really spoken instead of taking the first track listed.
  • Your languages, in your order. List es, pt-BR, en and each video comes in the first one it has. en also matches en-GB and en-US.
  • Creator captions first. When a language has both creator-made and automatic captions, you get the creator's, or the automatic ones if you prefer.
  • Five output formats. Plain text, timed segments (start, duration, text), both, a ready SRT file or a WebVTT file.
  • Built for AI pipelines. Every row has the full text in one field, the timed segments, a word count that works for Japanese, Chinese and Thai too, and the language code, so it drops into chunking, summaries and search without clean-up.
  • You pay only for transcripts. Videos without captions, removed or private videos and failed requests are stored free, with the reason in statusMessage.
  • No proxy setup. YouTube shows captions to Apify's servers only through a proxy, and the scraper uses Apify datacenter proxy (part of every Apify plan) for exactly those requests by itself.

What data do you get?

FieldExampleNotes
videoId, url, titleUF8uR6Z6KLc, Steve Jobs' 2005 Stanford Commencement AddressShorts get a /shorts/ link
channelName, channelHandle, channelId, channelUrlStanford, @stanfordWho posted it
publishedAt, durationSeconds, viewCount2008-03-07, 904, 49272961Publish date, length in seconds, exact views
status, statusMessageokok, no_captions, unavailable or failed, with the reason
language, languageName, isAutoGenerateden, English, falseThe track you got
isRequestedLanguagetrueFalse when none of your languages existed and you got the original one
availableLanguages[{"code": "ja", "name": "Japanese", "isAutoGenerated": false}]Every caption track the video has
transcriptTextThis program is brought to you by Stanford University...The whole transcript as one text
segments[{"start": 7.47, "duration": 2.899, "text": "..."}]Timed lines, in seconds
srt, vtt1\n00:00:07,470 --> 00:00:10,369\n...Ready subtitle files, when you pick those formats
wordCount, segmentCount2301, 244Size of the transcript
sourceType, sourceInput, positionchannel, @stanford, 12Which input the video came from, and its place in the channel or playlist
thumbnailUrl, scrapedAtThumbnail link and the time the row was saved

How to get YouTube transcripts

  1. Open the Actor and paste one or more video links in Video links, or add Channels or Playlist links.
  2. For channels and playlists, set Maximum videos per channel or playlist (50 by default).
  3. Optional: list Preferred languages, turn off Prefer captions written by the creator, or pick an Output format.
  4. Press Start. Each transcript takes 10 to 30 seconds and the scraper works on 10 videos at once, so 1,000 videos take about 20 to 40 minutes.
  5. Download the dataset as JSON, CSV or Excel, or read it through the API.

How much does it cost?

You pay per transcript saved, and Apify bills it with your usage:

Apify planPrice per 1,000 transcripts
Free$1.00
Starter$0.80
Scale$0.60
Business$0.50

So 1,000 transcripts cost $1.00 on the Free plan, and a channel's 200 newest videos cost at most $0.20. Rows without a transcript are free. Each run also has a start fee of $0.0005. The Free plan's $5 monthly credit covers about 5,000 transcripts. You can set a maximum cost per run in the run options: the scraper stops at that amount and never charges past it.

Input

Three video links, with text and timed segments (the run behind the output below):

{
"videoUrls": [
"https://www.youtube.com/watch?v=UF8uR6Z6KLc",
"https://www.youtube.com/watch?v=VyICtBxmkWo",
"https://www.youtube.com/watch?v=D-WSODwniOc"
],
"outputFormat": "both"
}

The 20 newest videos of a channel as plain text, in English where it exists, else Spanish, else the original language:

{
"channels": ["@stanford"],
"maxVideos": 20,
"languages": ["en", "es"],
"outputFormat": "text"
}

Output

Three real rows, trimmed: long text, segments and language lists are shortened, and the last two show only some fields.

[
{
"videoId": "UF8uR6Z6KLc",
"url": "https://www.youtube.com/watch?v=UF8uR6Z6KLc",
"title": "Steve Jobs' 2005 Stanford Commencement Address",
"channelName": "Stanford",
"channelId": "UC-EnprmCZ3OXyAoG7vjVNCA",
"channelHandle": "@stanford",
"channelUrl": "https://www.youtube.com/@stanford",
"publishedAt": "2008-03-07",
"durationSeconds": 904,
"viewCount": 49272961,
"thumbnailUrl": "https://i.ytimg.com/vi/UF8uR6Z6KLc/hqdefault.jpg",
"status": "ok",
"statusMessage": null,
"language": "en",
"languageName": "English - English",
"isAutoGenerated": false,
"isRequestedLanguage": null,
"availableLanguages": [
{ "code": "ar", "name": "Arabic", "isAutoGenerated": false },
{ "code": "en", "name": "English (auto-generated)", "isAutoGenerated": true },
{ "code": "en", "name": "English - English", "isAutoGenerated": false }
],
"transcriptText": "This program is brought to you by Stanford University. Please visit us at stanford.edu Thank You. I am honored to be with you today at your ...",
"segments": [
{ "start": 7.47, "duration": 2.899, "text": "This program is brought to you by Stanford University." },
{ "start": 10.47, "duration": 3.973, "text": "Please visit us at stanford.edu" }
],
"srt": null,
"vtt": null,
"wordCount": 2301,
"segmentCount": 244,
"sourceType": "video",
"sourceInput": "https://www.youtube.com/watch?v=UF8uR6Z6KLc",
"position": null,
"scrapedAt": "2026-10-18T03:48:22.753Z"
},
{
"videoId": "VyICtBxmkWo",
"title": "【今朝の最新ニュース6本】通勤・通学中にいち早くきょうの最新ニュースをお届け! NNN NEWS ZIP!(2026年10月15日)",
"channelName": "日テレNEWS",
"publishedAt": "2026-10-14",
"durationSeconds": 470,
"status": "ok",
"language": "ja",
"languageName": "Japanese (auto-generated)",
"isAutoGenerated": true,
"transcriptText": "[音楽] NNN最新[音楽]ニュースです。 嫌な農林水産大臣はシャトルバスで指示者 を無料で送迎した問題などを巡り、国会 ...",
"segments": [
{ "start": 1.964, "duration": 2.02, "text": "[音楽]" },
{ "start": 7, "duration": 6.92, "text": "NNN最新[音楽]ニュースです。" }
],
"wordCount": 1215,
"segmentCount": 124
},
{
"videoId": "D-WSODwniOc",
"title": "BOLO SIMPLES DE TRIGO - SUPER FOFINHO",
"channelName": "Juarez Receitas Caseiras",
"publishedAt": "2024-11-14",
"durationSeconds": 196,
"status": "no_captions",
"statusMessage": "The video has no captions.",
"language": null,
"availableLanguages": [],
"transcriptText": null,
"segments": null,
"wordCount": null
}
]

With Output format set to SRT, the srt field holds a file you can save as it is:

1
00:00:07,470 --> 00:00:10,369
This program is brought to you by Stanford University.
2
00:00:10,470 --> 00:00:14,443
Please visit us at stanford.edu

A SUMMARY record in the run's key-value store counts transcripts, videos without captions and failures, and names any input that could not be read.

Tips

  • Leave Preferred languages empty to get every video in the language it was spoken in.
  • For AI tools, pick Plain text only to keep rows small, or Text and timed segments when you need to link answers back to a moment in the video.
  • Automatic captions follow the speech closely but can mishear names and rare words. Creator-made captions read better when they exist.
  • Rows with status failed are free; run those videos again.
  • Live streams get captions only after they end; premieres and upcoming streams are marked unavailable until then. So are videos YouTube blocks in the country the request comes from, with YouTube's reason in statusMessage.
  • To read a channel's Shorts or past live streams, pick those Channel tabs, or paste a link such as youtube.com/@name/shorts.

Integrations

  • API: start runs and read results over the Apify API; the API tab shows ready code.
  • Python: pip install apify-client, then
    from apify_client import ApifyClient
    client = ApifyClient("<YOUR_API_TOKEN>")
    run = client.actor("stratumics/youtube-transcript-scraper").call(run_input={"videoUrls": ["https://www.youtube.com/watch?v=UF8uR6Z6KLc"], "outputFormat": "text"})
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["wordCount"])
  • JavaScript: npm install apify-client, then
    import { ApifyClient } from 'apify-client';
    const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
    const run = await client.actor('stratumics/youtube-transcript-scraper').call({ channels: ['@stanford'], maxVideos: 20 });
    const { items } = await client.dataset(run.defaultDatasetId).listItems();
  • Zapier, Make, n8n: use the Apify app or node to get transcripts and send them to Google Docs, Notion, Airtable or a summarizing step.
  • AI agents: connect your agent to this scraper through the Apify MCP server (mcp.apify.com), so it can read any YouTube video's transcript when a question needs it.
  • Webhooks and schedules: get notified when a run finishes, or read a channel's newest videos every day.

FAQ

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Transcripts are the words of the video's creator and may be protected by copyright, so check how you may reuse them.

Which videos have transcripts?

Most videos with speech have automatic captions, and many also have captions written by the creator. Videos without speech, very new uploads and videos whose creator turned captions off have none; those rows are saved with status no_captions and are free.

Can it translate transcripts?

No. YouTube refuses automated requests for its machine translation of captions, so the scraper does not offer it. Ask for a language the video already has (availableLanguages lists them), or translate transcriptText with your own tool.

Why can an automatic transcript differ a little from the one on youtube.com?

YouTube keeps more than one version of some automatic captions and does not show the same one to every app and country. In our checks against the transcript panel on youtube.com, 8 of 10 videos matched word for word and timestamp for timestamp (two of them once the same caption track was picked); the other 2 differed in punctuation, spelling marks and line breaks, with 95% of their timestamps within a second.

Does it transcribe videos that have no captions?

No. It reads the captions YouTube has; it does not convert audio to text.

Why did I get a different language than I asked for?

When a video has none of your languages, you get its original-language transcript, with isRequestedLanguage set to false and a note in statusMessage.

Do I need a proxy?

No. The scraper sends the caption requests through Apify datacenter proxy on its own. You can pick your own proxy in the input to send every request through it.

Where can I report a problem?

Open an issue on the Issues tab with your run link and we will look at it.