YouTube Transcript Scraper: Text & JSON, $1.90/1K Transcripts
Pricing
$1.90 / 1,000 transcripts
YouTube Transcript Scraper: Text & JSON, $1.90/1K Transcripts
Input: YouTube video, Shorts, playlist or channel URLs and preferred languages. Output: one JSON row per video with title, channel, language, caption type and the transcript as plain text and timed segments, from YouTube's own captions. $1.90 per 1,000 transcripts, no start fee.
Pricing
$1.90 / 1,000 transcripts
Rating
0.0
(0)
Developer
Sluicebox
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Get transcripts of YouTube videos, Shorts, whole playlists and channels as clean JSON: one row per video with the title, channel, duration, caption language and type, the full transcript as plain text and as timed segments with start time and duration. Pick your languages in order of preference, choose whether auto-generated captions count, and feed the text straight into an LLM, a search index or your own analysis.
It reads the caption tracks that YouTube itself serves to its player, over plain HTTP with no page rendering, no YouTube account, no cookies and no API key. Videos without captions are listed with the reason and are not charged.
What you get
One row per video:
{"videoId": "iG9CE55wbtY","url": "https://www.youtube.com/watch?v=iG9CE55wbtY","title": "Do schools kill creativity? | Sir Ken Robinson | TED","channelName": "TED","channelId": "UCAuUUnT6oDeKwE6v1NGQxug","durationSeconds": 1203,"language": "en","isAutoGenerated": false,"availableLanguages": [{ "code": "en", "name": "English", "isAutoGenerated": false },{ "code": "en", "name": "English (auto-generated)", "isAutoGenerated": true },{ "code": "de", "name": "German", "isAutoGenerated": false },{ "code": "es", "name": "Spanish", "isAutoGenerated": false }],"transcriptText": "Good morning. How are you? (Audience) Good. It's been great, hasn't it? I've been blown away by the whole thing. ...","segments": [{ "start": 27.103, "duration": 2.575, "text": "Good morning. How are you?" },{ "start": 29.702, "duration": 1.403, "text": "(Audience) Good." },{ "start": 31.129, "duration": 1.668, "text": "It's been great, hasn't it?" }],"transcriptAvailable": true,"reason": null,"scrapedAt": "2026-10-22T10:46:19.162Z"}
availableLanguages lists every caption track the video has, and the text and segments are cut
short here: this talk has 65 caption tracks and 427 segments. segments is null when Include
timed segments is off. A video with no captions in
your languages still gets a row, with transcriptAvailable: false, empty transcript fields and
the reason, for example:
{"videoId": "W3q8Od5qJio","title": "Rammstein - Du Hast (Official 4K Video)","transcriptAvailable": false,"reason": "The video has no captions and no auto-generated subtitles.","transcriptText": null,"segments": null}
Input
| Field | Type | Description |
|---|---|---|
urls | string[] | Video, Shorts, playlist or channel links, one per line. Bare video ids and @handles work too. A channel link reads its Videos tab, newest first. Add /shorts or /streams to a channel link for those tabs. A watch link that is part of a playlist is read as that one video. |
languages | string[] | Caption languages in order of preference, as codes, e.g. ["en"] (default), ["es", "en"] or ["pt-BR"]. A code also matches its variants: en finds en-GB, pt-PT finds pt-BR. |
fallbackToAnyLanguage | boolean | Default true. When a video has none of your languages, take the captions in its original language (or its default track). false returns a row without a transcript instead. |
includeAutoGenerated | boolean | Default true. Use YouTube's automatic captions when there are no manual ones in your language. false keeps only captions written or uploaded by people. |
maxVideosPerSource | integer | Videos taken from each playlist or channel link (default 50, max 500). Single video links are not limited. |
includeSegments | boolean | Default true. false drops the segments array and keeps only transcriptText, which makes rows smaller. |
proxyConfiguration | object | Defaults to Apify residential proxies, the supported configuration. You can use your own proxies. |
Example:
{"urls": ["https://www.youtube.com/watch?v=iG9CE55wbtY","https://youtu.be/dQw4w9WgXcQ","https://www.youtube.com/shorts/Y8IJi7iP5vk","https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi","https://www.youtube.com/@kurzgesagt"],"languages": ["en"],"maxVideosPerSource": 20}
How to use it
- Click Try for free or Start on this page.
- Paste your YouTube links, set your languages and Max videos per playlist or channel.
- Run it. Transcripts land in the dataset as one row per video. Export them as JSON, CSV or Excel, or pull them over the API.
To collect new uploads of a channel on a schedule, use Apify Schedules with a small
maxVideosPerSource. There is no per-run start fee, so a scheduled check costs exactly the
transcripts it delivers. To call it from code, use the Apify API
or an official client. AI agents can call it through the Apify MCP server: the description and
the input fields above are written to be read by an agent.
Pricing
Pay-per-event, one event, nothing else:
| Event | Rate |
|---|---|
transcript-scraped | $1.90 per 1,000 ($0.0019 each), one per row with a transcript |
| Row without a transcript | free |
| Run start | free, there is no start event |
What you get for $1: 526 transcripts. Platform usage (compute, proxy) is charged to us, not to you, so the per-transcript price is the whole bill. A transcript costs the same for a 30 second Short and for a 4 hour lecture. A daily check of five channels that finds 10 new videos costs $0.019. Rates are as of the last README update. The Store page stays authoritative.
Limits (honest)
- Only videos that have captions. The Actor returns the captions YouTube has for a video, written by people or generated by YouTube's speech recognition. It does not transcribe audio itself, so a video without any captions gets a free row with the reason.
- No machine translation. You get the languages the video actually has. If none of your languages is there, the Actor takes the original language (or returns a row without a transcript, if you turned that off). It does not ask YouTube to translate.
- Auto-generated captions are what YouTube made. Their wording and punctuation can be rough,
and they come as overlapping caption lines.
isAutoGeneratedtells you which kind you got. - Sign-in-only videos are skipped with the reason. Private, members-only and age-restricted videos need a signed-in account, and the Actor never signs in. Removed videos, live streams in progress and premieres that have not started also get a row with the reason, free of charge.
- Channels and playlists in YouTube's order. A channel link reads the newest uploads of its
Videos tab (or Shorts or Live tab), a playlist link reads the playlist from the top, up to
maxVideosPerSource(max 500) each. 500 videos can take more than an hour: raise the run timeout for inputs that big. - No search by keyword. Give the Actor links. To find videos by keyword, search on YouTube and paste the links or the playlist.
- If more than 5% of requests in a run fail, the run log says so loudly. A run in which every fetch failed is marked failed, not "succeeded with 0 items".
Rate-limit etiquette (built in, with numbers)
- One request every half second. A video takes two requests (player data, then the caption track): in our tests 5 to 11 seconds per video on residential proxies, so a 50 video channel takes 4 to 9 minutes and the default one hour timeout covers about 300 to 600 videos. For bigger inputs raise the run timeout. If time runs short anyway, the Actor stops about 90 seconds before the timeout, keeps every transcript it has saved and says so in the run status.
- On an HTTP
429or a "confirm you're not a bot" answer the Actor waits 5 seconds (then 10, 15, 20), switches to a fresh proxy session and retries, at most 4 times. Other transient errors back off for 2, 4, 6 and 8 seconds and retry the same way. - If five requests in a row fail after all retries, the run stops instead of grinding through the rest of the input.
FAQ
Do I need a YouTube account, cookies or an API key? No. The Actor reads only captions that YouTube serves publicly to any visitor, never signs in and does not use anyone's credentials.
Why residential proxies? YouTube shows a "confirm you're not a bot" check to datacenter addresses after a few requests. In our tests datacenter proxies stopped working on the second video, while residential ones delivered every transcript.
Which caption track do I get?
The first of your languages the video has, manual captions before auto-generated ones in the same
language. Without any of your languages, the captions in the video's original language. language
and isAutoGenerated in the row say exactly which track it is, and availableLanguages lists the
others.
Can I get Shorts?
Yes. Paste a Shorts link like any video, or a channel link with /shorts at the end for its latest
Shorts.
Does it use a browser? No. Requests go over plain HTTP, and caption tracks are parsed straight from what YouTube serves.
Where is my data stored? In your run's dataset on your Apify account, under your control. The Actor keeps no copy of scraped data outside your run and sends nothing to any third party.
Legal
This is an unofficial scraper. It is not affiliated with, endorsed by, or connected to YouTube or Google in any way. It reads only captions that YouTube serves publicly to any visitor who is not signed in: no login, no credentials, no captcha solving, no video or audio download. Website terms of service are a contractual matter between a website and its visitors, not criminal law. You are responsible for making sure that your use of the collected data complies with the laws that apply to you and with YouTube's terms.
Copyright. Captions and transcripts are part of the videos and belong to their authors. The Actor hands you the text that YouTube publishes. How you use it (quoting, analysis, research, AI training or republishing) is your decision and your responsibility under the copyright rules that apply to you.
Personal data
Channel names and what people say in videos can be personal data. The Actor collects only the public video page fields listed above and the published captions. It does not collect contact details, does not open profiles and performs no enrichment. Scraped data lives only in your own Apify dataset and is not retained by us outside your run. If the data you collect contains personal data under the laws of your jurisdiction (for example the GDPR), you act as its controller: it is your responsibility to have a legal basis for processing and to honor data-subject requests, including deletion.
Rate this Actor
If this Actor saved you time, a short rating or review on its Store page helps other people find it. Missing a field, or did something break? Open the Issues tab on this page and tell us.
Need a custom scraper?
We can build a custom version of this Actor, for example with extra fields, other filters or another output format, or a new Actor for a site we do not cover yet. It runs on Apify like this one. Email actorforge.hq+orders@gmail.com with the site, the data you need and how often you need it.
Other Actors by ActorForge
- LinkedIn Jobs Scraper: public LinkedIn job listings by keyword and location with full descriptions, no login.
- Reddit Data Scraper: subreddit feeds, posts with their first comments, keyword search and user history in one Actor.
- Reddit Subreddit Scraper: the hot, new, top and rising posts of any subreddit, with date bounds and only-new mode.
- Reddit Comments Scraper: the whole comment thread of a post, with "more replies" branches and deep reply chains.
- Reddit Search Scraper: posts and comments matching keywords, across Reddit or inside one subreddit, with only-new mode.
- Reddit User Scraper: a user's public posts and comments, newest first, with the profile card.
- Lazada Reviews Scraper: product reviews, ratings and buyer media from all six Lazada marketplaces.
- Wildberries Scraper: products, prices and reviews from Wildberries as clean, schema-validated JSON.
- Avito Real Estate Scraper: full property inventory from Avito with freshness stamps.
Changelog
- 0.1 (October 2026): first release. Videos, Shorts, playlists and channels (Videos, Shorts and Live tabs), languages in order of preference with the original language as a fallback, manual and auto-generated captions, plain text and timed segments, free rows with the reason for videos without a transcript, $1.90 per 1,000 transcripts, no start fee.