๐ŸŽฌ YouTube Transcript Scraper avatar

๐ŸŽฌ YouTube Transcript Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
๐ŸŽฌ YouTube Transcript Scraper

๐ŸŽฌ YouTube Transcript Scraper

Turn any YouTube video, playlist or channel into clean, structured text. Bulk-extract transcripts and captions in 75 languages, plus views, likes, comments, keywords and thumbnails. Text array, plain text, WebVTT or SRT โ€” ready for AI training data, RAG pipelines, summarisation and SEO.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

Data Minds

Data Minds

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

16 hours ago

Last modified

Security

Limited permissions

Share

What is YouTube Transcript Scraper?

YouTube Transcript Scraper extracts YouTube transcripts, subtitles and captions from video, Shorts, playlist and channel links or search keywords. Add your links, pick a transcript format and get one dataset row per video with the video ID, title and transcript. Pay per saved transcript, from $0.005 on the Gold plan.

Use this bulk YouTube transcript downloader for AI training data, RAG knowledge bases, YouTube content research and competitor video analysis. Just add a link and click Start. The Apify Free plan's $5 monthly credit covers about 714 transcripts at the Free price, before platform usage.

  • ๐Ÿง  Build AI training data from YouTube transcripts: collect one clean line per caption across many videos for language model datasets.
  • ๐Ÿ”Ž Feed a RAG knowledge base: turn whole channels and playlists into transcript text for search and retrieval.
  • ๐Ÿ“ฐ Repurpose YouTube videos into blog posts: get the full transcript as one block of text, ready to summarize YouTube videos into articles, quotes and newsletters.
  • ๐Ÿ“Š Run YouTube content research and competitor video analysis: add views, likes, comments, keywords and publish dates next to each transcript.
  • โ™ฟ Create subtitles for accessibility and study notes: download SRT or VTT subtitle files, including YouTube lecture subtitles.
  • โฐ Automate research workflows: run on a schedule so your transcript data stays fresh.

It runs on the Apify platform, so you also get the Apify API, scheduling, webhooks, integrations and dataset exports in JSON, CSV, Excel, XML and HTML. It collects transcripts from YouTube videos that have a caption track.

What can YouTube Transcript Scraper do?

  • ๐Ÿ”— Mix sources in one run: video links, Shorts links, playlists, channels and search keywords.
  • ๐Ÿงพ Choose the transcript format: text array, single line text, WebVTT or SubRip (SRT) with timestamps.
  • ๐ŸŒ Pick a caption language: choose from 76 language options, with English and then any available track as fallbacks. Creator-written and auto-generated captions are both collected.
  • ๐ŸŽฌ Add video details: tick channel name, channel ID, publish date, views, likes, comments, keywords, thumbnail and description.
  • ๐Ÿ“ฑ Control Shorts: include or skip Shorts found inside channels, playlists and searches.
  • โšก Get live results: every transcript is saved to the dataset as soon as it is ready.
  • ๐Ÿ“ฆ Export and automate: download your data, call the Actor through the API, and schedule runs.

What data can YouTube Transcript Scraper extract?

Every row always has videoId, title and captions. The other fields appear only when you tick the matching option in the input.

DataFieldIncluded when
๐Ÿ†” Video IDvideoIdAlways
๐ŸŽž TitletitleAlways
๐Ÿ“ TranscriptcaptionsAlways. A text array for json, a string for text, vtt and srt
๐Ÿ“บ Channel namechannelNamechannelNameBoolean is on
๐Ÿ”– Channel IDchannelIDchannelIDBoolean is on
๐Ÿ“… Publish timestampdatePublisheddatePublishedBoolean is on
๐Ÿ“† Readable datedateTextdateTextBoolean is on
โณ Video agerelativeDateTextrelativeDateTextBoolean is on
๐Ÿ‘€ ViewsviewCountviewCountBoolean is on
๐Ÿ‘ LikeslikeslikesBoolean is on
๐Ÿ’ฌ Comment countcommentscommentsBoolean is on
๐Ÿท TagskeywordskeywordsBoolean is on
๐ŸŒ„ Thumbnail linkthumbnailUrlthumbnailBoolean is on
๐Ÿ“„ DescriptiondescriptiondescriptionBoolean is on

Note: Optional fields are empty or null when YouTube does not show the value for a video. viewCount, likes and comments are formatted text such as 27,406,159 views and 564,840, not plain numbers.

What data can't YouTube Transcript Scraper extract?

  • Videos without a caption track. They are skipped and listed in a separate file with the reason.
  • Comment text and replies. The comments field is only a count. For comment text try YouTube Comments Scraper.
  • Video or audio files.

How to scrape YouTube transcripts

This Actor is designed for an easy start, even if you have never extracted data from the web before.

  1. Create a free Apify account using your email.
  2. Open YouTube Transcript Scraper.
  3. Add video, playlist or channel links to urls, or add topics to searchKeywords.
  4. Choose the transcript format in outputFormat and the preferred caption language in language.
  5. Tick any extra data points you want, such as channelNameBoolean or viewCountBoolean.
  6. Click Start and wait for the run to finish.
  7. Download your data in JSON, CSV, Excel, XML or HTML from the Output tab.

How much does it cost to scrape YouTube transcripts?

This Actor uses a pay-per-event pricing model: you pay for each transcript saved to the dataset, and platform usage is billed in addition. Videos that are skipped are not saved, so they are not charged.

PlanPrice per transcriptPrice per 1,000 transcripts
Free$0.007$7
Bronze$0.0063$6.30
Silver$0.0056$5.60
Gold$0.005$5

Each run also has a start event of $0.00005 per GB of memory, with a minimum of one. The default memory is 1024 MB, so a run starts with 1 event, which is $0.00005.

Worked example: 2,000 transcripts on the Gold plan cost 2,000 x $0.005 = $10. On the Silver plan, 500 transcripts cost 500 x $0.0056 = $2.80. Platform usage is billed in addition.

See the pricing page for all events.

Is scraping YouTube transcripts free?

You can start for free. The Apify Free plan includes $5 of monthly credit, which covers about 714 transcripts at the Free price of $0.007 (5 / 0.007 = 714.28), before platform usage. Paid plans lower the price per transcript. The run also stops as soon as the spending limit you set for it is reached, and the results saved so far are kept.


Input

The Actor needs at least one YouTube link in urls or one keyword in searchKeywords. Everything else is optional. Set the input in the Actor's interface or send it as JSON through the API.

This example collects the transcript of one video with the default settings:

{
"urls": ["https://www.youtube.com/watch?v=Qb9s3UiMSTA"],
"searchKeywords": [],
"maxVideosPerSource": 10,
"maxConcurrency": 4,
"maxRetries": 8,
"proxyConfiguration": {
"useApifyProxy": false
}
}

See the input schema for a full description of every field.

FieldTypeRequiredDefaultDescription
urlsarrayOne of urls or searchKeywordsprefilled with one videoVideo, Shorts, short link, playlist or channel links
searchKeywordsarrayOne of urls or searchKeywords[]Keywords. The top matching videos are added to your links
scrapeShortsbooleanNofalseInclude Shorts found inside channels, playlists and searches
maxVideosPerSourceintegerNo10Videos taken from each playlist, channel or keyword (1 to 1000)
maxResultsintegerNo0Overall limit for the whole run, 0 means no limit
outputFormatstringNojsonjson, text, vtt or srt
languagestringNoenPreferred caption language code
channelNameBooleanbooleanNofalseAdd channelName
channelIDBooleanbooleanNofalseAdd channelID
datePublishedBooleanbooleanNofalseAdd datePublished
dateTextBooleanbooleanNofalseAdd dateText
relativeDateTextBooleanbooleanNofalseAdd relativeDateText
viewCountBooleanbooleanNofalseAdd viewCount
likesBooleanbooleanNofalseAdd likes
commentsBooleanbooleanNofalseAdd comments
keywordsBooleanbooleanNofalseAdd keywords
thumbnailBooleanbooleanNofalseAdd thumbnailUrl
descriptionBooleanbooleanNofalseAdd description
maxConcurrencyintegerNo4Videos processed at the same time (1 to 16)
requestDelaySecsnumberNo1.0Pause before each request starts, from 0 to 10 seconds
maxRetriesintegerNo8How many times one video is retried before it is skipped (3 to 12)
proxyConfigurationobjectNo{"useApifyProxy": false}Optional network setup. Leave the default unless you need it

urls

Add one link per entry. Video, Shorts, short links, playlists and channels work. Playlists and channels are expanded into single videos, up to maxVideosPerSource.

  • โœ… Good: https://www.youtube.com/watch?v=VIDEO_ID
  • โœ… Good: https://www.youtube.com/playlist?list=PLAYLIST_ID
  • โœ… Good: https://www.youtube.com/@handle
  • โŒ Bad: https://example.com/video

Warning: Links that are not YouTube links are skipped. A Shorts link that you paste yourself is always processed, even when scrapeShorts is off.

outputFormat and language

outputFormat sets the shape of the captions field: json is a text array with one line per caption, text is one continuous string, vtt is WebVTT with timings and srt is SubRip with timings. language is your preferred caption language. If the video has no track in that language, English is used, then any other track the video offers.

  • โœ… Good: "outputFormat": "srt" for subtitle files with timestamps
  • โŒ Bad: "outputFormat": "csv" is not a transcript format. Unknown values fall back to json. Export CSV from the dataset instead.

maxVideosPerSource and maxResults

maxVideosPerSource limits videos taken from each playlist, channel or keyword. Individual video links are never limited by it. maxResults is applied last, after all sources are expanded and duplicates are removed.

Warning: Large channels can produce thousands of videos. Start with a small maxVideosPerSource or set maxResults for a test run.


Output

Results are stored in a dataset in the Output or Storage tab, one row per video. You can view them as a table or JSON, choose the fields you need, and download them in JSON, CSV, Excel, XML or HTML. The dataset has views for transcripts, channel and publishing data, engagement stats and metadata.

JSON example

Results for the input example above, with the default json format:

[
{
"videoId": "EXAMPLE_ID_01",
"title": "Example video title",
"captions": [
"Welcome to this example video.",
"Today we look at https://example.com and how it works."
]
}
]

With outputFormat set to text and every extra data point ticked, a row looks like this:

[
{
"videoId": "EXAMPLE_ID_01",
"title": "Example video title",
"channelName": "Example Channel",
"channelID": "UCexample0000000000000000",
"datePublished": "2024-02-22T23:00:12.000Z",
"dateText": "Feb 22, 2024",
"relativeDateText": "2 years ago",
"viewCount": "1,234 views",
"likes": "56",
"comments": "7",
"keywords": "example, demo, transcript",
"thumbnailUrl": "https://example.com/thumbnail.jpg",
"description": "Example description of the video.",
"captions": "Welcome to this example video. Today we look at https://example.com and how it works."
}
]

With srt the captions value is a string of numbered cues such as 1, 00:00:00,000 --> 00:00:02,000 and the caption line. With vtt it is the WebVTT text.

If any videos are skipped, the key-value store of the run also holds skipped-videos.json: a list with the url and the reason for each skipped video.

Notes and limitations

  • Only videos with a caption track produce a row. Both creator-written and auto-generated captions are used.
  • Private, members-only, removed and not-yet-premiered videos cannot be collected and are listed in skipped-videos.json.
  • A very large transcript is trimmed to fit in one row, and a warning appears in the log.
  • Shorts are 60 seconds or less. They are skipped in channels, playlists and searches unless scrapeShorts is on.

Tips and advanced usage

How many transcripts can you scrape with YouTube Transcript Scraper?

One run can take up to 1,000 videos from each playlist, channel or keyword, and you can add many sources. The real number depends on how many videos have captions and on your maxResults setting. The best way to know for your use case is a quick test run.

How to get faster or cheaper results

  • Leave every extra data point off for the leanest run.
  • Keep maxVideosPerSource low while testing.
  • Raise maxConcurrency for speed, and raise requestDelaySecs for very large batches.
  • Set maxResults to cap the number of transcripts and the cost of a run.

Known issues

  • Some videos are skipped when YouTube refuses a request. The reason is saved in skipped-videos.json, so you can run those links again a few minutes later.

Integrations and API

Can I use YouTube Transcript Scraper as an API?

Yes. The Apify API gives you programmatic access to this Actor: start runs, schedule them and fetch results. Use the apify-client package for Node.js or Python. See the API tab for ready-to-use code.

How to scrape YouTube transcripts with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("data_minds/youtube-transcript-scraper").call(
run_input={
"urls": ["https://www.youtube.com/watch?v=Qb9s3UiMSTA"],
"searchKeywords": [],
"maxVideosPerSource": 10,
"maxConcurrency": 4,
"maxRetries": 8,
"proxyConfiguration": {"useApifyProxy": False},
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Can I integrate YouTube Transcript Scraper with other apps?

Yes. Connect the Actor with cloud services through Apify integrations such as Make, Zapier, Google Sheets and Slack. Use webhooks to trigger an action when a run finishes, and schedule runs to collect new transcripts on a regular basis.

Can I use YouTube Transcript Scraper with AI agents (MCP)?

Yes. Connect the Actor to Claude and other AI assistants through the Apify MCP server. Open the MCP tab for setup steps.


Other YouTube scrapers

ScraperWhat it does
โšก Fast YouTube Channel ScraperScrapes a channel's Videos, Shorts and Live tabs
๐Ÿ’ฌ YouTube Comments ScraperExtracts YouTube video comments and replies with author, text, likes and publish date
๐ŸŽฅ YouTube ScraperScrapes YouTube videos, Shorts, channels, playlists, hashtags and search results
๐Ÿ”— Best YouTube Transcripts ScraperGet the transcript of any YouTube video, Short, playlist or channel: timestamped captions, SRT, chapters, language choice, video and channel details.
๐Ÿ”— YouTube Transcript & Subtitles Scraper APIGet full YouTube transcripts with timestamps, chapters and SRT/VTT/TXT subtitle files for videos, Shorts, playlists, channels and searches.

FAQ

Web scraping is generally legal when you extract publicly available data, but you must respect personal data rules, copyright and YouTube's terms of service. Read this guide and decide for your case. This is not legal advice, so ask a lawyer if you are unsure about your use.

How does YouTube Transcript Scraper work?

You give it YouTube links or search keywords and choose a transcript format and language. It expands playlists and channels into single videos, collects each video's captions and saves one row per video to your dataset as soon as it is ready. You then download the results or call them through the API.

Why scrape YouTube transcripts?

Transcripts turn video into searchable text. Teams use them for AI training data and RAG, content research, competitor video analysis, blog and newsletter repurposing, subtitles for accessibility and study notes. Doing this by hand means opening each video and copying text, which does not scale beyond a handful of videos.

Why am I getting fewer transcripts than expected?

Videos without captions in any language are skipped, and so are private, members-only or removed videos. Check skipped-videos.json in the run's key-value store for the reason per video. Also check maxResults, maxVideosPerSource and the scrapeShorts switch, which can all reduce the number of videos.

Can I scrape transcripts for a whole YouTube channel or playlist?

Yes. Add the channel or playlist link to urls and the Actor expands it into single videos. It takes up to maxVideosPerSource videos from each source, and up to 1,000 at most. Shorts are skipped inside channels and playlists unless you turn on scrapeShorts.

How do I export YouTube transcripts to CSV or Excel?

Open the finished run, go to the Output or Storage tab and choose an export format. The dataset can be downloaded as JSON, CSV, Excel, XML or HTML. For subtitle files with timestamps, set outputFormat to srt or vtt before you start the run.

What happens when a video has no transcript?

The video is skipped, no transcript charge applies and no row is saved for it. The skipped video and the reason are written to skipped-videos.json in the run's key-value store. If the video has captions only in another language, change language, because English and then any other available track are used as fallbacks.

Which languages are supported for YouTube transcripts?

You can pick a preferred caption language from 76 options in language, for example English, Spanish, Hindi, Arabic, Japanese or Chinese. The video must offer captions in that language. If it does not, English is used, then any other available track, so you still get a transcript.

Do I need a YouTube account or API key?

No. The input has no field for a YouTube account, cookies or API key. You only need an Apify account to run it. Add your links or keywords, choose the format and start the run from the Apify Console or through the Apify API.

YouTube Transcript Scraper not working?

First check that your links are public YouTube links and that the videos have captions. Then read skipped-videos.json for the reason per video. If a run still fails or looks wrong, please open a report on the Issues tab with your run link.


Support and feedback

Found a bug or have a feature request? Please create an issue on the Issues tab.

Need a custom solution or more data? Contact hello.dataminds@gmail.com.

Built and maintained by the data_minds team on Apify.

This Actor is an independent tool and is not affiliated with or endorsed by YouTube or Google. Use it in line with applicable laws and the terms of the platforms you work with.