Youtube Video Subtitles Scraper
Pricing
$14.99/month + usage
Youtube Video Subtitles Scraper
The YouTube Video Subtitles Scraper actor extracts subtitles or captions from YouTube videos in any language. It supports bulk URL input and saves text or timestamped transcripts for analysis. Perfect for SEO, translation, accessibility, and video content research automation.
Pricing
$14.99/month + usage
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
0
Monthly active users
13 days ago
Last modified
Categories
Share
YouTube Video Subtitles Scraper — Transcripts and Metadata
YouTube Video Subtitles Scraper pulls the full transcript, title, channel details, and engagement counts from any public YouTube video URL and returns them as structured JSON — no browser extension or copy-pasting captions by hand. Each row carries the caption text broken into timed segments, alongside view, like, and comment counts, ready to load into a spreadsheet, a database, or an LLM pipeline. Paste in your video URLs below and start a run to see it work. 🎯
🎬 What is YouTube Video Subtitles Scraper?
YouTube Video Subtitles Scraper is an Apify Actor that extracts the caption/transcript track and public metadata from individual YouTube video URLs, one row of JSON per video. It reads whichever caption track is available — manual or auto-generated (ASR) — and pairs it with the video's title, description, channel info, and public engagement counters. No YouTube account or sign-in is required to run it. It's built for developers, data teams, and AI engineers who need clean transcript data instead of scraping the watch page themselves.
📺 What YouTube video data is publicly available to scrape?
Anyone who opens a public YouTube video in a browser can see its title, description, tags, view/like/comment counts, and — where the uploader enabled them — its captions. YouTube Video Subtitles Scraper reads that same publicly rendered information; it does not authenticate as the video owner or access anything gated behind channel ownership.
| Data Category | Public (no login) | Restricted (channel-owner login / OAuth) |
|---|---|---|
| Manually-uploaded subtitles | ✅ | |
| Auto-generated (ASR) captions | ✅ | |
| Video title, description, tags | ✅ | |
| View / like / comment counts | ✅ | |
| Channel name, ID, and URL | ✅ | |
| Upload date | ✅ | |
| Downloading a caption track through YouTube's own API | ✅ Requires OAuth with edit permission on the video | |
| Private, unlisted, or members-only videos | ✅ Owner login or invite link | |
| Age-restricted videos requiring sign-in confirmation | ✅ Google account sign-in |
YouTube Video Subtitles Scraper only returns publicly visible data — what any visitor sees on the watch page. Nothing behind a login wall.
📝 What data can I extract with YouTube Video Subtitles Scraper?
Every run returns typed JSON rows covering the video's identity, its public engagement metrics, and the transcript itself with per-segment timing.
| Field Name | Description |
|---|---|
url | The YouTube video URL exactly as provided in the input |
title | Video title ("Unknown Title", "Invalid Input", or "Failed to retrieve" on failed rows) |
description | Full video description text, or null |
tags | Array of the video's tag strings, or null |
channel_name | Uploading channel's display name ("N/A" or "Unknown Channel" when unavailable) |
channelId | Canonical YouTube channel ID, or null |
channelUrl | Full URL to the channel, or null |
publishedAt | Upload date in ISO 8601 date format (YYYY-MM-DD), or null if it couldn't be parsed |
length | Video duration formatted as MM:SS (or H:MM:SS past one hour); "0:00" if unknown |
type | Always "video" — a constant row-type marker |
views | View count as an integer, or null |
likeCount | Like count as an integer, or null |
commentCount | Comment count as an integer, or null |
transcript | Array of caption segments (see below), or [] when no transcript is available |
status | Machine-readable outcome code for the row (see Output section) |
message | Human-readable explanation paired with status |
success | Boolean — true only when status is "success" |
scrapedAt | ISO 8601 UTC timestamp of when the row was generated |
🎬 Video & channel details
url, title, description, tags, channel_name, channelId, channelUrl, publishedAt, length, type — everything that identifies the video and where it lives.
📊 Engagement metrics
views, likeCount, commentCount — the public counters shown on the watch page.
📝 Transcript & run status
transcript, status, message, success, scrapedAt — the caption content itself, plus a per-row outcome you can filter and branch on. Each transcript segment is an object: { "start": "1.360", "dur": "1.680", "text": "..." }. start and dur are decimal-second strings, not numbers.
🤖 Add-on: Need additional YouTube data?
If you also want an AI-generated summary of the same videos rather than the raw transcript, pair this Actor with YouTube Video Summarizer from Scraper-Engine. For video content on a different platform with the same transcript-plus-metadata shape, see Facebook Video Transcript Extractor.
🔍 How does YouTube Video Subtitles Scraper differ from the official YouTube API?
YouTube's own Data API v3 exposes a captions resource, but downloading the actual caption text through it requires OAuth 2.0 authorization with edit permission on that specific video — per Google's own documentation, checked 2026-08-15, captions.download "requires the user to have permission to edit the video," so it only works for videos you (or your authorized app) own. YouTube Video Subtitles Scraper reads the same publicly rendered caption tracks without any of that — you provide a public video URL and get the transcript back.
| Feature | YouTube Data API v3 | YouTube Video Subtitles Scraper |
|---|---|---|
| Caption/transcript text access | OAuth 2.0 + edit permission on the video (own channel only) | No login — works on any public video URL |
| Default daily quota | 10,000 quota units/day per Google Cloud project, per Google's getting-started docs (checked 2026-08-15) | No platform-imposed request quota; governed by your Apify plan and run configuration |
| Setup | Google Cloud project, API credentials, OAuth consent flow | Provide video URLs and start the run |
| Bulk processing | One authorized call per caption track, each drawing from the quota | Multiple URLs in a single run, processed concurrently (maxWorkers) |
| Missing-language handling | You query captions.list and choose a track yourself | Falls back automatically to any available track if the requested language is missing |
Use the official API when you own the channel and need to manage or upload captions. Use YouTube Video Subtitles Scraper when you need to read transcripts from videos you don't own, in bulk, without setting up OAuth.
▶️ How to use YouTube Video Subtitles Scraper
Get transcripts in three steps — no scraping code to write.
- Open YouTube Video Subtitles Scraper on the Apify Store and click Try for free (or Start, if you already have it saved).
- Provide the required input —
startUrls, a list of YouTube video URLs, one per line. - Optionally set
languagefor a preferred caption language,maxWorkersto control parallelism, andproxyConfigurationfor larger runs. - Start the run.
- Download results as JSON or CSV from the Actor's dataset, or stream them via the Apify API.
📈 How to scale to bulk video transcript extraction
startUrls accepts as many video URLs as you add — paste in a batch and the Actor processes them together. maxWorkers (1–10, default 4) controls how many videos are fetched in parallel within that single run, so a larger batch finishes faster without you writing a loop. There is no separate bulk endpoint; one run with many URLs is the bulk pattern.
🎯 What can you do with YouTube video transcript data?
- 🎓 AI/NLP researchers building training sets use
transcriptandpublishedAtto assemble time-stamped, multilingual caption corpora without manually downloading each video's captions. - 📊 Content analysts studying messaging use
transcriptalongsidetitleandtagsto search for keyword or topic frequency across a channel's catalog. - 🎬 Video editors and localizers use the segment-level
start/dur/texttranscript structure to resync or translate captions without re-timing them by hand. - 📈 Growth marketers benchmarking content use
views,likeCount, andcommentCountalongsidetranscriptto correlate what's said in a video with how it performs. - 🤖 AI engineers feed
transcripttext into a RAG pipeline or vector store as searchable, timestamped context for a video-aware chatbot or agent tool.
Because output is typed JSON with stable field names, any of these pipelines — including agent-based ones — can call the Actor over HTTP and consume the result directly, with no HTML parsing step in between.
🛡️ How does YouTube Video Subtitles Scraper handle rate limits and blocking?
Each video gets up to four attempts (one initial plus three retries) before the Actor gives up on it. When a request comes back with a blocking signal — HTTP 429, "forbidden," "rate limit," or messages like "sign in to confirm you're not a bot" — the Actor escalates its connection: starting with no proxy, then Apify Datacenter proxy, then Apify Residential proxy, waiting 2 seconds between attempts. Once residential proxying is triggered, the rest of the run keeps using it rather than resetting per video. You can also pre-select a proxy group yourself via proxyConfiguration; the Actor still escalates further if that group gets blocked, up to 3 residential retries per video before it stops trying.
⚠️ Errors that aren't retryable — a video reported as unavailable, private, removed, or age-restricted — are not retried at all; the row is returned immediately with a status explaining why. The Actor does not solve CAPTCHAs.
⬇️ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | Yes | array | YouTube video URLs, one per line. Individual video URLs only — channel or playlist URLs are not supported. | ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"] |
language | No | string | Preferred transcript language code (e.g. en, es, fr). Default: "en". If the preferred language has no captions, the Actor falls back to any available track. | "en" |
maxWorkers | No | integer | Number of videos processed in parallel. Minimum 1, maximum 10, default 4. Values outside this range are clamped, not rejected. | 4 |
proxyConfiguration | No | object | Apify Proxy configuration. Leave the default for normal use — the Actor escalates automatically when needed. | { "useApifyProxy": false } |
📥 Example input
{"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"language": "en","maxWorkers": 4,"proxyConfiguration": {"useApifyProxy": false}}
⬆️ Output
Every video produces one typed, normalized JSON row with a consistent schema across runs — whether the video succeeded or failed. Download results as JSON, CSV, Excel, or other formats supported by the Apify dataset export options.
📤 Example output
[{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channel_name": "Rick Astley","length": "3:33","views": 1708447413,"transcript": [{ "start": "1.360", "dur": "1.680", "text": "[♪♪♪]" },{ "start": "18.640", "dur": "3.240", "text": "♪ We're no strangers to love ♪" },{ "start": "22.640", "dur": "4.320", "text": "♪ You know the rules and so do I ♪" }],"message": "Transcript loaded (manual captions, en).","success": true,"status": "success","description": "The official video for \"Never Gonna Give You Up\" by Rick Astley.","tags": ["rick astley", "never gonna give you up", "80s music"],"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw","channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw","publishedAt": "2009-10-25","likeCount": 18456123,"commentCount": 2450123,"type": "video","scrapedAt": "2026-08-15T12:00:00+00:00"}]
status is one of: success, no_transcript, video_unavailable, restricted, fetch_error, empty_response, parse_error, temporary_issue, or invalid_input. Filter on status === "success" (or success === true) to keep only fully-scraped rows.
⚠️ Every row is billed as one row_result event, including failed ones (no_transcript, video_unavailable, invalid_input, and the rest) — there is no free or uncharged path for error rows. Double-check startUrls before a large run, since an invalid or unreachable URL still produces (and charges for) a row.
⚙️ How does it work?
YouTube Video Subtitles Scraper reads a video's public metadata and caption track listing through yt-dlp, which talks to YouTube's own video-info endpoints rather than parsing the rendered watch page's HTML. Once it has the caption track URL for the requested (or best-available) language, it downloads and parses that caption data directly. If a request is blocked, the Actor retries through Apify's proxy network, escalating from no proxy to datacenter to residential IPs as described above. Only what's publicly visible on the video — captions, title, description, tags, and public counters — is ever returned; nothing requires signing in. Because the output schema (the field names and row shape above) is fixed by the Actor's own code rather than by scraping selectors tied to YouTube's page layout, it stays stable even when YouTube's front-end changes.
🔌 Integrations
YouTube Video Subtitles Scraper runs on the Apify platform, so it's reachable from anything that can call an HTTP API or use the Apify SDK — no separate signup or API surface beyond your Apify account.
🐍 Calling YouTube Video Subtitles Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run_input = {"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"language": "en","maxWorkers": 4,}run = client.actor("youtube-video-subtitles-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["status"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
🧩 No-code tools (n8n, Make)
In n8n, use the HTTP Request node pointed at the Actor's run endpoint (or the community Apify node) to trigger a run and pull results into your workflow. In Make, use the Apify app's "Run an Actor" module the same way, then feed the resulting dataset items into downstream modules.
⚖️ Is it legal to scrape YouTube video transcripts?
Scraping publicly available video captions and metadata is generally lawful — this covers information any visitor to the video's page can already see, not content behind a login. YouTube Video Subtitles Scraper only returns public data; it does not authenticate as a channel owner or access private, unlisted, or restricted videos. Because the output centers on video/caption content rather than private individuals' personal records, the relevant constraints are YouTube's own Terms of Service and copyright in the underlying video and captions, not a personal-data regime like GDPR. Consult legal counsel if your use case involves bulk storage or redistribution of copyrighted transcript content.
❓ Frequently asked questions
What YouTube video fields does YouTube Video Subtitles Scraper return?
It returns transcript, title, channel_name, views, and publishedAt among the full set of 18 fields — see What data can I extract above for the complete list.
Does YouTube Video Subtitles Scraper require a YouTube account or login?
No. The Actor reads publicly available video pages and caption tracks without signing in to YouTube. You do need an Apify account to run the Actor itself.
How many YouTube videos can I process in one run?
startUrls accepts as many video URLs as you add in a single run, processed with up to maxWorkers (1–10, default 4) running in parallel.
What happens if a video has no captions available?
The row is still returned with status: "no_transcript" and a message explaining that no transcript is available for that video — the run does not fail, and the other rows in the batch are unaffected.
Can I scrape multiple YouTube videos at once?
Yes. startUrls is an array — add multiple video URLs and they're processed concurrently up to maxWorkers.
Does YouTube Video Subtitles Scraper work with Claude, ChatGPT, and other AI agent tools?
It's callable as a standard HTTP API endpoint (via the Apify API or apify_client) by any agent framework that can make an HTTP request; it does not currently expose a dedicated MCP server.
How does YouTube Video Subtitles Scraper compare to other YouTube subtitle scrapers?
No verified competitor data was available at the time of writing. What's documented here is grounded in this Actor's own source: automatic language fallback across manual and auto-generated captions, configurable concurrency (maxWorkers), and a proxy-escalation retry path — check any specific competitor's own listing for their claims before comparing.
Does YouTube Video Subtitles Scraper return data in a format LLMs can use directly?
Yes. Output is typed, normalized JSON with consistent field names across runs. Pass it directly to an LLM, index transcript text into a vector store, or feed it to an agent tool — no HTML parsing or custom selectors required.
What happens when YouTube changes its layout or anti-bot system?
The Actor is maintained and its output schema is designed to stay stable across YouTube changes, since it reads video-info and caption endpoints rather than parsing the rendered page. No specific update turnaround time is published or guaranteed.
Can I use YouTube Video Subtitles Scraper without managing proxies or browser infrastructure?
Yes. Apify Proxy (datacenter and residential tiers) is handled and escalated automatically by the Actor; you don't need to source or rotate proxies yourself, and there's no separate browser to configure.
Which fields work best for AI training data and RAG indexing?
For RAG, index transcript (the timestamped caption text) alongside title and description as searchable context. For training data, transcript, views, likeCount, and publishedAt return as consistently typed primitives across every successful row.
🔗 Related scrapers
| Scraper Name | What it extracts |
|---|---|
| YouTube Video Summarizer | AI-generated summaries of YouTube videos |
| Facebook Video Transcript Extractor | Transcripts and metadata from Facebook videos |
| TikTok Scraper | TikTok video, creator, and engagement data |
💬 Your feedback
Found a bug or missing a field? Open an issue on this Actor's Issues tab in the Apify Console, or leave feedback on its Apify Store listing — reports get read and factored into the next update.