Transcripts are the cheapest way to make video searchable, summarisable, or feedable to a model. YouTube has them for most videos. Getting them out programmatically is the annoying part.
One video
curl -X POST "https://api.apify.com/v2/acts/parseforge~youtube-transcript-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }],
"maxItems": 1
}'
You get the transcript text back with its timings. If you want subtitle-file
output instead, set includeSrt to true and the SRT comes along with it.
A list of videos
startUrls takes as many as you want, so a batch is the same call with a longer
array. If you are working from ids rather than links, videoIds accepts those
directly and saves you building URLs.
Set maxItems to bound the run. It is the one input worth setting deliberately:
a channel’s back catalogue is a lot of videos.
Languages
language picks the track. Leave it off and you get the default, which is
usually the original audio language. Set it and you get that track when the
video has it.
This is the field that quietly decides whether your pipeline works on non-English content, so it is worth setting explicitly rather than relying on the default.
What you cannot get
Videos with transcripts disabled do not have one to return, and no scraper changes that. Auto-generated tracks come back as what they are: useful, and wrong often enough that you should not treat them as a record of what was said.