YouTube Transcript Scraper
Under maintenancePricing
from $0.30 / 1,000 results
YouTube Transcript Scraper
Under maintenanceApify actor that extracts transcripts from YouTube videos
Pricing
from $0.30 / 1,000 results
Rating
0.0
(0)
Developer
fanio zilla
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
What does YouTube Transcript Scraper do?
YouTube Transcript Scraper extracts transcripts and subtitles from YouTube videos at scale. Give it a list of video URLs and it returns the full caption text for each one — either as timestamped segments or as plain text — ready to feed into your LLM, search index, or analytics pipeline.
It is a fast, lightweight alternative to browser-based scrapers: instead of launching a headless browser, it calls YouTube's caption APIs directly over HTTP, so it can process thousands of videos quickly and cheaply. Think of it as a YouTube transcript API you can call on demand, schedule, or wire up to webhooks.
Target site: youtube.com
Why use YouTube Transcript Scraper?
Video is where the information is — but it's hard to search, summarize, or analyze until you have the text. Common use cases:
- 🤖 Feed LLMs and RAG pipelines — turn video content into searchable text for summarization, Q&A, and knowledge bases.
- 🔎 Build searchable archives — index the spoken content of lectures, podcasts, webinars, and product demos.
- ✍️ Repurpose content — generate blog posts, articles, social snippets, and show notes from video.
- 🌐 Translation & accessibility — pull captions across languages for translation or captioning workflows.
- 📊 Research & monitoring — analyze what creators and competitors are saying across channels.
Why this Actor over a DIY script:
- No browser, no bloat — pure HTTP via
got-scrapingwith TLS fingerprinting, so it's fast and avoids bot detection. - Concurrent and resilient — processes up to 5 videos in parallel; one failing URL never breaks the run.
- Proxy rotation built in — uses Apify's residential proxies to dodge rate limits.
- Runs anywhere — schedule it, trigger it via API/webhooks, or integrate it with Zapier, Make, n8n, LangChain, and thousands of other tools.
What data can YouTube Transcript Scraper extract?
Each input video produces one dataset item with its transcript(s):
| Field | Type | Description |
|---|---|---|
id | string | YouTube video ID |
url | string | Canonical video URL |
input | string | The original URL you provided |
transcripts | array | One entry per language; empty [] if no captions exist |
transcripts[].language | string | Display name, e.g. English, English (auto-generated), Spanish |
transcripts[].content | array | string | Timestamped segments (timestamp mode) or a single text string (text mode) |
Each timestamp segment contains:
| Field | Type | Description |
|---|---|---|
startMs | number | Start time in milliseconds |
endMs | number | End time in milliseconds |
startTime | string | Human-readable start (e.g. 0:18, 15:29) |
text | string | Caption text for that segment |
How to extract transcripts from YouTube
- Sign up for free on Apify and open YouTube Transcript Scraper in the Console.
- Add your video URLs to the
urlsfield (one per line). It accepts standard,youtu.be, Shorts, and embed URLs. - Pick your options — output format (timestamps vs. plain text), whether to include auto-generated English, and whether to include non-English languages.
- Click Start and wait a few seconds. Results stream into the dataset as each video completes.
- Download your transcripts as JSON, CSV, Excel, or HTML from the dataset, or pull them via API.
No code required — but everything is also available through the Apify API for programmatic access.
How much will it cost?
This Actor is priced per compute unit (CU) and, because it uses lightweight HTTP requests instead of a browser, it's extremely efficient — a single compute unit can process a large batch of videos.
- Free trial — every new Apify account gets a $5 usage credit on the Free plan, plenty to try it out.
- Starter ($49/mo) and higher plans include monthly platform usage and unlock higher concurrency for bigger jobs.
- For the exact rates and included usage, see the Pricing tab on the Actor page.
Cost scales with the number and length of videos, not with a per-result fee — so long playlists stay cheap.
Input
You can configure everything from the Input tab in the Console. See the input tab for the full, live schema. The main fields:
| Field | Type | Default | Description |
|---|---|---|---|
urls | string[] | (required) | YouTube video URLs to process |
outputFormat | timestamp | text | timestamp | Timestamped segments, or plain concatenated text |
includeEnglishAG | boolean | true | Include auto-generated English captions when manual ones are missing |
includeNonEnglish | boolean | true | Extract all available languages, not just English |
proxyConfiguration | object | Residential proxy | Residential proxy required — YouTube blocks datacenter IPs. Defaults to groups: ["RESIDENTIAL"]. |
Minimal input example:
{"urls": ["https://www.youtube.com/watch?v=aircAruvnKk","https://youtu.be/dQw4w9WgXcQ"],"outputFormat": "timestamp","includeEnglishAG": true,"includeNonEnglish": false}
Output
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Here's a simplified example with outputFormat: "timestamp":
[{"id": "aircAruvnKk","url": "https://www.youtube.com/watch?v=aircAruvnKk","input": "https://www.youtube.com/watch?v=aircAruvnKk","transcripts": [{"language": "English","content": [{ "startMs": 291, "endMs": 3374, "startTime": "0:00", "text": "Hi, welcome." },{ "startMs": 3374, "endMs": 6800, "startTime": "0:03", "text": "In this video we'll explore..." }]}]}]
And the same video with outputFormat: "text":
[{"id": "aircAruvnKk","url": "https://www.youtube.com/watch?v=aircAruvnKk","input": "https://www.youtube.com/watch?v=aircAruvnKk","transcripts": [{"language": "English","content": "Hi, welcome. In this video we'll explore..."}]}]
Tips & advanced options
- Going plain-text for LLMs? Set
outputFormattotextto get one clean string per language — ideal for passing to GPT/Claude or embedding models. - Only want English? Turn off
includeNonEnglishto skip noisy multi-language output. - Trim costs on huge batches — the Actor deduplicates nothing by design (it matches the original tool's behavior), so pass each URL only once if you don't want repeats.
- Use a residential proxy. YouTube serves a "sign in to confirm you're not a bot" wall to datacenter IPs, which returns empty transcripts. The Actor defaults to a residential proxy (
groups: ["RESIDENTIAL"]) — keep it on. Residential proxy usage is the main cost driver for this Actor. - Automate it. Schedule recurring runs for playlists/channels, or trigger runs via the API and pipe results straight to your storage or AI pipeline.
FAQ, disclaimers, and support
Is this an official YouTube API? No. It reads the public caption data YouTube serves to its web player. It is an unofficial alternative for cases where the official YouTube Data API doesn't expose transcripts.
Do I get timestamps?
Yes — in timestamp mode every segment includes millisecond start/end plus a human-readable startTime.
What if a video has no captions?
The Actor still returns a result for it, with an empty transcripts array, so your pipeline never breaks mid-batch.
Legal / scraping disclaimer
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. This Actor should be used in compliance with YouTube's Terms of Service.
Need help or have feedback? Use the Issues tab on the Actor page to report bugs or request features, and the API tab for programmatic access.