YouTube Transcript Scraper — Videos, Channels & Playlists
Pricing
from $3.20 / 1,000 transcripts
YouTube Transcript Scraper — Videos, Channels & Playlists
Get the transcript of any YouTube video, Short, playlist or whole channel: full text plus timed segments, language, auto-generated or not, with title, channel, duration, views and description. Pay per transcript; videos without captions are free. No browser, no YouTube API key.
Pricing
from $3.20 / 1,000 transcripts
Rating
0.0
(0)
Developer
Data Fabrik
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
What is YouTube Transcript Scraper?
Get the transcript of any YouTube video as clean JSON, CSV or Excel: the full text and the timed segments, the language, whether the captions are auto-generated, plus the video's title, channel, duration, views, tags and description. Paste video, Shorts, playlist or channel links: the Actor finds every video and transcribes each one once.
- 💲 Pay per transcript: from $3.20 per 1,000 transcripts ($4.90 on the Free plan), video details included, plus Apify's minimum start fee of $0.00005 per run. Videos without captions, private or removed videos and failures are free.
- 📺 Videos, Shorts, playlists and whole channels in one run:
@handle,/channel/UC…,/videos,/shortsor/streamstab. - 🌍 Any caption language: pick one (
en,fr,pt-br…) or keep YouTube's default track. - ⚡ No browser, no YouTube API key, no login: light HTTP requests, about 10 videos at a time.
What data can you extract from YouTube?
| Data | Example |
|---|---|
| Full transcript | "We're no strangers to love…" |
| Timed segments (start, duration, text) | 22.64, 4.32, "You know the rules and so do I" |
| Language, auto-generated or not | en, English, false |
| Every caption language of the video | en, de-DE, ja, pt-BR… |
| Title, channel, channel link | "Never Gonna Give You Up", "Rick Astley" |
| Duration, views, live or not | 213 s, 1827177355, false |
| Tags, description, thumbnail | a list, the text, a link |
What can you do with YouTube transcripts?
- 🤖 AI and LLM apps: feed videos to ChatGPT, Claude or your RAG pipeline, summarize, answer questions about a channel.
- ✍️ Content creation: turn videos into articles, newsletters, quotes and social posts; study what top creators say.
- 🔎 SEO and marketing: find the words and topics competitors use, track brand mentions in videos.
- 📊 Research: analyse speeches, lectures, interviews or news channels at scale.
- ♿ Accessibility and translation: get the text to subtitle, translate or index videos.
Why run it on Apify?
- API: every run is an API call, with ready clients for Python and JavaScript (see below).
- Scheduling: transcribe the new videos of a channel every day without a server.
- Integrations: Google Sheets, Slack, Zapier, Make, n8n, webhooks and your own database.
- AI agents: available through Apify's MCP server, so Claude, ChatGPT or Cursor can call it.
- Proxies included: YouTube refuses servers, so the Actor uses residential IPs, included in the price.
How does it work?
- Each link in
urlsis recognised: a video (watch, youtu.be, Shorts, live, embed or a bare id), a playlist, or a channel (@handle,/channel/,/c/,/user/). - For a channel or a playlist, the Actor lists up to
maxVideosPerSourcevideos (newest first for channels). Add/videos,/shortsor/streamsto a channel link to keep one tab. - For each video, it reads the caption tracks YouTube offers, picks the one in
language(or YouTube's default) and downloads it. - Each video becomes one item in the dataset with
status. Onlyokitems are charged.
How to get a YouTube transcript
- Click Try for free.
- Paste one or more YouTube links in YouTube links.
- Optional: set Language, or Max videos per channel or playlist.
- Click Start. The transcripts appear in the Transcripts view, usually within seconds.
- Download them as JSON, CSV or Excel, or connect an integration.
Input
| Field | What it does | Default |
|---|---|---|
urls | Videos, Shorts, playlists or channels, one per line. | — |
language | Language code of the captions (en, fr, pt-br…). Empty = YouTube's default track. | empty |
maxVideosPerSource | Videos taken from each channel or playlist (1 to 10,000). | 50 |
includeSegments | Add the timed segments next to the full text. | true |
maxConcurrency | Videos processed at the same time (1 to 20). | 10 |
Example:
{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://www.youtube.com/@TED/videos","https://www.youtube.com/playlist?list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ"],"language": "en","maxVideosPerSource": 20}
Output
One item per video (and one free item per link that gave no video):
{"status": "ok","note": null,"videoId": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channelName": "Rick Astley","channelId": "UCuAXFkgsw1L7xaCfnd5JJOw","channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw","durationSeconds": 213,"viewCount": 1827177355,"isLiveContent": false,"language": "en","languageName": "English","isAutoGenerated": false,"availableLanguages": [{ "languageCode": "en", "name": "English", "isAutoGenerated": false }, { "languageCode": "en", "name": "English (auto-generated)", "isAutoGenerated": true }],"text": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ …","segments": [{ "start": 22.64, "duration": 4.32, "text": "♪ You know the rules and so do I ♪" }],"keywords": ["rick astley", "never gonna give you up"],"description": "The official video for “Never Gonna Give You Up” by Rick Astley…","thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg","source": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","scrapedAt": "2026-10-16T18:00:00.000Z"}
| Field | Meaning |
|---|---|
status | ok (charged), or a free status: no-transcript, language-unavailable, unavailable, not-found, invalid-url, failed, skipped-cost-limit. |
note | Why there is no transcript, in plain words. |
videoId, url | The video. |
title, channelName, channelId, channelUrl | Video title and channel. |
durationSeconds, viewCount, isLiveContent | Length, views, live stream or not. |
language, languageName, isAutoGenerated | The caption track delivered. |
availableLanguages | Every caption track of the video. |
text | The full transcript. |
segments | Timed pieces: start, duration (seconds), text. |
keywords, description, thumbnailUrl | Tags, description, thumbnail. |
source | The input link the video came from. |
scrapedAt | When the item was produced (UTC). |
The run summary (counts per status) is saved as OUTPUT in the key-value store.
How much does it cost to scrape YouTube transcripts?
You pay per transcript delivered, video details included:
| Apify plan | Price per transcript | Per 1,000 |
|---|---|---|
| Free | $0.0049 | $4.90 |
| Starter (Bronze) | $0.0039 | $3.90 |
| Scale (Silver) | $0.0035 | $3.50 |
| Business (Gold) and above | $0.0032 | $3.20 |
Plus Apify's start fee of $0.00005 per run. Free: videos without captions or without captions in your language, private, removed, age-restricted or region-blocked videos, links that are not YouTube, failures. The $5 monthly credit of Apify's Free plan covers about 1,000 transcripts a month. Set Maximum cost per run in the run options to cap a run: the Actor stops before going over it.
Is it free to try?
Yes. Apify's Free plan gives $5 of credit every month, with no card needed, which covers about 1,000 transcripts.
Use it from code
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("datafabrik/youtube-transcripts").call(run_input={"urls": ["https://www.youtube.com/@TED/videos"],"maxVideosPerSource": 10,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item["status"] == "ok":print(item["title"], len(item["text"]))
JavaScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('datafabrik/youtube-transcripts').call({ urls: ['dQw4w9WgXcQ'], language: 'en' });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].text);
Limits
- Only videos with captions (human-made or auto-generated by YouTube) have a transcript. The Actor does not transcribe audio itself.
- Captions are delivered in the languages the video has; machine translation is not offered (YouTube refuses it to automated requests).
- Videos are read from the United States: a video blocked there comes back as
unavailable(free). - Publish date and like count are not included yet.
FAQ
Is it legal to scrape YouTube transcripts?
The Actor reads public captions that YouTube shows to any visitor, without login. It does not collect personal data. You are responsible for how you use the content, in line with YouTube's terms and copyright law; check with a lawyer for commercial reuse.
Why did a video come back without a transcript?
Look at status and note: no captions at all, no captions in the language you asked (the note lists the available ones), or a private, removed, age-restricted or region-blocked video. None of these is charged.
Can I get the transcripts of a whole channel?
Yes: paste the channel link (https://www.youtube.com/@handle) and set maxVideosPerSource up to 10,000. Add /videos to skip Shorts and lives.
Can I get only the text, without timestamps?
Turn off includeSegments: text stays, segments is null.
Do I need a YouTube API key or an account?
No. The Actor uses the same public endpoints as YouTube's apps.
Can you add a feature or build a custom scraper?
Yes: open an issue on the Issues tab, we answer within a day.