YouTube Transcript API & Scraper: Subtitles
Pricing
$3.00 / 1,000 transcripts
YouTube Transcript API & Scraper: Subtitles
Get YouTube transcripts in the video's original language: full text, timestamps, timed segments, title, channel and word count. Works with Shorts. $3 per 1,000 transcripts; videos without captions are free.
Pricing
$3.00 / 1,000 transcripts
Rating
0.0
(0)
Developer
Meridian Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Get the transcript of any public YouTube video or Short as clean text, in the language the video is actually spoken in. Paste video links or ids and you get one row per video: the full transcript, its language, whether the captions are auto-generated, the title, channel, length and word count. Timestamps and timed segments are one switch away. You pay $3 per 1,000 transcripts ($0.003 each), and only for transcripts delivered: videos without captions, private or blocked videos and failed requests are free rows.
The input form is pre-filled with two videos, so the quickest way to try it is to click Start (about $0.006).
What do you get for each video?
| Field | What it means |
|---|---|
status | ok = transcript delivered (charged). no_transcript = YouTube answered but there is nothing to deliver (free). error / skipped = not delivered (free) |
videoId, url, title, channelName, channelId | The video and its channel |
durationSeconds, viewCount | Length in seconds and views when fetched |
languageCode, languageName | Language of the transcript (en, es, pt-BR, zh-Hans...) |
isAutoGenerated | true = YouTube's speech recognition, false = captions uploaded by the creator |
originalLanguageCode, isOriginalLanguage | The language spoken in the video, and whether the transcript is in it |
text | The full transcript: one plain paragraph, or one [m:ss] line per caption with timestamps on |
wordCount, characterCount, segmentCount | Size of the transcript |
segments | With "Include timed segments" on: every caption line with start and duration in seconds |
captionLanguages, autoCaptionLanguages | Every language YouTube has captions in for this video |
errorCode, errorMessage | Why a video has no transcript (see the table below) |
Why use this YouTube transcript scraper?
- The original language, not a random translation. Many videos carry dozens of uploaded caption tracks. Tools that take "the first track" hand you Afrikaans or Albanian for a German cooking video. This Actor works out the spoken language from YouTube's auto-captions, the video's original audio track and its title, and returns that track.
- The same text YouTube shows. We checked transcripts line by line against YouTube's own transcript panel and against an independent open-source library. Text is cleaned of HTML codes (no
'or&). - You pay for transcripts, nothing else. No start fee, no charge per result row. A video without captions costs nothing.
- Shorts, live replays, embeds and youtu.be links all work. Geo-blocked videos are retried from other countries automatically.
- Built for AI pipelines. One row per video with stable field names, plain text by default, word counts for chunking, and a documented output schema.
How much does it cost?
$0.003 per transcript delivered ($3 per 1,000). Examples:
- 100 videos, 90 with captions: $0.27 (the 10 without captions are free).
- 1,000 videos: at most $3.00.
- Apify's free $5 monthly credit covers about 1,600 transcripts.
Free (never charged): videos with no captions, unavailable, private, age-restricted, members-only or geo-blocked videos, links that aren't YouTube videos, failed requests, and anything past your spending limit or the run's time limit. Set a maximum cost per run in the run options and the Actor stops fetching before it would go over.
How do I get the transcript of a YouTube video?
- Paste one or more video links or ids into YouTube videos (one per line, up to 10,000 per run).
- Leave Preferred languages empty to get each video in its original spoken language, or list codes like
enores. - Click Start. Each video takes about 1 to 5 seconds and many run at once.
- Download the results as JSON, CSV or Excel, or read them through the API.
How do I get transcripts with timestamps?
Turn on Timestamps in the text for lines like [1:05] and that's when it broke. Turn on Include timed segments for a segments list with exact start and duration in seconds (good for subtitles, clips or jumping to a moment).
How do I get a transcript in a specific language?
List language codes in order of preference, for example en, es. Creator-uploaded captions are used before auto-generated ones. If a video has none of your languages you get its original language instead, and matchedRequestedLanguage is false. Turn off Fall back to the original language to get a free LANGUAGE_NOT_AVAILABLE row instead.
Input example
{"videos": ["https://www.youtube.com/watch?v=arj7oStGLkU","https://youtu.be/jNQXAC9IVRw","https://www.youtube.com/shorts/48BnYG54694"],"languages": [],"includeTimestamps": false,"includeSegments": false}
Output example
{"status": "ok","videoId": "arj7oStGLkU","url": "https://www.youtube.com/watch?v=arj7oStGLkU","input": "https://www.youtube.com/watch?v=arj7oStGLkU","position": 1,"videoType": "video","title": "Inside the Mind of a Master Procrastinator | Tim Urban | TED","channelName": "TED","channelId": "UCAuUUnT6oDeKwE6v1NGQxug","durationSeconds": 844,"viewCount": 62073613,"originalLanguageCode": "en","captionLanguages": ["ar","hy","bg","my","ca","ckb","..."],"autoCaptionLanguages": ["en"],"languageCode": "en","languageName": "English","isAutoGenerated": false,"isOriginalLanguage": true,"matchedRequestedLanguage": null,"text": "So in college, I was a government major, which means I had to write a lot of papers. Now, when a normal student writes a paper, they might spread the work out a little like this. So, you know -- (Laughter) you get ...","wordCount": 2277,"characterCount": 12671,"segmentCount": 315,"errorCode": null,"errorMessage": null,"charged": true,"fetchedAt": "2026-10-18T12:09:55Z","dataSource": "YouTube public captions (uploaded or auto-generated), read logged out. No account or cookies used."}
How do I use YouTube transcripts with an AI agent or LLM?
Add the Actor to any MCP client (Claude, Cursor, VS Code and others) with https://mcp.apify.com?tools=meridianlabs/youtube-transcripts, then ask in plain words, for example: "Get the transcripts of these three videos and summarise what each one says about pricing." The agent gets one row per video with text, languageCode and wordCount, which is enough to decide how to chunk long videos.
From code, call the run-sync endpoint and read the rows straight back:
curl -X POST "https://api.apify.com/v2/acts/meridianlabs~youtube-transcripts/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"videos": ["https://www.youtube.com/watch?v=arj7oStGLkU"]}'
It also works from Make, Zapier, n8n, Google Sheets and Apify schedules. For schedules, turn on Fail the run on errors so Apify alerts you when a video can't be read.
Error codes (all free)
| Code | Meaning |
|---|---|
NO_CAPTIONS | The video has no captions or subtitles at all |
LANGUAGE_NOT_AVAILABLE | None of your languages exists and fallback is off |
VIDEO_UNAVAILABLE | Removed, deleted or never existed |
PRIVATE_VIDEO, MEMBERS_ONLY | Not public |
AGE_RESTRICTED | YouTube only shows it to signed-in users; this Actor never signs in |
LIVE_OR_UPCOMING | A live stream or premiere that hasn't finished |
GEO_BLOCKED | Blocked in every country tried; set Proxy country to one where it plays |
INVALID_INPUT | Not a YouTube video link or id (channel and playlist links aren't expanded) |
BLOCKED, NETWORK_ERROR | YouTube kept refusing after several retries on new IP addresses; run it again |
YOUTUBE_CHANGED | YouTube changed how captions are served; the Actor is being updated |
SPENDING_LIMIT, RUN_TIME_LIMIT | Not attempted because of your cost limit or the run's timeout |
FAQ
Which language does it return?
By default the language spoken in the video. originalLanguageCode is our reading of that language and isOriginalLanguage tells you whether the transcript is in it. A few dubbed videos have captions only for their dubbed versions; then you get one of those (uploaded captions first, then English) with isOriginalLanguage: false.
Why do some lines start with >>?
That is how YouTube's captions mark a change of speaker. It is part of the caption file, so we keep it; YouTube's transcript panel hides it on screen.
Can it transcribe videos that have no captions?
No. It reads the captions YouTube already has (uploaded or auto-generated). Most videos in common languages have auto-generated captions; music-only clips and some Shorts don't. Those come back as free NO_CAPTIONS rows.
Does it work with channels or playlists?
Not yet. Give it individual video or Shorts links. Channel and playlist links come back as free INVALID_INPUT rows.
Is it legal to scrape YouTube transcripts?
The Actor reads only public videos, logged out: no account, no cookies, nothing behind a sign-in. Captions are published by the uploader or by YouTube for anyone to read. Whether you may reuse a transcript depends on the video's copyright and your use; check that for your project. YouTube's Terms of Service restrict automated access, so read them and use the data responsibly.
Does it collect personal data?
Only what the uploader made public about the video: its title, channel name and channel id. No viewer, commenter or account data.
What happens if a run times out or restarts?
Videos already delivered are not fetched or charged again after a restart. When the time limit gets close, unstarted videos become free skipped rows and the run still succeeds; run them again or raise the timeout.
More from Meridian Labs
- Keyword Search Volume & CPC API + Google Trends: monthly search volume, CPC, competition, difficulty and intent for keyword lists, plus a Google Trends summary per keyword. From $3 per 1,000 keywords.
- Google Trends Scraper & API: interest over time, by region and rising related searches for hundreds of keywords. $5 per 1,000 keyword lookups.
- Competitor Keyword Research: every keyword a website ranks for in Google, with position, ranking page and search volume. $0.03 per domain + $2 per 1,000 keywords.
- Backlink Checker: referring domains, backlinks, domain rank and spam score for up to 1,000 domains a run.
- Facebook Ads Library Scraper: every ad a competitor runs on Facebook and Instagram, with days running and a plain-English summary per advertiser. $0.50 per 1,000 ads.
Support
Found a video that comes back wrong? Open an issue on the Issues tab with the link. We read every one.