YouTube Transcript Scraper avatar

YouTube Transcript Scraper

Pricing

from $6.00 / 1,000 transcript delivereds

Go to Apify Store
YouTube Transcript Scraper

YouTube Transcript Scraper

Get timestamped transcripts and captions from YouTube videos and Shorts. Pick a language or the original audio track. Pay only for transcripts delivered: videos without captions and failed lookups are free.

Pricing

from $6.00 / 1,000 transcript delivereds

Rating

0.0

(0)

Developer

Datara

Datara

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Get the full transcript of any YouTube video or Short: timestamped segments, clean plain text, or both. Paste in one URL or thousands. You pay only for transcripts actually delivered.

Why this one

  • Pay per transcript, nothing else. Videos with no captions, private or deleted videos, bad links and temporary errors are all free. They still appear in your results with a reason, so you know what happened.
  • No surprise bills. Maximum videos is a hard cap, and the actor checks your maximum cost per run before every request. It stops cleanly when the budget is used rather than going over.
  • Any language, including translations. Ask for a caption language (en, es, pt-BR …). If the video doesn't have it, YouTube's automatic translation is returned where available and flagged with autoTranslated: true. Or ask for the original spoken language only, skipping auto-dubbed tracks.
  • AI-ready text. Optionally strip caption annotations such as [music] and [applause] before the text reaches your LLM or RAG pipeline.
  • Every link format. watch?v=, youtu.be, Shorts, live replays, embeds, mobile and YouTube Music links, or bare video IDs. Duplicates are removed before anything is fetched.
  • Fast. Fetches several videos in parallel, retries transient errors automatically, and serves recently fetched transcripts from cache.

Input

FieldDescriptionDefault
videoUrlsVideo or Shorts URLs, or video IDsrequired
languageCaption language code; empty means YouTube's default trackempty
originalAudioReturn captions in the original spoken language only (overrides language)false
outputFormatboth, segments or textboth
removeSoundTagsStrip [music], [applause] and similar annotationsfalse
maxVideosHard cap on videos processed per run100
cacheMaxAgeAccept a cached transcript up to 1d, 3d, 7d, 14d, 30d, or none for always fresh7d
includeFailuresAdd a free row for each video without a transcripttrue
maxConcurrencyParallel requests (1–20)5

Example:

{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/jNQXAC9IVRw",
"https://www.youtube.com/shorts/abcdefghijk"
],
"language": "en",
"outputFormat": "both",
"maxVideos": 50
}

Output

One row per video.

{
"status": "ok",
"videoId": "jNQXAC9IVRw",
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"type": "video",
"input": "https://youtu.be/jNQXAC9IVRw",
"language": "English",
"autoTranslated": false,
"requestedLanguage": "en",
"segmentCount": 6,
"wordCount": 42,
"durationSeconds": 19,
"text": "All right, so here we are in front of the ...",
"segments": [
{ "startMs": 1200, "endMs": 4100, "startTime": "0:01", "text": "All right, so here we are" }
],
"scrapedAt": "2026-10-19T09:40:00.000Z"
}

autoTranslated is true when you asked for a language the video doesn't have and YouTube's machine translation was returned instead. In that case language shows the code you requested.

Videos without a transcript come back like this (free):

{
"status": "no_captions",
"videoId": "...",
"url": "...",
"errorMessage": "No transcript available. The video may have no captions, or may be private, deleted or unavailable.",
"charged": false
}
statusMeaningCharged
okTranscript deliveredYes
no_captionsNo transcript available: no captions, or the video is private, deleted or unavailableNo
not_foundVideo not foundNo
invalid_inputNot a YouTube video link or IDNo
errorTemporary failure after retries; safe to re-runNo

The Timestamped segments view in the Output tab gives one row per segment, ready to export as CSV for subtitles or analysis. A run summary is saved to the key-value store as SUMMARY.

Use cases

  • Feed video content into LLMs, RAG pipelines and summarisers
  • Repurpose videos into blogs, newsletters and social posts
  • Search, quote and timestamp-link spoken content
  • Research competitors, creators and topics at scale
  • Build subtitle files and accessibility tooling

Pricing

Pay per event: you're charged once per transcript delivered (status: "ok"), plus Apify's small per-run start fee. Nothing else. Set Maximum cost per run in the run options and the actor will never exceed it.

Limits

  • Only videos that have captions (manual or auto-generated) can return a transcript.
  • Age-restricted, members-only and private videos usually have no accessible transcript; they are returned as free failures.
  • Accepts individual videos. Channel and playlist URLs aren't expanded; pass video URLs instead.

Integrations

Works with the Apify API, Make, Zapier, n8n, LangChain and the Apify MCP server. Call it from your own code:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datara/youtube-transcript-scraper').call({
videoUrls: ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();