YouTube Transcript Scraper With AI Enrichment avatar

YouTube Transcript Scraper With AI Enrichment

Pricing

$14.99/month + usage

Go to Apify Store
YouTube Transcript Scraper With AI Enrichment

YouTube Transcript Scraper With AI Enrichment

Scrapes transcripts from any YouTube video, capturing full text, timestamps, language, and metadata. Ideal for SEO research, content analysis, accessibility, subtitle extraction, and automated processing of large video libraries with accurate transcript output

Pricing

$14.99/month + usage

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

1

Monthly active users

3 days ago

Last modified

Share

YouTube Transcript Scraper Plus

Extract transcripts from YouTube videos together with real video metadata, in a clean, flat, one-row-per-video format. Built on the youtube-transcript-api library for transcripts and YouTube's own watch-page data (InnerTube JSON + oEmbed) for metadata.

Accepts single videos, bulk lists, Shorts / embed / live links, bare 11-character video IDs, and channel or playlist URLs (expanded to their videos).

What it extracts

Each dataset row is one video and contains:

Transcript

  • plainText — the full transcript as clean text
  • segments[] — per-segment start, duration, end, timestamp (hh:mm:ss), text, and a watch?t= deep-link url
  • srt — ready-to-use SRT subtitle string
  • vtt — ready-to-use WebVTT subtitle string
  • segmentCount, wordCount, characterCount, readingTimeMinutes

Language / caption fields (authoritative, from the library)

  • languageCode, language
  • isGenerated — true for auto-generated captions (from the library's is_generated, not a display-name guess)
  • isTranslatable, translationLanguages[], translationLanguageCount
  • availableLanguages[] — every caption track on the video (language, languageCode, isGenerated, isTranslatable)
  • languageCount
  • translatedTo — set when you request translation via translateTo

Video metadata

  • title, channel, channelId, channelUrl
  • viewCount, likeCount (best-effort; null when YouTube does not expose it)
  • publishDate, uploadDate, durationSeconds
  • description, category, keywords[], thumbnail, isLiveContent

Bookkeeping

  • status — one of ok, no_captions, unplayable, error (never faked — a video with no captions is reported honestly)
  • scrapedAt (ISO 8601 UTC), error (message when status is not ok)

Optional AI enrichment (off by default)

When aiEnhancement is on and an API key is provided, each row also gets:

  • aiSummary, aiKeyPoints[], aiTopics[], aiChapters[]

Providers are auto-detected from the model name: Claude (Anthropic), GPT/o-series (OpenAI), Gemini (Google), Grok (xAI), DeepSeek, Sonar (Perplexity), Mistral.

Input

FieldTypeDefaultDescription
startUrlsarrayVideo URLs / IDs / Shorts / embed / live links / channel / playlist URLs
preferredLanguagesarray["en"]ISO codes in priority order; first match wins, falls back to best track
transcriptTypeenumanyany / manualOnly / autoOnly
translateTostring""ISO code to translate into (only if the track is translatable)
includeSegmentsbooleantrueInclude the per-segment array
includeSrtbooleantrueInclude SRT output
includeVttbooleantrueInclude WebVTT output
maxVideosPerChannelinteger10Cap when expanding a channel/playlist
concurrencyinteger5Videos processed in parallel
aiEnhancementbooleanfalseTurn on AI summary/key points/topics/chapters
aiModelenumclaude-haiku-4-5Model/provider for AI enrichment
aiApiKeysecretAPI key for the AI provider (or set the provider env var)
proxyConfigurationproxyResidentialResidential proxy recommended — YouTube blocks datacenter IPs

Example input

{
"startUrls": ["https://www.youtube.com/watch?v=4KbrxIpQgkM"],
"preferredLanguages": ["en"],
"transcriptType": "any",
"includeSrt": true,
"includeVtt": true,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Example output (abridged, real fields)

{
"videoId": "4KbrxIpQgkM",
"url": "https://www.youtube.com/watch?v=4KbrxIpQgkM",
"status": "ok",
"title": "...",
"channel": "...",
"channelId": "UC...",
"channelUrl": "https://www.youtube.com/channel/UC...",
"viewCount": 123456,
"likeCount": 4321,
"publishDate": "2022-01-01",
"durationSeconds": 615,
"languageCode": "en",
"language": "English",
"isGenerated": false,
"isTranslatable": true,
"availableLanguages": [
{ "language": "English", "languageCode": "en", "isGenerated": false, "isTranslatable": true }
],
"segmentCount": 210,
"wordCount": 1500,
"readingTimeMinutes": 7.5,
"plainText": "Full transcript text...",
"segments": [
{ "start": 0.0, "duration": 3.2, "end": 3.2, "timestamp": "00:00:00", "text": "Hello", "url": "https://www.youtube.com/watch?v=4KbrxIpQgkM&t=0s" }
],
"srt": "1\n00:00:00,000 --> 00:00:03,200\nHello\n...",
"vtt": "WEBVTT\n\n00:00:00.000 --> 00:00:03.200\nHello\n...",
"scrapedAt": "2026-07-02T00:00:00Z"
}

When a video has no captions, the row is still emitted with status: "no_captions" and the transcript fields left null — no fabricated text. Only genuine result rows (status: "ok") are charged.

Notes

  • Residential proxy is strongly recommended; YouTube blocks datacenter IPs for transcript requests.
  • likeCount and some metadata can be null when YouTube does not surface them — these are reported honestly rather than faked.
  • Legality: this retrieves captions and metadata already publicly served by YouTube. Review YouTube's Terms of Service for your use case; republishing content may require the creator's permission.