๐ฌ YouTube Transcript Scraper
Pricing
from $5.00 / 1,000 results
๐ฌ 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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
16 hours ago
Last modified
Security
Limited permissionsShare
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.
| Data | Field | Included when |
|---|---|---|
| ๐ Video ID | videoId | Always |
| ๐ Title | title | Always |
| ๐ Transcript | captions | Always. A text array for json, a string for text, vtt and srt |
| ๐บ Channel name | channelName | channelNameBoolean is on |
| ๐ Channel ID | channelID | channelIDBoolean is on |
| ๐ Publish timestamp | datePublished | datePublishedBoolean is on |
| ๐ Readable date | dateText | dateTextBoolean is on |
| โณ Video age | relativeDateText | relativeDateTextBoolean is on |
| ๐ Views | viewCount | viewCountBoolean is on |
| ๐ Likes | likes | likesBoolean is on |
| ๐ฌ Comment count | comments | commentsBoolean is on |
| ๐ท Tags | keywords | keywordsBoolean is on |
| ๐ Thumbnail link | thumbnailUrl | thumbnailBoolean is on |
| ๐ Description | description | descriptionBoolean is on |
Note: Optional fields are empty or null when YouTube does not show the value for a video.
viewCount,likesandcommentsare formatted text such as27,406,159 viewsand564,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
commentsfield 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.
- Create a free Apify account using your email.
- Open YouTube Transcript Scraper.
- Add video, playlist or channel links to
urls, or add topics tosearchKeywords. - Choose the transcript format in
outputFormatand the preferred caption language inlanguage. - Tick any extra data points you want, such as
channelNameBooleanorviewCountBoolean. - Click Start and wait for the run to finish.
- 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.
| Plan | Price per transcript | Price 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.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
urls | array | One of urls or searchKeywords | prefilled with one video | Video, Shorts, short link, playlist or channel links |
searchKeywords | array | One of urls or searchKeywords | [] | Keywords. The top matching videos are added to your links |
scrapeShorts | boolean | No | false | Include Shorts found inside channels, playlists and searches |
maxVideosPerSource | integer | No | 10 | Videos taken from each playlist, channel or keyword (1 to 1000) |
maxResults | integer | No | 0 | Overall limit for the whole run, 0 means no limit |
outputFormat | string | No | json | json, text, vtt or srt |
language | string | No | en | Preferred caption language code |
channelNameBoolean | boolean | No | false | Add channelName |
channelIDBoolean | boolean | No | false | Add channelID |
datePublishedBoolean | boolean | No | false | Add datePublished |
dateTextBoolean | boolean | No | false | Add dateText |
relativeDateTextBoolean | boolean | No | false | Add relativeDateText |
viewCountBoolean | boolean | No | false | Add viewCount |
likesBoolean | boolean | No | false | Add likes |
commentsBoolean | boolean | No | false | Add comments |
keywordsBoolean | boolean | No | false | Add keywords |
thumbnailBoolean | boolean | No | false | Add thumbnailUrl |
descriptionBoolean | boolean | No | false | Add description |
maxConcurrency | integer | No | 4 | Videos processed at the same time (1 to 16) |
requestDelaySecs | number | No | 1.0 | Pause before each request starts, from 0 to 10 seconds |
maxRetries | integer | No | 8 | How many times one video is retried before it is skipped (3 to 12) |
proxyConfiguration | object | No | {"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
scrapeShortsis 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 tojson. 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
maxVideosPerSourceor setmaxResultsfor 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
scrapeShortsis 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
maxVideosPerSourcelow while testing. - Raise
maxConcurrencyfor speed, and raiserequestDelaySecsfor very large batches. - Set
maxResultsto 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 ApifyClientclient = 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
| Scraper | What it does |
|---|---|
| โก Fast YouTube Channel Scraper | Scrapes a channel's Videos, Shorts and Live tabs |
| ๐ฌ YouTube Comments Scraper | Extracts YouTube video comments and replies with author, text, likes and publish date |
| ๐ฅ YouTube Scraper | Scrapes YouTube videos, Shorts, channels, playlists, hashtags and search results |
| ๐ Best YouTube Transcripts Scraper | Get the transcript of any YouTube video, Short, playlist or channel: timestamped captions, SRT, chapters, language choice, video and channel details. |
| ๐ YouTube Transcript & Subtitles Scraper API | Get full YouTube transcripts with timestamps, chapters and SRT/VTT/TXT subtitle files for videos, Shorts, playlists, channels and searches. |
FAQ
Is it legal to scrape YouTube transcripts?
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.