YouTube Transcript Scraper
Pricing
from $0.01 / 1,000 results
YouTube Transcript Scraper
Grab the full transcript of any public YouTube video from a URL or ID. Pick the caption language and get clean transcript text plus timed snippets (text, start, duration) with the video details. Uses YouTube’s own InnerTube endpoint — no Data API key, no headless browser.
Pricing
from $0.01 / 1,000 results
Rating
0.0
(0)
Developer
Assia Fadli
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
YouTube Transcript Scraper turns any public YouTube video into its full transcript. Give it a single video link (or an 11-character ID), pick a language, and get back the complete transcript as clean text plus a timed, machine-friendly list of snippets — ready to drop into subtitles, summaries, search indexes or an LLM pipeline.
No YouTube Data API key. No headless browser. It talks to YouTube's own InnerTube endpoint (the same one the mobile app uses) with the ANDROID client, so caption downloads aren't blocked by the Proof-of-Origin / PoToken wall that breaks web-based scrapers.
Built for creators, researchers, localisation teams and developers who need reliable transcripts without maintaining scraping infrastructure.
What you get
For the video you provide, the actor writes a single dataset record:
| Field | Description |
|---|---|
lang | The requested transcript language code (e.g. en) |
videoDetails | The video's InnerTube details (title, author, channelId, lengthSeconds, viewCount, thumbnails, …) |
text | The full transcript as one space-joined string |
snippets | Array of { text, start, duration } — one entry per caption line, with timings in seconds |
If the transcript can't be read (captions disabled, video private/removed, or the language isn't
available), the actor still writes a row — { "lang": "...", "error": "..." } — instead of failing.
Input
| Field | Type | Required | Description |
|---|---|---|---|
videoUrl | string | ✅ | YouTube video URL (watch?v=, youtu.be/, /shorts/, /embed/, /live/) or a bare 11-char ID. Also accepted as url. |
language | string | — | BCP-47 caption language code. Defaults to en. Also accepted as lang. |
proxyCountryCode | string | — | Two-letter residential-proxy country code (e.g. US, GB, DE). Defaults to US. |
Example input
{"videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","language": "en"}
Example output row
{"lang": "en","videoDetails": {"videoId": "dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video)","author": "Rick Astley","lengthSeconds": "212"},"text": "Never gonna give you up Never gonna let you down ...","snippets": [{ "text": "Never gonna give you up", "start": 0.0, "duration": 3.5 },{ "text": "Never gonna let you down", "start": 3.5, "duration": 4.2 }]}
How it works
The actor sends a POST to https://www.youtube.com/youtubei/v1/player using the InnerTube
ANDROID client, reads the caption track for your chosen language (preferring the auto-generated
track and falling back to a manual one), downloads the timedtext XML, decodes HTML entities and
parses each line into a { text, start, duration } snippet. Requests route through Apify residential
proxies with an automatic fallback to a direct request.
Pricing
This actor uses Apify's pay-per-event model. You're charged once per delivered transcript
(transcript-scraped); error rows are never billed.
Use cases
- Generate subtitles or closed captions for accessibility and translation
- Feed clean transcript text into summarisation, search or LLM pipelines
- Build language-learning and study tools from real video captions
- Archive or repurpose video content as searchable text
Tech
Written in TypeScript on the Apify SDK. HTTP-only, so builds are fast and runs are cheap.
License
MIT © Assia Fadli