YouTube Transcript Scraper (timestamps, channels, search)
Pricing
from $2.00 / 1,000 result items
YouTube Transcript Scraper (timestamps, channels, search)
YouTube transcript scraper with no API key and no login: the full subtitle text of any video plus the timed segments behind it, as one row per video. Feed single videos, a whole channel or a keyword search. Picks the caption language you ask for, human-written before auto-generated.
Pricing
from $2.00 / 1,000 result items
Rating
0.0
(0)
Developer
Viktor Dubnytskiy
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Get the subtitle text of YouTube videos as one flat row per video — the full transcript and the timed segments behind it. Feed it single videos, whole channels or a keyword search. No API key, no login, no video downloads.
What you get
id / videoId, url, title, channelId, channelName, durationSec, language, languageName, isAutoGenerated, availableLanguages, segments (start, duration, text — seconds), text (all segments joined), wordCount, segmentCount, source (url / channel / search), query, scrapedAt.
Example output
Real row from the example dataset (transcript text truncated here):
| Field | Example value |
|---|---|
url | https://www.youtube.com/watch?v=dQw4w9WgXcQ |
title | Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster) |
channelName / channelId | Rick Astley / UCuAXFkgsw1L7xaCfnd5JJOw |
language / languageName | en / English |
isAutoGenerated | false |
availableLanguages | ["en", "de-DE", "ja", "pt-BR", "es-419"] |
segments | [{"start": 1.36, "duration": 1.68, "text": "[♪♪♪]"}, …] |
wordCount / segmentCount / durationSec | 487 / 61 / 213 |
Use cases
- Feed a RAG pipeline or build a training dataset from talks, lectures and podcasts, with timestamps kept for citation.
- Summarise or translate a channel's back catalogue without downloading a single video file.
- SEO, content research and accessibility checks: read what a video actually says, in bulk.
How it works
- Video URLs / channels / searches are resolved into a list of video ids.
- For each video the caption track list is fetched and one track is chosen by your
languagesorder, human-written before auto-generated (preferManual), withfallbackAnyLanguageas the last resort. - The chosen track is downloaded as timed text and split into
segments;textis those segments joined. - YouTube shows a "sign in to confirm you're not a bot" wall to some exits, so the actor starts without a proxy and escalates one rung at a time (
tier: auto).
Input
| Field | Meaning | Default |
|---|---|---|
videoUrls | Watch URLs, youtu.be / /shorts/ links, or bare 11-char ids | two example videos |
channels | @handle, channel URL or UC… id — latest videos are transcribed | empty |
searches | Keywords; the videos of the first result page are transcribed | empty |
languages | Preference order of caption languages, e.g. ["en","de"] | ["en"] |
preferManual | Human-written track before the auto-generated one | true |
includeAutoGenerated | Allow YouTube's speech-recognition track | true |
fallbackAnyLanguage | Take any track when none of your languages exists | false |
maxVideosPerChannel | Latest videos taken from each channel | 50 |
includeShorts | List the Shorts tab instead of Videos | false |
tier | Proxy rung: auto, none, datacenter, residential | auto |
maxItems | Stop after this many transcripts | 20 |
mode | scrape or monitor (only new/changed since last run) | scrape |
monitorKey, webhookUrl, telegramBotToken, telegramChatId | Monitor-mode state key and alert targets | empty |
Pricing
| Event | Price |
|---|---|
| result | $0.002 per transcript ($2 per 1,000) |
| monitor-check | $0.006 per monitor run |
| change | $0.002 per new/changed transcript |
Videos without a usable caption track are not pushed and not charged. They are counted in the ADAPTER_STATS record of the run's key-value store (noCaptions, unplayable, loginWalls, listingWalls, escalations, tierUsed), next to the standard RUN_SUMMARY record — so an empty run tells you whether the videos simply had no captions or whether YouTube refused the requests.
Why this actor
- No API key, no login, no cookies — nothing to register and nothing to keep alive.
- Timed
segmentscome with every row, not just a wall of text, so you can cite or seek back into the video. - A video with no usable captions is never pushed and never charged, so a batch of mixed videos costs only what it produced.
- The run tells you why it was empty:
ADAPTER_STATSseparates "no captions" from "YouTube wall" from "video unplayable". - Starts with no proxy and escalates only when YouTube actually walls the exit, so most runs carry no proxy cost.
Limits
- Auto-generated tracks are speech recognition: no punctuation to speak of, occasional wrong words, and word timings grouped into short lines.
isAutoGeneratedtells you which kind you got. - No machine translation: you get the tracks the video actually publishes, never a translated one.
- Videos with captions disabled, private, removed or age-restricted videos return nothing (and cost nothing).
- YouTube shows a "sign in to confirm you're not a bot" wall to some exit IPs. The actor starts without a proxy and escalates to datacenter and then residential proxy when it sees the wall; residential traffic is billed by Apify on top of the per-result price.
- Member-only and unlisted videos are not supported.
FAQ
Does it need a YouTube API key or a login? No. There is no key field and no cookie field. Captions are read from the public player payload.
What happens to videos that have no subtitles? They are skipped: no row, no charge. The count lands in noCaptions inside the ADAPTER_STATS record of the run's key-value store.
Can I get a transcript in a language the video does not publish? No. The actor never machine-translates. Ask for your languages in languages, and set fallbackAnyLanguage to true if you would rather have the video's own language than nothing.
Changelog
- 0.1: initial release — transcripts from video URLs, channels and search; language preference, manual/auto track choice, timed segments.
If this actor saved you time, a short review on its Store page genuinely helps other people find it. Found a bug or need a field that is missing? Open a ticket on the Issues tab.