YouTube Transcripts & Subtitles (Timestamps, 20+ Languages)
Pricing
from $3.00 / 1,000 transcripts
YouTube Transcripts & Subtitles (Timestamps, 20+ Languages)
Extract YouTube transcripts and subtitles with timestamps. One video or thousands, manual or auto-generated captions, language selection and translation. Clear per-video error rows instead of silent failures.
Pricing
from $3.00 / 1,000 transcripts
Rating
0.0
(0)
Developer
Waseem Ahmed
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
YouTube Transcripts Scraper — Subtitles with Timestamps, Any Language
Extract the full transcript of any YouTube video — one video or thousands — with timestamps, manual or auto-generated captions, language selection and optional translation. Built for RAG pipelines, AI agents, content repurposing and research.
What this actor does: it extracts the caption/subtitle track that YouTube already hosts for a video. It does not run speech-to-text on the audio. If a video has no captions at all, the row comes back with
status: "error"and a clear reason.
Why this one
Most transcript scrapers rely on a single YouTube client. When YouTube rate-limits that client you get empty files or a run that silently "succeeds" with no text. This actor:
- Rotates 4 YouTube clients (Android VR, Android, iOS, Web) and retries across them per video.
- Rotates proxy sessions per video (Apify Proxy by default) so one blocked IP does not fail the run.
- Never fails silently — every requested video produces a row, with
status: "ok"orstatus: "error"plus the exact reason. - Handles both caption formats YouTube returns (srv3 XML and json3).
- Keeps timestamps so transcripts can be cited, seeked to, or turned into subtitle files.
- Flags auto-generated captions (
isAutoGenerated) so you know the quality tier. - Translates on request using YouTube's own caption translation.
What you get
| Field | Description |
|---|---|
videoId | 11-character YouTube video id |
url | Canonical watch URL |
title, channel | Video title and channel name |
durationSeconds, viewCount | Video metadata |
language | Language of the returned transcript |
isAutoGenerated | true when the track is YouTube ASR |
translated | true when a translation was requested |
availableLanguages | Every caption language the video offers |
transcript | Full transcript as one clean string |
segments | [{ start, duration, text }] with second-level timestamps |
segmentCount | Number of caption segments |
status / error | ok, or error with the reason |
scrapedAt | ISO timestamp |
How to use
- Paste video URLs (watch,
youtu.be, Shorts, embed) or bare video IDs. - Pick your preferred languages, e.g.
en,es,de. The actor uses the best available match. - Leave Allow auto-generated captions on unless you only want manual subtitles.
- Run. Export as JSON, CSV or Excel, or pull the dataset through the API.
Example input
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/jNQXAC9IVRw"],"languages": ["en"],"includeAutoGenerated": true,"maxConcurrency": 5}
Example output (trimmed)
{"videoId": "jNQXAC9IVRw","title": "Me at the zoo","channel": "jawed","language": "en","isAutoGenerated": false,"segmentCount": 6,"transcript": "All right, so here we are, in front of the elephants...","segments": [{ "start": 1.2, "duration": 2.16, "text": "All right, so here we are, in front of the elephants" }],"status": "ok"}
Use cases
- RAG and AI agents — index video content so an assistant can answer questions about it.
- Content repurposing — turn videos into blog posts, newsletters, threads or clip scripts.
- Research — analyse interviews, lectures, podcasts and conference talks at scale.
- SEO — publish searchable text versions of video content.
- Accessibility and localisation — generate subtitle bases and translated transcripts.
- Competitive monitoring — track what a channel says over time.
Pricing
Pay per transcript via Apify's pay-per-event model: $3 per 1,000 transcripts ($0.003 each), plus a negligible actor-start event. Failed rows and invalid inputs are not charged. Set a maximum charge in the run options and the actor stops cleanly when it is reached.
Run it with the API
curl -X POST "https://api.apify.com/v2/acts/waseem9~youtube-transcripts/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"videoUrls":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"languages":["en"]}'
The synchronous endpoint returns dataset items directly, which makes this actor easy to wrap behind your own REST endpoint or RapidAPI listing.
Limitations (read before using)
- Captions only. No captions means no transcript. There is no audio transcription.
- Auto-generated captions contain errors (names, punctuation), which is why they are flagged.
- Age-restricted or private videos require authentication and will return an error row.
- Heavy use without a proxy can be rate-limited by YouTube; Apify Proxy is enabled by default.
Notes for developers
- Built on the Apify SDK (Node 20), HTTP-only — no browser, so runs are fast and cheap.
- Pure parsing helpers live in
src/parse.jsand are covered bynpm test. - Client ladder lives in
src/youtube.js; add a client there when YouTube changes a surface.