YouTube Transcript Scraper — video transcripts & metadata
Pricing
from $5.00 / 1,000 video processeds
YouTube Transcript Scraper — video transcripts & metadata
Extract YouTube video transcripts (captions/subtitles) with timestamps, plus title, channel and thumbnail metadata. Feed into LLMs, RAG pipelines, summarizers, translators, SEO tools or subtitling workflows. Handles watch, youtu.be, shorts, embed and live URLs. Proxy-free, fast, per-video pricing.
YouTube Transcript Scraper — video transcripts, subtitles & metadata
Extract YouTube video transcripts (captions/subtitles) with timestamps in seconds, plus title, channel and thumbnail metadata for every video. One API call per video — no browser, no proxy, no login.
Why this Actor
- Built for AI/LLM workflows — feed transcripts straight into summarizers, RAG pipelines, knowledge bases, chatbots, translation tools and fine-tuning datasets
- All URL forms —
watch?v=,youtu.be/,/shorts/,/embed/,/live/ - Automatic language fallback — if your preferred language isn't available, the first available transcript is fetched (can be disabled)
- Timestamped or plain text — full snippet array (
start,duration,text) plus a ready-to-use plain-text version - Per-video error reporting — a broken video never kills the run; you get structured
errorfields per item - Fast & cheap — async concurrency, proxy-free, charged per result
Use cases
- 📄 LLM training / RAG — turn videos into searchable text for AI apps
- 🗞️ Content repurposing — blogs, newsletters, show notes from podcasts/videos
- 🔎 SEO & research — keyword mining from thousands of transcripts
- 🌐 Subtitles & translation — caption extraction for dubbing/subtitling workflows
- 📊 Analytics — transcript + metadata for video performance analysis
Input
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | — | YouTube URLs or raw video IDs (required) |
languageCodes | array | ["en"] | Preferred languages in order |
strictLanguages | bool | false | Skip videos without a preferred-language transcript |
includeTimestamps | bool | true | Output snippets array + timestamped text |
includeMetadata | bool | true | Fetch title, channel, thumbnail via oEmbed |
maxConcurrency | int | 5 | Parallel videos per run (1–20) |
Output
One dataset item per video:
{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","videoId": "dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up","channelName": "Rick Astley","thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg","languageCode": "en","isGenerated": false,"snippetCount": 61,"transcriptText": "[00:00] We're no strangers to love ...","snippets": [{ "start": 0.0, "duration": 3.0, "text": "We're no strangers to love" }]}
Videos without an extractable transcript return an item with an error field — the run continues.
Pricing
Pay-per-event, charged only when a result is produced:
- $0.0007 per video result (dataset item)
- $0.005 per actor start
No hidden charges. Free tier usage is free.
FAQ
Does it work for videos without captions? No — the video must have manual or auto-generated captions (most videos with speech do).
Is a proxy needed? Not strictly — the actor works proxy-free from residential IPs. For datacenter/large-scale runs, enable the Apify proxy (default) or paste your own. If YouTube shows a "Sign in to confirm you're not a bot" error, add a cookies.txt export from a logged-in browser session (Chrome: use a cookies-export extension; Firefox: EditThisCookie → Export Netscape format).
Can I scrape an entire channel/playlist? Feed the actor the video URLs (e.g. export from a playlist link resolver) or run it on your list. Playlist/channel expansion is on the roadmap.
Support
Open an issue on the actor page or contact the developer. Feature requests welcome: channel/playlist expansion, view/like counts, summary generation.