YouTube Transcript & AI Summary Extractor avatar

YouTube Transcript & AI Summary Extractor

Pricing

Pay per usage

Go to Apify Store
YouTube Transcript & AI Summary Extractor

YouTube Transcript & AI Summary Extractor

Extract YouTube transcripts (timestamped, multi-language, SRT/VTT/CSV/TXT export), expand channels/playlists, and generate AI summaries with topic-based chapters. Proxy-aware with auto anti-block retries.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Rupesh

Rupesh

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

40 minutes ago

Last modified

Share

Turn any YouTube video, Short, channel, or playlist into structured, timestamped transcript text and AI-generated summaries — one clean dataset row per video.

What it does

  • Resolves watch URLs, Shorts URLs, and bare video IDs.
  • Timestamped transcripts — every segment carries a startTime (HH:MM:SS) and text.
  • Multi-language — request a preferred language; falls back to auto-generated captions and reports language + isAutoGenerated.
  • Export formats — choose json (default), srt, vtt, csv, or txt. SRT/VTT/CSV/TXT are generated in spec-correct format and attached to the row.
  • Channel / playlist input — pass a channel page (@handle, /channel/...), or a playlist (?list=) URL; it auto-expands to the video list (capped by maxVideos).
  • Proxy-aware + anti-block — detects YouTube IP-bans / 429-style blocks, rotates the proxy, and retries with exponential backoff (maxRetries).
  • AI summary — optional bullet summary with selectable summaryLength (short/medium/long) and an independent summaryLanguage.
  • Chapter segmentation (stretch) — optional AI topic-based chapters with title + start/end times.
  • One dataset row per processed video.

Inputs

FieldTypeDefaultNotes
startUrls (required)array[string]Video, Short, video-ID, channel, or playlist URLs. Channels/playlists expand automatically.
modeenumautoauto tries direct then browser title; direct; browser.
maxVideosinteger1Max videos to process across all URLs + expansions (1–200).
preferredLanguagestringenPreferred transcript language code. Auto-generated captions used as fallback.
languages (legacy)array[string]["en","en-US","en-GB","a.en"]Kept for backward compatibility; used only when preferredLanguage is omitted.
languagesExtendedarray[string]= preferredExtra fallback codes.
includeRawTranscriptbooleantrueInclude timestamped segments + full text.
includeSummarybooleanfalseGenerate an AI summary. Requires OPENAI_API_KEY + OPENAI_BASE_URL.
summaryModelstringgpt-4o-miniModel for summary + chapters.
summaryLengthenummediumshort (3-5), medium (5-8), long (8-12) bullets.
summaryLanguagestring""Language for the summary, independent of transcript language.
enableChaptersbooleanfalseAI topic-based chapter segmentation (needs includeSummary).
outputFormatenumjsonjson, srt, vtt, csv, txt.
maxRetriesinteger3Exponential-backoff retries on YouTube blocks/IP-bans (proxy rotates each retry).
maxTranscriptLengthinteger15000Truncate transcript after this many characters.
proxyConfigurationobject{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }Defaults to Apify RESIDENTIAL proxies. YouTube blocks datacenter IPs (the Apify run node and the BUYPROXIES group are both blocked), so residential proxies are required for reliable channel/playlist/bulk runs. Override with your own proxyUrl or a different group if you have proxy access.

Backward compatibility: with no new inputs set, behavior matches the previous version (single video, en transcript, json output, optional summary). The old languages input is still honored when preferredLanguage is omitted.

Example 1 — single video, timestamped transcript (default)

{
"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"mode": "auto",
"maxVideos": 1,
"preferredLanguage": "en",
"includeRawTranscript": true,
"includeSummary": false,
"outputFormat": "json"
}

Example 2 — SRT export + AI summary (Spanish)

{
"startUrls": ["https://www.youtube.com/watch?v=abc123"],
"outputFormat": "srt",
"includeSummary": true,
"summaryLength": "short",
"summaryLanguage": "es",
"maxTranscriptLength": 8000
}

Example 3 — whole channel, auto-language fallback, chapters

{
"startUrls": ["https://www.youtube.com/@someChannel"],
"maxVideos": 20,
"preferredLanguage": "en",
"includeSummary": true,
"enableChapters": true,
"summaryLength": "long"
}

Example 4 — playlist with proxy + anti-block retries

{
"startUrls": ["https://www.youtube.com/playlist?list=PLxxxxxxxxxxxx"],
"maxVideos": 50,
"proxyConfiguration": { "useApifyProxy": true, "groups": ["BUYPROXIES94952"] },
"maxRetries": 5,
"outputFormat": "vtt"
}

Output schema (per video row)

FieldTypeDescription
videoUrlstringSource URL.
videoIdstring11-char YouTube video ID.
titlestringVideo title (when available).
languagestringResolved transcript language code.
isAutoGeneratedbooleantrue when auto-generated captions were used.
transcriptSegmentsarray[{ startTime: "HH:MM:SS", startSeconds, text }].
fullTextstringFull concatenated transcript (when includeRawTranscript).
summaryobject{ model, summary, error? } when includeSummary.
exportFormatstringThe chosen export format.
srt / vtt / csv / txtstringPresent only for the matching outputFormat.
chaptersarray[{ title, startTime, endTime }] when enableChapters.
warningsarray[string]Non-fatal issues (e.g. transcript-empty-or-quota-limited).

Example output row (outputFormat: json)

{
"videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"videoId": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up",
"language": "en",
"isAutoGenerated": false,
"transcriptSegments": [
{ "startTime": "00:00:01", "startSeconds": 1.36, "text": "[♪♪♪]" },
{ "startTime": "00:00:18", "startSeconds": 18.64, "text": "♪ We're no strangers to love ♪" }
],
"fullText": "[♪♪♪] ♪ We're no strangers to love ♪ ...",
"summary": { "model": "gpt-4o-mini", "summary": "- Iconic 80s song\n- ..." },
"exportFormat": "json",
"chapters": [
{ "title": "Intro", "startTime": "00:00:00", "endTime": "00:01:00" }
],
"warnings": []
}

AI summary / chapters — setup

Set these environment variables on the Actor (Apify Console → Actor → Environment): OPENAI_API_KEY and OPENAI_BASE_URL (any OpenAI-compatible endpoint, e.g. OpenRouter). When unset, includeSummary / enableChapters produce an empty summary with an error field rather than failing the run.

Run costs

Pay-per-event pricing:

  • per dataset row written
  • per run

Actual cost depends on run + row counts. Check the Apify Console after a run.

Notes / limitations

  • Proxy / IP bans: YouTube blocks datacenter IPs (including the Apify run node and the BUYPROXIES group). The actor therefore defaults to Apify RESIDENTIAL proxies, which reliably bypass the block. Without a working residential proxy, channel/playlist/bulk runs will fail with "YouTube is blocking requests from your IP." If you have your own residential proxy, set proxyConfiguration.proxyUrl.
  • Channel/playlist expansion is best-effort and capped by maxVideos.
  • Not all videos have captions; unavailable transcripts surface a warnings entry.
  • isAutoGenerated reflects whether the served transcript was auto-generated.