YouTube Transcript Scraper: Channels, Playlists & Shorts

Tauqeer Abbas · @nextgensda

Timestamped YouTube transcripts from videos, Shorts, channels, playlists and searches. No login, SRT/VTT, new-upload monitors.

About

YouTube Transcript Scraper: Channels, Playlists & Shorts

One rental for timestamped YouTube transcripts: single videos, Shorts, whole channels, playlists and keyword searches in one run, with the video's title, channel, views, duration and exact publish date in the same row.

No login, no API key, no browser. 256 MB. About 100 transcripts a minute.

Why this actor

This actorTypical transcript scrapers
Usage per 1,000 transcripts~$0.13 (measured on Bytewells)$2.00 – $5.00 per 1,000 elsewhere
Videos without captionsmetadata row, or skippeddropped
Channels, playlists, Shorts and search in one runyesoften video URLs only
Exact publish date and timeyesoften relative ("3 weeks ago") or missing
SRT and WebVTT subtitlesyessometimes
Monitor channels for new uploadsbuilt in (onlyNew)do it yourself
Memory256 MB1 – 4 GB
Login or API keynosometimes

A video found by several inputs (a channel and a search, say) is delivered once.

Built for AI datasets and research

  • LLM training and fine-tuning: spoken-language text with timestamps, language and whether captions are the creator's own or auto-generated.
  • RAG and agents: index a channel's back catalogue, then keep it fresh with a daily only-new run.
  • Summaries and chaptering: segments with start/end times map straight to clips and chapters.
  • Content and market research: what a niche's top videos for a keyword actually say, with views and dates.
  • Subtitles: SRT or WebVTT ready to download.

Export as JSON, CSV, Excel or XML, schedule runs, or deliver through webhooks and the Apify API.

What you get

One row per video:

Field
videoId, url, isShort
title, description, keywords, thumbnail
channelName, channelId, channelUrl
durationSeconds, viewCount
publishDateISO 8601 with time and zone, e.g. 2026-10-29T13:00:20-07:00
publishedTextas the channel or search page shows it ("2 weeks ago")
isLiveContenta live stream or its replay
captionLanguagesevery caption track: language, name, auto-generated or not
transcriptLanguage, transcriptAutoGeneratedthe track that was read
hasTranscriptfalse when the video has no captions
transcript[{start, end, text}], seconds
transcriptTextthe whole transcript as one string
srt, vttwhen asked for
source, sourceUrl, scrapedAtwhich input found the video

Example segment: {"start": 1.2, "end": 3.36, "text": "All right, so here we are, in front of the elephants"}

Quick start

Transcripts of a channel's 50 newest videos:

{
  "channels": ["@GoogleDevelopers"],
  "maxVideosPerSource": 50
}

Search results with SRT subtitles:

{
  "searches": ["sourdough starter"],
  "maxVideosPerSource": 30,
  "outputFormats": ["text", "srt"]
}

New uploads of several channels, every day (schedule it):

{
  "channels": ["@GoogleDevelopers", "@Google"],
  "channelTab": "all",
  "onlyNew": true,
  "monitorName": "google-channels"
}

Input

InputDefaultNotes
startUrls—videos, Shorts, youtu.be links, channels (/@handle, /videos, /shorts, /streams), playlists, search pages
channels—@handles, channel URLs or UC… ids
searches—keywords (videos, in YouTube's order)
channelTabvideosvideos, shorts, streams or all (videos + Shorts)
maxVideosPerSource50per channel tab, playlist or search
maxItems1000videos in total
transcriptstrueoff: metadata only
languageene.g. de, es, pt-BR; en-GB also matches en; empty = the spoken language
fallbackToOriginalLanguagetrueno captions in your language: take the spoken-language transcript
preferManualCaptionstruethe creator's captions before auto-generated ones
includeSegmentstruethe timestamped list
outputFormatstextadd srt and/or vtt
includePublishDatetrueexact date and time
skipVideosWithoutTranscriptfalseleave caption-less videos out
onlyNew, monitorNameoffskip videos earlier runs delivered (remembered a year)
concurrency4videos read at once
proxyConfigurationApify Proxydatacenter by default; switches to residential by itself if needed

Pricing

One monthly rental, no per-row fees: as many transcripts as you need. Runs use Bytewells compute from your credit, and this actor needs very little of it.

Measured on Bytewells (256 MB, datacenter proxy):

RunRowsTimeUsage
A channel (40) + a keyword search (40), with SRT79 transcripts + 1 video without captions59 s$0.010 (~$0.13 / 1,000)

Videos YouTube doesn't show without signing in (age-restricted, private, removed) get a row with error.

Notes and limits

  • About 1 in 8 videos has no captions at all (music, some live streams, short clips). They come with metadata only (hasTranscript: false), or not at all with skipVideosWithoutTranscript.
  • Transcripts come from YouTube's captions: the creator's own, or YouTube's automatic speech recognition. Machine translation into other languages is not offered.
  • With a language the video doesn't have, you get its spoken-language transcript and transcriptLanguage says which (turn off fallbackToOriginalLanguage to get none instead).
  • Age-restricted, private and members-only videos can't be read without an account.
  • Channel tabs are read newest first. With onlyNew, a channel stops at the first run of videos it already delivered, so daily runs take seconds.
  • Searches follow YouTube's relevance order and end after about 300–350 videos per keyword (measured); use several related keywords for more.

More Actors from the same publisher.

View all from @nextgensda