YouTube Transcript Scraper (timestamps, channels, search) avatar

YouTube Transcript Scraper (timestamps, channels, search)

Pricing

from $2.00 / 1,000 result items

Go to Apify Store
YouTube Transcript Scraper (timestamps, channels, search)

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

Viktor Dubnytskiy

Maintained by Community

Actor 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):

FieldExample value
urlhttps://www.youtube.com/watch?v=dQw4w9WgXcQ
titleRick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)
channelName / channelIdRick Astley / UCuAXFkgsw1L7xaCfnd5JJOw
language / languageNameen / English
isAutoGeneratedfalse
availableLanguages["en", "de-DE", "ja", "pt-BR", "es-419"]
segments[{"start": 1.36, "duration": 1.68, "text": "[♪♪♪]"}, …]
wordCount / segmentCount / durationSec487 / 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

  1. Video URLs / channels / searches are resolved into a list of video ids.
  2. For each video the caption track list is fetched and one track is chosen by your languages order, human-written before auto-generated (preferManual), with fallbackAnyLanguage as the last resort.
  3. The chosen track is downloaded as timed text and split into segments; text is those segments joined.
  4. 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

FieldMeaningDefault
videoUrlsWatch URLs, youtu.be / /shorts/ links, or bare 11-char idstwo example videos
channels@handle, channel URL or UC… id — latest videos are transcribedempty
searchesKeywords; the videos of the first result page are transcribedempty
languagesPreference order of caption languages, e.g. ["en","de"]["en"]
preferManualHuman-written track before the auto-generated onetrue
includeAutoGeneratedAllow YouTube's speech-recognition tracktrue
fallbackAnyLanguageTake any track when none of your languages existsfalse
maxVideosPerChannelLatest videos taken from each channel50
includeShortsList the Shorts tab instead of Videosfalse
tierProxy rung: auto, none, datacenter, residentialauto
maxItemsStop after this many transcripts20
modescrape or monitor (only new/changed since last run)scrape
monitorKey, webhookUrl, telegramBotToken, telegramChatIdMonitor-mode state key and alert targetsempty

Pricing

EventPrice
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 segments come 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_STATS separates "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. isAutoGenerated tells 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.