YouTube Transcript Scraper: Channels, Playlists & SRT avatar

YouTube Transcript Scraper: Channels, Playlists & SRT

Pricing

from $0.70 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper: Channels, Playlists & SRT

YouTube Transcript Scraper: Channels, Playlists & SRT

YouTube transcripts with timestamps from videos, whole channels or playlists, in the languages you pick. $1 per 1,000 transcripts. SRT and VTT files, word times, every caption language listed.

Pricing

from $0.70 / 1,000 transcripts

Rating

0.0

(0)

Developer

Luzi

Luzi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Get the transcripts of YouTube videos, from video links or straight from a channel's newest uploads or a playlist, with every line timed. Pick the caption languages you want in order, or take the language spoken in the video. Each row also lists every caption language the video has and carries its title, channel, views, duration, tags and description. SRT and WebVTT subtitle text and word-level times come at no extra charge. No YouTube account, login or cookies needed.

Tested daily. Latest checks: 2 of 2 transcripts in 10 seconds; 94 transcripts from two whole channels' newest 40 uploads, a playlist and two videos, with SRT and VTT, in about 6 minutes.

What does this Actor do?

You give it YouTube video links (or video ids), channel links or playlist links. For each video it finds the captions, picks the language and kind you asked for, and saves one row per video with the transcript.

Each row comes with:

  • the transcript as plain text, and as timed lines (start, duration, text)
  • the caption language used, whether it is auto-generated, and whether it is one of the languages you asked for
  • every caption language the video has, and the languages YouTube can translate them to
  • optional SRT and WebVTT subtitle text, and optional word-level times
  • the video's title, description, tags, duration, views, thumbnail, channel name and id, and whether it is a live stream
  • the links on the video's end screen

Why use it?

  • Whole channels and playlists. Give a channel and get its newest uploads' transcripts, or give a playlist and get its videos' transcripts, without collecting video links first.
  • Your languages, in your order. List the languages you want; the first one a video has is used, and the row says which one you got.
  • Written or auto-generated, your choice. Take captions written by people first, or only one kind.
  • Subtitle files ready to save. SRT and WebVTT text on every row when you ask for it, at no extra charge.
  • Only transcripts are charged. A video without captions is skipped and costs nothing.

How to use it

  1. Paste one or more video, channel or playlist links into Video, channel or playlist links.
  2. Optionally, list the Languages you want, choose the Caption type, ask for Subtitle files or Word timestamps, and set Max videos per channel or playlist.
  3. Click Start. When the run ends, open the Output tab to view the transcripts or download them.

Run it with no input to see a sample: the transcripts of two videos, charged as usual.

  • Videos: a link as in your browser's address bar (https://www.youtube.com/watch?v=dQw4w9WgXcQ), a youtu.be/… share link, a Shorts, live or embed link, or the 11-character video id on its own.
  • Channels: https://www.youtube.com/@handle (any of its tabs), /channel/UC…, /c/… or /user/…, or a bare @handle or UC… id. A channel gives its newest uploads first.
  • Playlists: https://www.youtube.com/playlist?list=PL…, or the playlist id on its own. A playlist gives its videos in its own order.

Search pages and mixes are not supported.

Use it with YouTube Scraper's results

Already have video links in a YouTube Scraper run? Skip the copying:

  1. Run the YouTube Scraper, then open its run and copy the dataset id from the Storage tab (or paste the dataset's link).
  2. Paste it into Dataset id from a scraper run (datasetId) here. Or schedule this Actor after the other one and pass the id each time. If your account cannot read that dataset, paste its rows into Rows from a scraper run (datasetRows) instead.
  3. Click Start. The Actor reads each row's url as a link, adds it to the links and reads its transcript. Our YouTube Search and YouTube Channel Videos Actors write the same url field, so their datasets work too.

Rows with no usable video link, such as channel or playlist rows, are skipped. The status line says how many rows were read and how many were skipped. A link in both the links and the dataset is read once. If the links still hold the form's example links when you give a dataset, they are left out, and the status says so. At most 10,000 rows are read from one dataset. Transcripts are priced as usual, whichever way the links reached us.

Input

FieldWhat it doesDefault
Video, channel or playlist links (startUrls)What to read. Required unless you give a dataset.—
Languages (languages)Caption languages in order of preference, such as ["es", "en"]spoken
Caption type (captionType)any (written by people first), manual or autoany
Subtitle files (subtitleFormats)Also return srt and/or vtt textnone
Word timestamps (wordTimestamps)Also list each word's start time, where YouTube times wordsfalse
Max videos per channel or playlist (maxVideosPerChannel)How many videos to read from each channel or playlist10

Example input:

{
"startUrls": [
{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" },
{ "url": "https://www.youtube.com/@3blue1brown" }
],
"languages": ["en"],
"captionType": "any",
"subtitleFormats": ["srt"],
"maxVideosPerChannel": 20
}

Output

One row per video. An example, with made-up values and shortened lists:

{
"video_id": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "A video title",
"channel_name": "A Channel",
"channel_id": "UC1111111111111111111111",
"channel_url": "https://www.youtube.com/channel/UC1111111111111111111111",
"description": "The video's description…",
"keywords": ["tag one", "tag two"],
"duration_seconds": 213,
"view_count": 1234567,
"thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"is_live_content": false,
"is_private": false,
"is_crawlable": true,
"allow_ratings": true,
"is_tv_film": false,
"playable_in_embed": true,
"aspect_ratio": 1.7777778,
"available_qualities": ["1080p", "720p", "480p"],
"end_screen_items": [
{
"type": "video",
"title": "Another video",
"metadata": "1M views",
"video_id": "aaaaaaaaaa1",
"playlist_id": null,
"channel_id": null,
"url": "https://www.youtube.com/watch?v=aaaaaaaaaa1",
"start_ms": 190000,
"end_ms": 210000
}
],
"spoken_language": "en",
"caption_tracks": [
{
"language_code": "en",
"language_name": "English",
"is_auto_generated": false,
"is_translatable": true
},
{
"language_code": "en",
"language_name": "English (auto-generated)",
"is_auto_generated": true,
"is_translatable": true
}
],
"translation_languages": ["af", "ar", "de", "es", "fr"],
"language": "en",
"language_name": "English",
"is_auto_generated": false,
"requested_languages": ["en"],
"language_found": true,
"transcript": "Hello and welcome to the video …",
"word_count": 1520,
"line_count": 212,
"lines": [
{ "start": 1.2, "duration": 2.5, "text": "Hello and welcome" },
{ "start": 3.7, "duration": 3.1, "text": "to the video", "speaker_change": true }
],
"srt": "1\n00:00:01,200 --> 00:00:03,700\nHello and welcome\n…",
"vtt": null,
"source_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
FieldWhat it holds
video_idThe video's id
urlA link to the video
titleThe video's title
channel_nameThe channel's name
channel_idThe channel's id
channel_urlA link to the channel
descriptionThe video's description
keywordsThe video's tags
duration_secondsThe video's length in seconds
view_countThe video's views
thumbnail_urlThe largest thumbnail
is_live_contentWhether the video is or was a live stream
is_privateWhether the video is private
is_crawlableWhether YouTube lets search engines list the video
allow_ratingsWhether likes are turned on
is_tv_filmWhether YouTube marks the video as a TV show or film
playable_in_embedWhether the video can be embedded on other sites
aspect_ratioThe video's width divided by its height
available_qualitiesThe qualities it plays in, best first
end_screen_itemsThe videos, playlists, channels and links on its end screen, with when they show
spoken_languageThe language spoken in the video: its auto-generated captions' language, else its default track
caption_tracksEvery caption language the video has: code, name, auto-generated or not, translatable or not
translation_languagesThe languages YouTube offers to translate the captions to
languageThe language code of the transcript in this row
language_nameIts name, as YouTube shows it
is_auto_generatedWhether the transcript is YouTube's auto-generated captions
requested_languagesThe languages you asked for
language_foundWhether the transcript is in one of them (empty when you asked for none)
transcriptThe whole transcript as plain text
word_countWords in the transcript, counted by spaces (not for Chinese or Japanese)
line_countTimed lines in the transcript
linesTimed lines: start and duration in seconds, text; words with their start times if asked
srtThe transcript as SRT subtitle text, if asked for
vttThe transcript as WebVTT subtitle text, if asked for
source_urlThe link you gave: the video, or the channel or playlist it came from

Not included: translated transcripts (only the caption languages the video itself has), the video's upload date and likes, and its comments.

How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

You pay for what you get:

  • $1 per 1,000 transcripts ($0.001 a transcript). Each video is charged once per run.
  • No start fee, and nothing per channel or playlist. Subtitle files and word times cost nothing extra.

So the transcripts of 500 videos cost $0.50. A video without captions is skipped and not charged. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every transcript saved so far.

How long does a run take?

Expect about 15 transcripts a minute. In testing, 94 transcripts from two channels, a playlist and two videos took about 6 minutes, and two videos took about 10 seconds.

Good to know

  • Some videos have no captions. A video with none, or none of the kind you asked for, is skipped and not charged. From a video link, the run's status names it; from a channel or playlist, it is simply left out, so you may get fewer transcripts than Max videos per channel or playlist.
  • A language the video lacks falls back. When a video has none of your languages, you get its spoken language's transcript, and language_found says false.
  • Private, removed and age-restricted videos cannot be read. They are not charged, and the other videos carry on.
  • Check your links first. A link that is not a YouTube video, channel or playlist link stops the run before anything is read, and the message names it.
  • One video that cannot be read does not stop the run. The run fails only when no link could be read.

More Actors from us

Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a longer run, start it with POST /v2/acts/…/runs and read its dataset):

POST https://api.apify.com/v2/acts/luzivanlt~youtube-transcripts-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>

With the sample input as its JSON body:

{
"startUrls": [
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
},
{
"url": "https://www.youtube.com/watch?v=aircAruvnKk"
}
],
"captionType": "any",
"subtitleFormats": [],
"wordTimestamps": false,
"maxVideosPerChannel": 10
}

Its inputs, in the order of the input form:

InputWhat it takesDefault
startUrls (Video, channel or playlist links)YouTube videos (watch, youtu.be, Shorts, live and embed links, or 11-character video ids), channels (@handle, /channel/UC…, /c/ and /user/ links, or a bare @handle or UC… id) and playlists (a playlist link or its PL… id).—
datasetId (Dataset id from a scraper run)The id of a run's dataset from YouTube Scraper (streamers/youtube-scraper), so you do not copy video links by hand.—
datasetRows (Rows from a scraper run)Rows pasted from YouTube Scraper (streamers/youtube-scraper) results, as a JSON list, when its dataset id is not readable by your account.—
languages (Languages)Caption languages you want, in order of preference, as codes such as en, es or pt-BR (up to 20).—
captionType (Caption type)Which captions to use: any (captions written by people first, else auto-generated), manual (only captions written by people) or auto (only auto-generated)."any"
subtitleFormats (Subtitle files)Also return the transcript as subtitle file text, ready to save as a .srt or .vtt file, in the srt and vtt fields.[]
wordTimestamps (Word timestamps)Also list each word with its start time inside each timed line, where YouTube times words (auto-generated captions).false
maxVideosPerChannel (Max videos per channel or playlist)For each channel or playlist link, read this many of its videos: a channel's newest uploads first, a playlist in its own order.10

Apify's MCP server, https://mcp.apify.com, lists it as luzivanlt/youtube-transcripts-scraper. To give an AI agent this Actor as a tool, add the server to the agent's MCP config:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=luzivanlt/youtube-transcripts-scraper"
}
}
}

The client signs in with OAuth, or add "headers": { "Authorization": "Bearer <APIFY_TOKEN>" }.

Charged per transcript delivered; the sample input above costs at most $0.02.

FAQ

Do I need a YouTube account or cookies? No. The Actor reads the captions anyone can turn on under the video.

Can I get transcripts in a language the video has no captions for? Not yet: the Actor returns the caption languages the video itself has, and lists them in caption_tracks.

Can I run it from my own code, on a schedule, or with other apps? Yes. Like any Apify Actor, you can start it through the Apify API, run it on a schedule, and connect it to other apps with Apify's integrations and webhooks.

This Actor reads only captions and video details that anyone can see without logging in. Transcripts can contain what people say, and channel names can name a person. Only collect personal data when you have a legitimate reason to, and check YouTube's terms and the laws that apply to you. If you are unsure, ask a lawyer.

Support

Found a problem or missing a feature? Open an issue on the Issues tab and include the run's link.


This Actor is not affiliated with, endorsed by or sponsored by YouTube or Google.