Youtube Transcript Scraper avatar

Youtube Transcript Scraper

Pricing

from $0.01 / 1,000 results

Go to Apify Store
Youtube Transcript Scraper

Youtube Transcript Scraper

πŸ”₯ $0.01/ 1K results πŸ”₯ - Extract clean, timestamped YouTube transcripts in multiple languages along with video and channel metadata. Export results as JSON, CSV, or Excel, or automate extraction with the YouTube Transcript Scraper API.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

Poidata

Poidata

Maintained by Community

Actor stats

2

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

🎬 YouTube Transcript Scraper

Extract clean, timestamped transcripts from public YouTube videos β€” in the language the video already has, or translated into another language on the fly.

Paste one or more YouTube URLs or video IDs and receive structured caption data with timings, ready for research, content analysis, translation work, AI workflows, or automation. No YouTube account, YouTube API key, or coding required.

What is YouTube Transcript Scraper?

YouTube Transcript Scraper extracts existing captions and subtitles from public YouTube videos.

For every successfully processed video, you receive:

  • Full transcript text and timestamped snippets
  • Ready-to-use SRT, WebVTT, and plain-text subtitles
  • The video's available caption/translation languages
  • Video and channel metadata
  • The language choices that already exist for the video
  • Structured output in JSON, CSV, or Excel

Key features

  • 🎯 Extract accurate, timestamped transcript segments
  • 🌍 See the available caption and translation languages per video
  • πŸ—£οΈ Pick an existing transcript in a specific language, or generate a brand-new translation
  • ⚑ Process multiple YouTube videos in one run
  • πŸ“Ί Include video and channel metadata
  • πŸ”— Accept YouTube URLs or video IDs
  • πŸ“€ Export results as JSON, CSV, or Excel
  • πŸ’» Use through the Apify Console or API

Two ways to get a non-default language

There are two distinct language options:

OptionWhat it doesSpeed
Transcript languageReturns a transcript that already exists for the video β€” auto-generated captions or a human-added track.Fast (no generation)
Translate to languageGenerates a new translation into a language that isn't already available.Slower (translated on the fly)

Use Transcript language to grab a pre-existing transcript in the exact language a video publisher already provided. Use Translate to language to get a language that wasn't produced automatically.

How does it work?

  1. Add one or more YouTube video URLs or IDs.
  2. Optionally pick a Transcript language (an existing track) or Translate to language (a new translation).
  3. Run the Actor.
  4. Download the results or access them through the Apify API.

Each successfully processed video is stored as one record (one row per video), containing the full transcript, timings, subtitles, and video/channel metadata.

Input options

FieldDescriptionRequired
videoIdsOne or more YouTube video IDs or URLsYes
langPick an already-existing transcript language (default/native, auto-generated, or a human-added track)No
tlangGenerate a new translation into this language on the flyNo

videoIds

Add a YouTube video ID:

{
"videoIds": ["dQw4w9WgXcQ"]
}

You can also use a complete YouTube URL:

{
"videoIds": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
]
}

lang β€” an already-existing transcript

Pick one of the transcripts that already exist for the video (auto-generated or human captions). The Actor returns that track β€” it is never generated on the fly, so it's fast.

{
"videoIds": ["dQw4w9WgXcQ"],
"lang": "es"
}

Leave lang as default to return the video's native/default transcript.

tlang β€” a brand-new translation

Generate a translation into a language that isn't already available:

{
"videoIds": ["dQw4w9WgXcQ"],
"tlang": "hi"
}

The Actor fetches the transcript, translates it, and returns the translated transcript with timings.

  • Translation can take up to 60 seconds per video.
  • The result is clearly marked with the target and source language.
  • Only ISO language codes are accepted; an unsupported code is reported and the run is aborted.
  • lang and tlang are independent β€” you normally use one or the other.

Every result also includes the video/channel metadata and the list of available caption/translation languages (available_translations), so you can see what already exists for a video.

Input examples

Extract the default transcript

{
"videoIds": ["dQw4w9WgXcQ"]
}

Pick an existing Spanish transcript

{
"videoIds": ["dQw4w9WgXcQ"],
"lang": "es"
}

Generate a Hindi translation on the fly

{
"videoIds": ["dQw4w9WgXcQ"],
"tlang": "hi"
}

Process several videos

{
"videoIds": [
"dQw4w9WgXcQ",
"https://www.youtube.com/watch?v=9bZkp7q19f0"
]
}

How to find what languages a video already has

To know whether a language already exists as a track (before deciding whether to translate), run the Actor and read available_translations in each record β€” it lists the caption/translation languages the video already has. If the language you want is in that list, use Transcript language; otherwise use Translate to language so the Actor generates it.

Output example

Each successfully processed video is stored as one record (one row per video). It contains the full transcript and video/channel details:

{
"video_id": "UMIMKzstuik",
"url": "https://www.youtube.com/watch?v=UMIMKzstuik",
"title": "Example YouTube Video",
"description": "Example video description.",
"thumbnail_url": "https://i.ytimg.com/vi/.../maxresdefault.jpg",
"channel_id": "UCr6JcgG9eskEzL-k6TtL9EQ",
"channel_name": "Example Channel",
"channel_url": "https://www.youtube.com/channel/UCr6JcgG9eskEzL-k6TtL9EQ",
"channel_handle": "@examplechannel",
"channel_avatar_url": "https://yt3.ggpht.com/.../avatar.jpg",
"channel_subscribers": "1.2M subscribers",
"channel_videos": "345 videos",
"channel_verified": true,
"upload_date": "2026-08-30",
"view_count": 49981,
"duration_human": "9m 0s",
"video_length_seconds": 547,
"transcript_seconds": 540.68,
"category": "Science & Technology",
"visibility": "public",
"is_live": false,
"keywords": ["mac", "apple"],
"language_name": "English",
"language_code": "es",
"requested_language": "es",
"source_type": "Manual",
"auto_generated": false,
"translatable": true,
"translated": false,
"translated_to": "",
"available_translations": ["de-DE", "ja", "pt-BR", "es-419"],
"snippet_count": 239,
"full_text": "Apple's most powerful chip, the M5 Ultra, is finally here...",
"srt": "1\n00:00:00,320 --> 00:00:04,400\nWelcome to today's video.\n\n...",
"webvtt": "WEBVTT\n\n00:00:00.320 --> 00:00:04.400\nWelcome to today's video.\n\n...",
"segments": [
{ "segment_index": 0, "start": 0.32, "duration": 4.08, "end": 4.4, "text": "Apple's most powerful chip, the M5 Ultra" }
],
"success": true,
"fetched_at": "2026-08-31T20:18:02Z"
}

visibility, keywords and is_live are derived from the data available. A few fields (e.g. view_count, upload_date) may be empty when the source doesn't provide them.

Subtitle formats included

Fields in each record can be used directly as subtitles:

  • srt β€” the transcript formatted as SRT subtitles.
  • webvtt β€” the transcript formatted as WebVTT subtitles.
  • full_text β€” the transcript as plain text.

Output views

The Output tab shows views of the same data:

ViewRowsColumns
Overviewone per videoThumbnail Β· Title Β· Channel Β· Views Β· Language Β· Source Β· Duration Β· Snippets Β· YouTube URL Β· OK Β· Available translations
Video detailsone per videoEvery video-level field, including the requested language, plain text, SRT/WebVTT and the full segments array
Channel detailsone per video's channelVideo Β· Avatar Β· Channel Β· Handle Β· Subscribers Β· Videos Β· Verified Β· Channel URL Β· Channel ID

Use the view selector at the top of the table to switch. Every view can be downloaded (Export) or fetched through the API with its ?view= parameter.

The full timestamped snippet list lives in each record's segments array (see the Video details view or the JSON export) β€” one element per transcript line.

YouTube Transcript Scraper API

Use the YouTube Transcript Scraper API to automate transcript extraction from your applications, scripts, AI agents, or data pipelines.

Send the same JSON input through the Apify API and retrieve the resulting dataset programmatically. An Apify API token is required for API access, but a YouTube account or YouTube Data API key is not required.

The API is suitable for:

  • AI and LLM data pipelines
  • Video summarization workflows
  • RAG knowledge bases
  • Content and keyword research
  • Academic or market research
  • Subtitle analysis
  • Workflow automation

Common use cases

AI and LLM applications

Collect structured YouTube transcripts for summarization, topic extraction, question answering, and other language-processing workflows.

Content research

Study videos without manually copying captions from YouTube.

SEO research

Analyze topics, phrases, questions, and terminology used in video content.

Video monitoring

Process transcripts from selected videos and integrate the results into automated monitoring systems.

Translation research

Discover which manual, auto-generated, and translated caption tracks are already available.

Frequently asked questions

Do I need a YouTube account?

No. You do not need to sign in to YouTube.

Do I need a YouTube API key?

No. The Actor does not require a YouTube Data API key.

Can I use it as a YouTube Transcript Scraper API?

Yes. You can run the Actor programmatically through the Apify API and retrieve the results from its dataset.

Can it extract auto-generated captions?

Yes. The Actor can return auto-generated captions when they are available for the video.

Can it extract transcripts in different languages?

Yes, two ways:

  • Transcript language β€” return a transcript that already exists for the video (e.g. a human-added track or an auto-generated one). Fast, no generation.
  • Translate to language β€” generate a new translation on the fly into a language that isn't already available. Slower.

Every result also lists the available caption/translation languages in available_translations, so you can see what exists before deciding whether to translate.

Does it translate transcripts automatically?

Not automatically. If you want a translation, pass a target language in Translate to language β€” the Actor translates it on the fly. If the language already exists as a track, use Transcript language instead for a faster result.

What happens if a video has no captions?

The video is skipped because no transcript can be extracted. It is not added to the dataset.

Can I process multiple videos in one run?

Yes. Add several URLs or video IDs to videoIds. The Actor stores one record per successful video (each record contains the full transcript, timings, and metadata).

What formats can I download?

Results can be exported as JSON, CSV, or Excel.

What happens when one video fails?

The failed video is skipped while the remaining videos continue processing.

License

Free to use. See the Apify Store terms for monetized Actors.