YouTube Transcript Scraper | Subtitles, Timestamps & Metadata
Pricing
from $6.00 / 1,000 transcripts
YouTube Transcript Scraper | Subtitles, Timestamps & Metadata
Transcripts for any list of YouTube videos or the top videos of a keyword: plain text + timestamped segments, language (human or auto), all available languages, plus title, channel, views, length. $6 per 1,000; no captions = not charged. No API key, no login. For creators, marketers & AI/RAG.
Pricing
from $6.00 / 1,000 transcripts
Rating
0.0
(0)
Developer
Mr Zack
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
YouTube Transcript Scraper — Subtitles, Timestamps & Video Metadata
Transcripts for any list of YouTube videos — or for the top videos of a keyword — in one run, $6 per 1,000. Paste URLs, Shorts links, youtu.be links or IDs and get the full transcript as plain text plus timestamped segments (start, duration, text), the language used, whether it is human or auto-generated, every other language available, and the video's title, channel, length, views, keywords and thumbnail. Type a search query instead and the Actor finds the videos for you (searchQuery + maxVideos).
Videos without captions, private/removed videos, duplicates and search-listing rows are never charged. No YouTube API key, no login, no cookies, no browser.
Who uses this
- Content creators & agencies repurposing videos into blog posts, newsletters, shorts scripts and SEO pages.
- Marketers & researchers mining competitor channels, reviews and interviews at scale.
- AI / RAG builders feeding LLMs with clean, segmented transcripts (works directly from the Apify MCP server).
- Educators, journalists, analysts who need quotable, timestamped text instead of re-watching hours of video.
Input
| Field | Default | Notes |
|---|---|---|
videoUrls | 2 demo videos | One per line: watch / shorts / embed / youtu.be URLs or bare IDs. |
searchQuery | — | Transcribe the top videos for a keyword instead of (or in addition to) URLs. |
channelUrls | — | New in 0.0.3. Whole channels: @handle, /channel/UC…, /c/…, /user/… — newest videos first. |
playlistUrls | — | New in 0.0.3. Every video of a playlist (URL with list= or a bare PL…/UU… id). |
maxVideos | 20 | Cap per keyword search / channel / playlist (max 500). |
languages | ["en"] | Preference order; prefix match (en → en-GB). Use ["all"] to get every caption track. |
oneRowPerLanguage | false | New in 0.0.3. One transcript row for each listed language that exists (e.g. ["en","es","id"] → up to 3 rows per video). Automatically on with ["all"]. |
outputFormats | [] | New in 0.0.3. Add ready-to-save subtitle files as text fields: srt and/or vtt. |
preferManual | true | Human captions over auto-generated when both exist. |
fallbackToAnyLanguage | true | If no preferred language, take the first available track. |
includeSegments | true | segments[] with start, duration (seconds), text. |
includeSearchRows | false | Also output the ranked search listing (free rows, type: search-result). |
Output — one row per video
| Field | Example |
|---|---|
videoId, url, title, channel, channelId, channelUrl | kJQP7kiw5Fk, Luis Fonsi - Despacito ft. Daddy Yankee, LuisFonsiVEVO |
lengthSeconds, viewCount, publishDate, category, keywords[], thumbnailUrl | 282, 9116018813, … |
status | ok | no-captions | failed (only ok rows are charged) |
language, languageName, isAutoGenerated | en, English - en, false |
availableLanguages[] | ["en","en-US","ja","es","es-ES","ko (auto)"] |
transcript | full plain text |
segments[] | { "start": 0.433, "duration": 27.1, "text": "…" } |
wordCount, charCount, segmentCount, source, scrapedAt | 653, 2990, 90, direct |
srt, vtt (only with outputFormats) | 1\n00:00:00,433 --> 00:00:27,533\n… / WEBVTT\n\n00:00:00.433 --> … |
Example output (real row, 6 Sep 2026)
{"videoId": "Ks-_Mh1QhMc","url": "https://www.youtube.com/watch?v=Ks-_Mh1QhMc","title": "Your Body Language May Shape Who You Are | Amy Cuddy | TED","channel": "TED", "lengthSeconds": 1263, "viewCount": 29037137,"status": "ok", "language": "en", "isAutoGenerated": false,"availableLanguages": ["sq", "ar", "hy", "az", "bg", "my", "…53 total"],"transcript": "So I want to start by offering you a free no-tech life hack…","segments": [{ "start": 12.9, "duration": 3.1, "text": "So I want to start by offering you" }],"wordCount": 3210, "segmentCount": 428}
Default input (2 videos) costs $0.013 and finishes in ~3 seconds; 100 videos ≈ $0.60 in under a minute.
Pricing
| Event | Price |
|---|---|
| Transcript | $0.006 ($6 / 1,000 videos) |
| Actor start | $0.001 |
One row = one transcript = one charge, so languages: ["all"] on a video with 26 caption tracks bills 26 transcripts — use oneRowPerLanguage with an explicit list when you only need a few. Platform usage included. Not charged: videos without captions, unavailable/private videos, duplicates, videos where none of your languages exist (with fallbackToAnyLanguage: false), and search-result rows.
Reliability
YouTube throttles datacenter IPs in waves. This Actor uses YouTube's own mobile player endpoint (the one the Android app uses) and, when YouTube still blocks a request, transparently retries through a residential fallback path — so runs keep succeeding instead of returning empty datasets. If every request is blocked and the fallback is down, the run fails loudly with nothing charged beyond the start fee.
Schedule & integrate
Track a channel or topic: set searchQuery, schedule the Actor daily (Console → Schedules) and push new transcripts to Google Sheets, Notion, Slack or your vector DB via Integrations.
API & AI agents (MCP)
curl -X POST "https://api.apify.com/v2/acts/tactful_anvil~youtube-transcript-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"videoUrls":["https://www.youtube.com/watch?v=Ks-_Mh1QhMc"],"languages":["en"],"includeSegments":false}'
Add it to Claude, Cursor or ChatGPT through the Apify MCP server (https://mcp.apify.com) and ask "summarize the last 10 videos about airbnb investing" — the agent gets clean transcripts back. Python: ApifyClient(token).actor("tactful_anvil/youtube-transcript-scraper").call(run_input={...}).
Related Actors
- Kick Trending Clips Scraper — what is going viral on Kick right now.
- Whop Content Rewards Scraper — paid clipping campaigns that need exactly this kind of source material.
- Google Play Reviews Scraper — more voice-of-customer text for research.
Found this useful? Bookmark & review
A bookmark or a short review helps other creators find this Actor — and tells me what to add next (channel mode, SRT/VTT export, translation tracks?). Issues tab is open; I answer within 24 h.
Changelog
- 0.0.4 (8 Sep 2026) — billing hardening: a charging hiccup can no longer abort a run that already returned transcripts (rows are delivered either way).
- 0.0.3 (8 Sep 2026) — channel mode (
channelUrls, newestmaxVideosvideos per channel) and playlist mode (playlistUrls); one row per language (oneRowPerLanguage, orlanguages: ["all"]for every track — 26 languages on a MrBeast video in one run); SRT / VTT output fields (outputFormats); Google "sorry"/429 pages are now detected as blocks (never charged, relay retry) instead of being parsed as a 1-line transcript. No existing field changed. - 0.1 (6 Sep 2026) — launch: URL/ID + search mode, language preference with manual-first, timestamped segments, video metadata, residential fallback.