YouTube Transcript Scraper & API: $1 per 1,000 Transcripts
Pricing
$1.00 / 1,000 transcripts
YouTube Transcript Scraper & API: $1 per 1,000 Transcripts
Get YouTube transcripts, subtitles and captions with video info (title, channel, date, views, likes) from videos, channels, playlists or searches. Full text plus timestamped segments in the original language, ready for AI. $1 per 1,000 transcripts; no captions = free.
Pricing
$1.00 / 1,000 transcripts
Rating
5.0
(1)
Developer
Melon Data
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
1
Monthly active users
a day ago
Last modified
Categories
Features
Share
What is this YouTube Transcript Scraper?
YouTube Transcript Scraper that turns YouTube videos into clean text: the full transcript (subtitles / captions) of each video, with timestamped segments and the video's public information (title, channel, publish date, views, likes, description). Paste video links, or a channel, a playlist or a search, and get one result per video, ready for AI, search or analysis. $1 per 1,000 transcripts, all included (proxies and platform usage). Videos without captions are free. No start fee.
It works like a YouTube transcript API, with no YouTube account and no API key. It uses plain HTTP requests (no browser, no video or audio download): a channel of 500 videos took 3 to 5 minutes in our benchmark, and a single video takes 2 to 15 seconds (measured, October 2026). The transcript comes in the video's original language by default; ask for another language when the video has it.
Use it for RAG and chatbots, video summaries, content repurposing (blog posts, newsletters), SEO and keyword research, media monitoring, or to build datasets. Run it from Apify Console, through the API, on a schedule, or from Make, n8n and Zapier. Apify's free plan ($5 of monthly credit) covers up to 5,000 transcripts a month.
🇫🇷 Transcription YouTube : sous-titres et transcriptions de vidéos, chaînes, playlists ou recherches, avec horodatage. 1 $ les 1 000. 🇪🇸 Transcripción de YouTube: subtítulos y transcripciones de videos, canales, listas o búsquedas, con marcas de tiempo. 1 $ por 1.000. 🇩🇪 YouTube-Transkript: Untertitel und Transkripte von Videos, Kanälen, Playlists oder Suchen, mit Zeitstempeln. 1 $ pro 1.000. 🇧🇷 Transcrição do YouTube: legendas e transcrições de vídeos, canais, playlists ou buscas, com marcações de tempo. US$ 1 por 1.000.
How to get YouTube transcripts (step by step)
- Paste one or more YouTube links in Video links (watch links, youtu.be, Shorts, /live/ or bare video IDs). Or fill in Channels, Playlists or Search terms.
- Optional: choose a preferred language (e.g.
en), the max videos per channel, playlist or search, and extra formats (SRT, WebVTT, paragraphs). - Click Start. Results appear in the dataset as they arrive: download them as JSON, CSV, Excel or HTML, or read them through the API.
What data do you get?
| Data | Fields |
|---|---|
| Full transcript as one clean string (no HTML, no tags) | transcriptText |
| Timestamped segments, in seconds | segments: [{start, duration, text}] (optional) |
| Transcript language and type | transcriptLanguage, isAutoGenerated, originalLanguage, availableLanguages, languageFallback |
| Video | videoId, url, title, description, durationSeconds, viewCount, likeCount (when public), publishedAt |
| Channel | channelName, channelId, channelUrl |
| Subtitle files (optional) | srt, vtt, readable paragraphs |
| Status | status: found, or no_transcript with a reason (no captions, live stream, private, age-restricted…), scrapedAt |
In our October 2026 benchmark, every video that had captions was delivered: 498 of the 500 latest videos of a large channel (the other 2 had no captions), 192 of 200 search results, 40 of 40 long podcast episodes (up to several hours).
Why this YouTube Transcript Scraper?
| This actor | |
|---|---|
| Price per 1,000 transcripts | $1, all included. Videos without captions are free. No start fee |
| Typical price of other YouTube transcript actors on the Store | $2 to $10 per 1,000, video details sometimes extra |
| Video information (title, channel, date, views, likes, description) | ✅ Included |
| Inputs | Video links, channels (@handle too), playlists, searches |
| Language | Original language by default (AI-dubbed audio tracks are ignored), or your preferred language |
| AI-ready output | Full text + timestamped segments, SRT, WebVTT, paragraphs |
| Speed (measured) | 100 to 150 videos per minute on a channel, 2 to 15 s for one video |
| Reliability | Automatic retries on other IPs, resume after a restart without double charge |
Input
| Field | Type | Description |
|---|---|---|
videoUrls | array | Video links or IDs. Channel and playlist links pasted here also work |
channelUrls | array | Channel links (/@handle, /channel/UC…, /c/…, /user/…) or @handles. Newest videos first |
channelContent | string | Which uploads of each channel: all (default), videos (long videos only, no Shorts) or shorts |
publishedAfter | string | Channels and playlists only: keep the videos published on or after a day, e.g. 2026-11-01, 7 days, 2 weeks, 3 months. Older videos are left out and never charged |
playlistUrls | array | Playlist links or IDs |
searchQueries | array | Search terms: the first videos of each YouTube search (live streams are skipped) |
searchUploadDate | string | Searches only: any (default), hour, today, week, month or year (videos uploaded in that period) |
searchSortBy | string | Searches only: relevance (default) or views (most viewed first) |
maxVideos | integer | Max videos per channel, playlist or search (default 50, 0 = all). Video links are always all processed |
language | string | Preferred transcript language, e.g. en, fr, pt-BR. Empty = the video's original language |
translateTo | string | YouTube's automatic translation, when YouTube allows it (see FAQ) |
transcriptType | string | any (manual subtitles first, else auto-generated), manual, or auto |
includeTimestamps | boolean | Add the timestamped segments (default on) |
outputFormats | array | Extra formats: paragraphs, srt, vtt |
includeMetadata | boolean | Add the publish date and like count (default on) |
searchCountry | string | Country for search results, e.g. US, FR, BR |
Example inputs
Transcripts of a few videos:
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://youtu.be/jNQXAC9IVRw"]}
The 100 latest videos of a channel, in English when available, with SRT subtitles:
{"channelUrls": ["https://www.youtube.com/@TED"],"maxVideos": 100,"language": "en","outputFormats": ["srt"]}
The 50 latest long videos of a channel, without its Shorts:
{"channelUrls": ["https://www.youtube.com/@kurzgesagt"],"channelContent": "videos","maxVideos": 50}
Only the new videos of a channel (schedule it every week with 7 days: the channel listing stops at the first older video;
measured on @TED with 10 days: one listing page, 7 transcripts in 21 s):
{"channelUrls": ["https://www.youtube.com/@TED"],"channelContent": "videos","publishedAfter": "7 days","maxVideos": 0}
The first 40 videos of two searches, without timestamps:
{"searchQueries": ["how to cook rice", "machine learning tutorial"],"maxVideos": 40,"includeTimestamps": false}
The new videos of the week about a topic (schedule it to monitor a subject every day with today):
{"searchQueries": ["electric cars"],"searchUploadDate": "week","maxVideos": 30}
Switching from another actor? The input names of other popular YouTube transcript actors are also accepted (youtube_url,
videoUrl, urls, startUrls, channel, channel_url, max_videos, maxResults, languages, translate_to,
transcript_type, dateFilter, sortingOrder, oldestPostDate…). In Make, n8n or Zapier you can usually change only the actor ID.
Output example
{"status": "found","videoId": "tu6tF-lVDJI","url": "https://www.youtube.com/watch?v=tu6tF-lVDJI","title": "Why You Should Share a Recipe with a Stranger | Anuj Gupta | TED","channelName": "TED","channelId": "UCAuUUnT6oDeKwE6v1NGQxug","channelUrl": "https://www.youtube.com/channel/UCAuUUnT6oDeKwE6v1NGQxug","publishedAt": "2026-10-27","durationSeconds": 233,"viewCount": 33450,"likeCount": 161,"description": "Can we eat our way to a stronger democracy? Civic leader Anuj Gupta be…","transcriptLanguage": "en","isAutoGenerated": false,"isTranslated": false,"originalLanguage": "en","availableLanguages": [{ "languageCode": "ar", "name": "Arabic", "isAutoGenerated": false },{ "languageCode": "en", "name": "English", "isAutoGenerated": false },{ "languageCode": "es", "name": "Spanish", "isAutoGenerated": false }],"transcriptText": "Can we eat our way to a stronger democracy? (Laughter) Normally, when we talk about strengthening democracy, we talk voting, town halls…","segments": [{ "start": 3.875, "duration": 3.379, "text": "Can we eat our way to a stronger democracy?" },{ "start": 7.671, "duration": 1.626, "text": "(Laughter)" }],"input": "https://www.youtube.com/watch?v=tu6tF-lVDJI","scrapedAt": "2026-10-28T08:21:29.118Z"}
A video without captions comes back with "status": "no_transcript", a reason (no_captions, live, unavailable,
private, age_restricted, content_warning, members_only) and its video information. It is not charged.
Use it from the API, Make, n8n or Zapier
Get the transcripts of a video in one call (replace <YOUR_API_TOKEN>):
curl -X POST "https://api.apify.com/v2/acts/fit_melon~youtube-transcript-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}'
In Make, n8n or Zapier, use the Apify "Run an Actor" module with the actor fit_melon/youtube-transcript-scraper and the same input.
FAQ
How much does it cost? $1 per 1,000 transcripts delivered, everything included: proxies and platform usage are on us. Videos without a transcript (no captions, live, private, age-restricted…) are free. Set a maximum cost per run in the run options and the actor stops cleanly before reaching it.
Which language do I get? By default the video's original language: manual subtitles when they exist, else YouTube's auto-generated
captions. Videos with AI-dubbed audio tracks keep their original language (the dubbed captions are ignored). Set language to prefer
another language: you get it when the video has subtitles in that language, otherwise the original language with languageFallback: true.
availableLanguages lists every track of the video.
Can it translate transcripts? translateTo asks YouTube for its automatic translation. In October 2026 YouTube refuses most of these
requests: you then get the original transcript with translationUnavailable: true, at the normal price. If the video has subtitles written
in the requested language, those are used instead.
Does it work for Shorts, live streams and long videos? Shorts: yes, and channelContent takes only the Shorts or only the long
videos of a channel. Live streams and upcoming premieres have no transcript until they
end (they are skipped in searches, free otherwise). Long videos: yes, we tested episodes of several hours. Very long transcripts keep the
full text; if a single result would exceed Apify's 9 MB limit, the timed segments are left out first.
Why do some videos have no transcript? The uploader turned captions off, YouTube did not generate them (music, no speech, some
languages), or the video is private, members-only, age-restricted or behind a YouTube content warning. This actor never signs in and
never clicks through these checks: such videos come back as no_transcript, free of charge.
Is it legal? It only collects public data (transcripts and public video information) without logging in, and never downloads video or audio. You are responsible for how you use the data, including copyright on the transcripts and YouTube's terms.
Something does not work? Open an issue in the Issues tab with your run link: we answer quickly.
Also by this developer
Google Maps Scraper: local business leads with phones, emails, websites and social profiles. $0.50 per 1,000 places, all included.