YouTube Transcripts: Videos, Playlists & Channels
Pricing
from $3.50 / 1,000 transcripts
YouTube Transcripts: Videos, Playlists & Channels
Get YouTube transcripts as clean text, timestamped segments, SRT, or AI-ready chunks for RAG. Paste videos, whole playlists or channels, pick your languages, and never pay for videos without captions.
A YouTube transcript API with no API key and no quota. Paste a video, a playlist or a whole channel and get every transcript as clean text, timestamped segments, SRT subtitles or AI-ready chunks for RAG. You only pay for transcripts you get: videos without captions are free.
| 💲 Price | $5 per 1,000 transcripts. Failed videos are free. |
| ⚡ Speed | ~60 transcripts in 20–30 seconds |
| 📥 Input | Video URLs or IDs, Shorts, live replays, playlists, channels (@handle) |
| 📤 Output | Text, timestamped segments, SRT, RAG chunks, video metadata |
| 🌍 Languages | Any language YouTube has. You set the order of preference. |
What people use it for
- AI / LLM pipelines: load chunks into a vector database, or feed transcripts to summarizers and agents
- Content repurposing: turn videos into blog posts, newsletters, show notes and social threads
- Research and competitor analysis: what does a channel talk about across hundreds of videos?
- Subtitles and accessibility: ready-made
.srtfiles - SEO: text versions of your own videos
How to use it
- Paste one or more YouTube URLs (videos, playlists or channels) into YouTube URLs.
- Optional: set languages, turn on AI-ready chunks, or add SRT.
- Click Start, then download the results as JSON, CSV or Excel, or fetch them through the API.
For AI agents and automations
- One job: get the transcript (text, timestamps, SRT or RAG chunks) of YouTube videos, playlists or channels. Minimal input:
{ "urls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"] } - Fast enough for a single tool call: 1–10 videos finish in under 15 seconds; ~60 in 20–30 seconds, which fits inside the Apify MCP server's default 30-second wait. For big jobs, start the run asynchronously and read the dataset when it finishes.
- Where the results are: dataset items (fields below). A run summary is in the key-value store record
OUTPUT:status(SUCCEEDED,PARTIAL,STOPPED_AT_SPEND_LIMIT,ABORTED,NO_RESULTS,SOURCE_UNAVAILABLE),results,errorsByCodeand a plain-Englishmessage. - Predictable billing: pay per event. Only successful transcripts are charged; error rows are free.
- Respects "Max cost per run": it never starts work your budget can't pay for, then stops cleanly with status
STOPPED_AT_SPEND_LIMIT. Everything fetched up to that point is kept. - Graceful on abort and restarts: partial results are always kept, and a platform restart resumes without duplicates or double charges.
- Honest failures: if the source blocks every request or changes its format, the run fails with a clear message and you pay $0, instead of quietly returning empty results.
- Works with the Apify MCP server (Claude, Cursor, other agents), agentic payments, and the API.
Input examples
One video:
{ "urls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"] }
The last 100 uploads of a channel, chunked for RAG:
{ "urls": ["https://www.youtube.com/@mkbhd"], "maxVideosPerPlaylist": 100, "includeChunks": true, "chunkMaxWords": 300, "includeSegments": false }
Spanish first, then English, with SRT included:
{ "urls": ["https://youtu.be/NFvDHYMzj9U"], "languages": ["es", "en"], "includeSrt": true }
Output
One item per video. From a real run (arrays shortened):
{"status": "ok","videoId": "jNQXAC9IVRw","url": "https://www.youtube.com/watch?v=jNQXAC9IVRw","title": "Me at the zoo","channelName": "jawed","channelId": "UC4QobU6STFB0P71PMvOGN5A","durationSeconds": 19,"viewCount": 444364886,"language": "en","isAutoGenerated": false,"availableLanguages": [{ "code": "en", "name": "English", "isAutoGenerated": false }, { "code": "de", "name": "German", "isAutoGenerated": false }],"text": "All right, so here we are, in front of the elephants the cool thing about these guys is that they have really... really really long trunks ...","segments": [{ "start": 1.2, "duration": 2.16, "text": "All right, so here we are, in front of the elephants" }]}
With AI-ready chunks on, each video also gets a chunks array. Every chunk carries its own timestamped link and metadata, so you can embed it as is:
{ "chunkId": "QVv3mQzlrN0-1", "index": 1, "text": "And I'm gonna try to make it quick...", "wordCount": 193, "startSeconds": 50.76, "endSeconds": 104.8, "url": "https://www.youtube.com/watch?v=QVv3mQzlrN0&t=50s", "videoId": "QVv3mQzlrN0", "title": "Apple Homeview Impressions: Not Convinced!", "channelName": "Marques Brownlee" }
| Field | Meaning |
|---|---|
text | Full transcript as one string |
segments | {start, duration, text} per caption line, in seconds |
srt | Ready-to-save SRT subtitles (optional) |
chunks | Overlapping RAG chunks with timestamps, links and metadata (optional) |
language / isAutoGenerated | Which caption track you got, and whether YouTube generated it automatically |
availableLanguages | Every caption track on the video |
title, channelName, channelId, durationSeconds, viewCount, isLive, description | Video metadata (the description is optional) |
status / errorCode | ok, or why there's no transcript (free) |
Cost examples
| Job | Transcripts | Cost |
|---|---|---|
| 10 videos | 10 | $0.05 |
| A channel's last 200 videos | 200 | $1.00 |
| 5,000 videos for an AI dataset | 5,000 | $25.00 |
Videos without captions in any of these jobs cost $0. Set Max cost per run to cap any run, and the actor stops cleanly at the limit.
Integrations
- API:
client.actor("t3data/youtube-transcripts").call({ urls: [...] })(JS), orclient.actor("t3data/youtube-transcripts").call(run_input={"urls": [...]})(Python). Full snippets are on the API tab. - AI agents (MCP): available as a tool through the Apify MCP server, so Claude, Cursor and other agents can fetch transcripts on demand.
- n8n node: install
n8n-nodes-t3data-youtube-transcripts(n8n → Settings → Community Nodes → Install) for a ready-made node with all the options above, also usable as an AI Agent tool. npm package - No-code: Make, Zapier, Google Sheets, Slack and webhooks, through Apify integrations.
- Export: JSON, CSV, Excel, XML, HTML or RSS.
Error codes (never charged)
| Code | Meaning |
|---|---|
NO_CAPTIONS | The video has no captions or auto-generated transcript |
EMPTY_TRANSCRIPT | A caption track exists but is empty |
VIDEO_UNAVAILABLE | Private, deleted or unavailable in this region |
AGE_RESTRICTED_OR_PRIVATE | Needs a signed-in account |
INVALID_URL | Not a YouTube video, playlist or channel link |
PLAYLIST_NOT_FOUND / CHANNEL_NOT_FOUND | The playlist is private, or the channel handle doesn't exist |
SOURCE_UNAVAILABLE (run status) | Every request was blocked, or the source changed its format. The run fails with $0 charged; retry later |
BLOCKED | YouTube kept refusing after every retry (rare; try again) |
FAQ
No transcript for a video? Check whether the video shows a "Show transcript" button on YouTube. If it doesn't, there are no captions to fetch, and the video comes back as NO_CAPTIONS, free.
Wrong language? languages is an order of preference. If none of your languages exist on the video, you get the video's own language. availableLanguages shows everything the video has.
Do I need a proxy or a YouTube API key? No. A residential proxy and IP rotation are built in, and their cost is included in the price.
Is it legal? It reads only publicly available captions, the same text anyone can open on YouTube. How you use the data is up to you, so respect copyright and YouTube's terms for your use case.
Something broke? Open an issue on the Issues tab with the video URL. Fixes usually ship within a day.
Limits
- Private, members-only and age-restricted videos aren't supported, since they need a signed-in account.
- Streams that are still live have no transcript until they end.
- Translation isn't offered. You get the caption tracks the video actually has.
More from T3 Data
- YouTube Comments Scraper: comments and replies with likes, pinned and creator-hearted flags
- YouTube Channel & Shorts Scraper: channel info plus every video and Short with exact views, likes and dates
- Google News Scraper: news by keyword, topic or location, with real article URLs and full text
- Google Ads Transparency Scraper: every ad an advertiser or domain runs on Google, with dates, images and YouTube videos
- Google Trends Scraper: interest over time, by region, related queries, and trending now
- Google Hotels Scraper: hotel prices, ratings and booking-site prices for any city and dates
This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by YouTube or Google. It only accesses publicly available captions.