Youtube Video Summarizer avatar

Youtube Video Summarizer

Pricing

$80.00 / 1,000 results

Go to Apify Store
Youtube Video Summarizer

Youtube Video Summarizer

YouTube Video Summarizer instantly extracts key points, transcripts, and concise summaries from YouTube videos. Ideal for saving time, reviewing content, or generating insights—just enter a URL and get a quick summary, no watching required.

Pricing

$80.00 / 1,000 results

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

3

Bookmarked

177

Total users

2

Monthly active users

3 days ago

Last modified

Share

YouTube Video Summarizer — Metadata, Chapters and Transcripts

Get one structured JSON row per YouTube video: full metadata (title, views, likes, duration), chapters, thumbnails, channel details and the video's timestamped caption transcript — no HTML parsing, no browser automation to write yourself. Turn on optional AI summarization with your own AI provider key and every row also carries a short and a long-form summary. Paste your video URLs and run the Actor to see the output structure for yourself.

What is YouTube Video Summarizer?

YouTube Video Summarizer is an Apify Actor that reads a list of YouTube video URLs and returns metadata, chapters, thumbnails, channel information and the timestamped transcript for each one, as consistent JSON. AI summarization is optional and off by default — no YouTube account or login is required for any part of the run; the Actor reads only what is publicly visible on the video page. It's built for content researchers, marketers repurposing video content, and developers or AI engineers feeding transcript data into downstream pipelines.

What YouTube video data is publicly available to scrape?

Everything a signed-out visitor sees on a video's watch page — title, description, view/like counts, chapters, tags and captions — is publicly accessible. Data locked behind account status, region, or age gates is not.

Data CategoryPublicly AvailableRestricted
Video metadata (title, description, duration, views, likes, comment count)Yes
Chapters, tags, hashtags, thumbnailsYes
Timestamped captions/transcriptYes, when a caption or auto-caption track exists
Channel details (name, subscriber count, about-page description, links)Yes, from the channel's public "About" page
Members-only / channel-membership videosNoRequires a paid channel membership login
Premium-only videosNoRequires a YouTube Premium subscription login
Age-restricted videosNoRequires a signed-in, age-verified session
Private videosNoVisible only to the video owner
Region-locked (copyright-blocked) videosNoBlocked entirely in the requester's region

YouTube Video Summarizer only returns publicly visible data — what any visitor sees. Nothing behind a login wall.

What data can I extract with YouTube Video Summarizer?

Each run returns one row per input URL, covering video identity, engagement metrics, and the transcript plus optional AI summary. Every key below is written by the Actor's row-building code (ROW_KEYS in src/main.py).

Video identity & descriptive fields

Field NameDescription
typeConstant "video"
status"ok" or "error" for this row
id / video_idThe YouTube video ID (same value in both keys)
urlCanonical https://www.youtube.com/watch?v=… URL, or null if extraction failed
inputUrlThe exact URL you supplied for this row
titleVideo title
descriptionFull video description
published_dateUpload date, formatted YYYY-MM-DD
relativeDateHuman-readable age, e.g. "3 month(s) ago"
categoryFirst category YouTube assigns to the video, if any
languageVideo/audio language reported by YouTube, if available
live_statusRaw live-status signal, e.g. not_live, is_live, was_live, is_upcoming
upload_typeDerived: normal, short, live, upcoming, or live_replay
isShorttrue if the video is a YouTube Short (URL path or vertical short-form video)
resolutionReported video resolution, e.g. 1920x1080
age_limitNumeric age restriction reported by YouTube
availabilityRaw availability signal, e.g. public, private, premium_only, subscriber_only
tagsArray of creator-assigned video tags
hashtagsArray of #hashtags parsed out of the title and description
chaptersArray of { start_time, end_time, title } objects
thumbnailsObject keyed by quality: default, medium, high, standard, maxres (only keys that exist for this video are included)
channel_idChannel ID
channel_nameChannel display name
channelNested object — see below
errorFriendly failure reason, or null on success
scrapedAtUTC timestamp the row was produced

channel is a nested object: id, name, handle, url, subscriberCount, logo (array of image URLs), badges (["Verified"] when applicable), description, joined, country, subscribersText, viewsText, videosText, canonicalChannelUrl, links (array of { title, url }).

Engagement & duration metrics

Field NameDescription
duration_secondsVideo length in seconds
viewsView count
likesLike count, if public
comment_countComment count, if comments are enabled
engagement_rate(likes + comment_count) / views, rounded to 4 decimals; null when views is 0 or unavailable

Transcript & AI summary fields

Field NameDescription
transcriptArray of { start, dur, text } timestamped caption segments
transcriptTextFull transcript as one plain-text string, or null if no caption track exists
transcriptEntryCountNumber of caption segments
transcriptWordCountWord count of transcriptText
transcriptSourceWhich caption track was used, e.g. subtitles:en or auto_captions:en; null if none found
transcriptCoveragePercentSum of caption segment durations divided by duration_seconds, ×100, capped at 100, rounded to 1 decimal; null when there is no transcript or no known duration
summaryShort AI summary (3–4 sentences); null unless AI summarization ran and succeeded
long_summaryLong-form Markdown AI summary with headings and bullets; null unless generated
summary_source"transcript" if the summary was built from the caption text, "title_description" if it fell back to title + description because no transcript existed; null otherwise
summaryStatusdisabled, no_api_key, skipped_too_long, no_source_text, generated, or failed — see the FAQ below

🤖 Add-on: Need additional YouTube or video data?

If you only need captions and not the full metadata set, pair this with the YouTube Video Subtitles Scraper. Working across other video platforms too? The Facebook Video Transcript Extractor covers public Facebook videos, and TikTok Scraper covers TikTok profiles, videos and hashtag search in the same account.

How does YouTube Video Summarizer differ from the official YouTube API?

The YouTube Data API v3 is Google's official public API and requires its own Google Cloud project and credentials; YouTube Video Summarizer requires neither. Per Google's own documentation (checked 2026‑08‑15), captions.download — the API's caption-retrieval endpoint — requires OAuth authorization and "the user to have permission to edit the video," meaning it cannot pull transcripts for videos you don't own. The default API quota allocation is 10,000 units/day shared across all endpoints (per Google's quota documentation, checked 2026‑08‑15).

FeatureYouTube Data API v3YouTube Video Summarizer
SetupGoogle Cloud project, enabled API, API key or OAuth clientPaste URLs and run — no Google account needed
Caption/transcript accessOAuth + video-edit permission required; not available for videos you don't ownReads the public caption track directly from the video page; no ownership required
Daily usage ceilingDefault 10,000 quota units/day across all endpointsNo platform-side daily unit quota — limited only by how many URLs you supply
AI summarizationNot part of the APIOptional built-in step using your own key, across 7 AI providers
Output shapeSeparate calls for video, channel and caption resourcesOne row per video combining metadata, chapters, thumbnails, channel details and transcript

Use the official API when you own the videos and need to manage captions or channel content under your own account. Use YouTube Video Summarizer when you need read-only metadata and transcripts for videos you don't own, across many URLs at once, without managing Google Cloud credentials.

How to use YouTube Video Summarizer

Run it from the Apify Console or any Apify client — no code required to get your first result.

  1. Open the Actor's page on the Apify Store and click Try for free (or Start, if you already have it saved).
  2. Provide the required urls field — one or more YouTube video links.
  3. Optionally turn on enableAiSummaries, pick an aiModel, and paste your own aiApiKey if you want summaries.
  4. Set maxDurationSeconds, maxRetries, or proxyConfiguration if the defaults don't fit your batch.
  5. Start the run and stream or download results from the dataset as JSON, CSV, or the other formats the Apify platform supports.

How to scale to bulk video extraction

urls is an array (editor: stringList, minItems: 1, no upper bound in the schema) — add as many video links as you need and each one is processed and pushed as its own row within the same run. There is no separate "batch" input; the array itself is the bulk mechanism.

What can you do with YouTube video data?

  • 📊 Content analysts tracking channel performance use views, likes, comment_count and engagement_rate to compare videos without opening YouTube Studio.
  • ✍️ Content marketers repurposing video into blog posts use transcriptText and chapters to draft outlines without re-watching the video.
  • 🔎 Researchers building topic datasets use title, description, tags and hashtags across many videos to study how creators frame a subject.
  • 🤖 AI engineers building a RAG pipeline or agent tool feed transcriptText (or the timestamped transcript array) as source context, using summary as a pre-computed abstract to reduce token usage.
  • 🏢 Media teams doing compliance or competitive review use availability, age_limit and live_status to flag videos that need manual follow-up.

Because output is typed, consistent JSON, it can be piped directly into a vector store, a LangChain document loader, or any LLM prompt without additional parsing.

How does YouTube Video Summarizer handle rate limits and blocking?

Extraction runs through yt_dlp with several format-fallback strategies per video. By default requests go out directly; if you enable proxyConfiguration, that route is used from the start. Independently of your proxy setting, when running on the Apify platform the Actor keeps a fallback Apify Residential Proxy connection ready and switches to it once per video if a request looks retryable — timeouts, connection resets, SSL/certificate errors, "sign in to confirm you're not a bot," or HTTP 429/503. Each video is attempted up to maxRetries times (1–6, default 3), with a backoff sleep of min(2 × attempt, 8) seconds between attempts. If every attempt fails, or the video is private, members-only, premium-only, age-restricted, region-locked, unavailable, or not a valid YouTube URL, the row is returned with status: "error" and a plain-language error message — never a raw library or transport error. The Actor does not solve CAPTCHAs.

⬇️ Input

All parameters below come directly from .actor/actor.json's input schema.

ParameterRequiredTypeDescriptionExample Value
urlsYesarray of stringOne or more YouTube video URLs. minItems: 1. Accepted shapes: https://www.youtube.com/watch?v=VIDEO_ID, https://youtu.be/VIDEO_ID, https://www.youtube.com/shorts/VIDEO_ID. Each link produces exactly one row.["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]
enableAiSummariesNobooleanTurn on the short + long AI summary for every video. Default false. When true you must also supply aiApiKey — there is no shared or built-in key. When false, metadata, chapters and transcript are still collected and summary / long_summary stay empty.true
aiModelNostring (enum)Which AI model to use for summarization. Default "gpt-4o-mini". Provider is auto-detected from the model name prefix. See the full enum list below."claude-haiku-4-5"
aiApiKeyNostring (secret)Your own API key for the provider matching aiModel. If left empty, the Actor falls back to the matching environment variable (OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY/GEMINI_API_KEY, XAI_API_KEY, DEEPSEEK_API_KEY, PERPLEXITY_API_KEY, MISTRAL_API_KEY). With no key at all, summary fields return empty rather than placeholder text."sk-ant-…"
maxDurationSecondsNointegerLength guard for the AI step only. minimum: 0, default 0 (no limit). Videos longer than this still return full metadata and transcript, but the summary is skipped and summaryStatus is "skipped_too_long".3600
maxRetriesNointegerHow many times a single video is attempted before the row is returned with an error. minimum: 1, maximum: 6, default 3.3
proxyConfigurationNoobjectApify Proxy settings (editor: proxy). Prefill: { "useApifyProxy": false }. Optional for small runs; recommended for larger batches.{ "useApifyProxy": true }

aiModel enum values: gpt-4o-mini (GPT‑4o mini — OpenAI, cheap), gpt-4o (GPT‑4o — OpenAI), gpt-4.1-mini (GPT‑4.1 mini — OpenAI), gpt-4.1 (GPT‑4.1 — OpenAI), o3-mini (o3‑mini — OpenAI, reasoning), o1 (o1 — OpenAI, reasoning), claude-haiku-4-5 (Claude Haiku 4.5 — Anthropic, cheapest), claude-sonnet-5 (Claude Sonnet 5 — Anthropic), claude-opus-4-8 (Claude Opus 4.8 — Anthropic, best), gemini-2.0-flash-lite (Gemini 2.0 Flash‑Lite — Google, cheapest), gemini-2.0-flash (Gemini 2.0 Flash — Google), gemini-2.5-flash (Gemini 2.5 Flash — Google), gemini-2.5-pro (Gemini 2.5 Pro — Google, best), grok-3-mini (Grok 3 mini — xAI, cheap), grok-3 (Grok 3 — xAI), deepseek-chat (DeepSeek Chat/V3, cheap), deepseek-reasoner (DeepSeek Reasoner/R1), sonar (Sonar — Perplexity, cheap), sonar-pro (Sonar Pro — Perplexity), mistral-small-latest (Mistral Small, cheap), mistral-large-latest (Mistral Large).

⚠️ Every pushed row — including rows where a video could not be read — is billed as one row_result event. There is no separate uncharged error row; if you only want to review successful extractions, filter the dataset on status == "ok".

Example input

{
"urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/M7lc1UVf-VE"
],
"enableAiSummaries": true,
"aiModel": "claude-haiku-4-5",
"aiApiKey": "sk-ant-your-own-key",
"maxDurationSeconds": 3600,
"maxRetries": 3,
"proxyConfiguration": {
"useApifyProxy": true
}
}

⬆️ Output

Every row is typed, normalized JSON with the same 42 keys on every run, whether the video succeeded or errored. Export the dataset as JSON, CSV, Excel, HTML, XML, or RSS directly from the Apify Console, or fetch it via the API/apify-client.

Example output

{
"type": "video",
"status": "ok",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"inputUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"id": "dQw4w9WgXcQ",
"video_id": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video)",
"description": "The official video for “Never Gonna Give You Up” by Rick Astley.",
"published_date": "2009-10-25",
"relativeDate": "16 year(s) ago",
"duration_seconds": 213,
"views": 1650000000,
"likes": 18400000,
"comment_count": 2300000,
"engagement_rate": 0.0126,
"category": "Music",
"language": "en",
"live_status": "not_live",
"upload_type": "normal",
"isShort": false,
"resolution": "1920x1080",
"tags": ["Rick Astley", "Never Gonna Give You Up", "80s"],
"hashtags": ["#RickRoll"],
"chapters": [
{ "start_time": 0, "end_time": 43, "title": "Intro" },
{ "start_time": 43, "end_time": 213, "title": "Song" }
],
"thumbnails": {
"default": "https://i.ytimg.com/vi/dQw4w9WgXcQ/default.jpg",
"medium": "https://i.ytimg.com/vi/dQw4w9WgXcQ/mqdefault.jpg",
"high": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"standard": "https://i.ytimg.com/vi/dQw4w9WgXcQ/sddefault.jpg",
"maxres": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg"
},
"age_limit": 0,
"availability": "public",
"channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channel_name": "Rick Astley",
"channel": {
"id": "UCuAXFkgsw1L7xaCfnd5JJOw",
"name": "Rick Astley",
"handle": "@RickAstleyYT",
"url": "https://www.youtube.com/@RickAstleyYT",
"subscriberCount": 4200000,
"logo": ["https://yt3.googleusercontent.com/abc123"],
"badges": ["Verified"],
"description": "Official channel of Rick Astley.",
"joined": "Oct 15, 2009",
"country": "United Kingdom",
"subscribersText": "4.2M subscribers",
"viewsText": "2.1B views",
"videosText": "150 videos",
"canonicalChannelUrl": "https://www.youtube.com/@RickAstleyYT",
"links": [{ "title": "Official Store", "url": "https://rickastleyshop.com" }]
},
"transcriptSource": "subtitles:en",
"transcriptEntryCount": 62,
"transcriptWordCount": 411,
"transcriptCoveragePercent": 97.4,
"transcriptText": "We're no strangers to love. You know the rules and so do I…",
"transcript": [
{ "start": "0.500", "dur": "3.200", "text": "We're no strangers to love" },
{ "start": "3.700", "dur": "3.100", "text": "You know the rules and so do I" }
],
"summaryStatus": "generated",
"summary": "An upbeat 1987 pop song by Rick Astley pledging unwavering commitment to a romantic partner, delivered over an energetic dance-pop arrangement.",
"long_summary": "## Overview\nA classic 1987 pop single by Rick Astley...\n\n## Key themes\n- Loyalty and commitment\n- Classic 80s dance-pop production",
"summary_source": "transcript",
"error": null,
"scrapedAt": "2026-08-15T09:12:03.000Z"
}

How does it work?

YouTube Video Summarizer requests each video's public watch page directly (via yt-dlp), extracting metadata, chapters, thumbnails and the caption track without downloading any video or audio file — only text and structured data are collected. Channel details are filled in from the channel's public "About" page. If a request looks like it hit anti-bot friction (timeouts, connection resets, a bot-check response), the Actor automatically switches network route and retries, up to your configured maxRetries. Only what a signed-out visitor could already see is ever returned — no login, cookies, or session state are used. The output schema is fixed to the same 42 keys on every run, so downstream code doesn't break if YouTube changes its page layout.

Integrations

YouTube Video Summarizer runs on the Apify platform, so it's reachable from anywhere that can call the Apify API.

Calling YouTube Video Summarizer programmatically

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("<your-username>/youtube-video-summarizer").call(
run_input={
"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"enableAiSummaries": False,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["transcriptWordCount"])

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

No-code tools (n8n, Make, LangChain)

In n8n, use the Apify node (or the HTTP Request node against the Apify API run endpoint) to start this Actor and read back the dataset. In Make, the Apify app's "Run an Actor" module does the same. In LangChain, Apify's ApifyWrapper/actor-call integration can invoke this Actor and load the resulting dataset directly as documents for a retriever or agent tool.

Scraping publicly visible YouTube video pages for metadata and captions is generally lawful when you only collect what any signed-out visitor already sees, subject to YouTube's own Terms of Service. YouTube Video Summarizer returns only that publicly available data — video metadata, chapters, thumbnails, channel "About" details and caption text. The core data here (titles, descriptions, view counts, chapters, transcript text) is published content rather than personal data about a private individual, so it sits under YouTube's Terms of Service and general content/database-rights considerations rather than GDPR/CCPA; channel names and handles are creators' public business identifiers, not private personal information. Consult legal counsel if your use case involves bulk storage of personal data.

❓ Frequently asked questions

What YouTube video fields does YouTube Video Summarizer return?

It returns title, views, duration_seconds, transcriptText and channel_name among 42 total fields per row — see the data fields section above for the full list.

Does YouTube Video Summarizer require a YouTube account or login?

No. The Actor reads only publicly visible video pages and channel "About" pages; no YouTube account, cookies, or session is used anywhere in the source code.

How many videos can I extract in one run?

urls is an array with minItems: 1 and no schema-enforced maximum — add as many links as you want processed in a single run; each produces its own dataset row.

What happens if a video is private, members-only, age-restricted or region-locked?

The row is still returned with status: "error", url: null, and a plain-language error message (e.g. "This video is private.", "This video is available to channel members only.", "This video is unavailable in this region."). No exception is thrown for individual failed videos — the run continues to the next URL.

Can I scrape multiple YouTube videos at once?

Yes — pass multiple entries in the urls array in a single run; this is the Actor's only and complete bulk-input mechanism.

Does YouTube Video Summarizer work with Claude, ChatGPT and other AI agent tools?

It's callable as an Apify API/HTTP endpoint by any agent framework that can make an HTTP request, using apify-client or a raw REST call — see Integrations above.

A chatbot summary is generated from whatever the model can infer about the link, with no guarantee of an actual transcript. This Actor first extracts the real caption track from YouTube (transcriptSource, transcriptCoveragePercent tell you exactly what was used) and only then summarizes that verified text with the AI provider and key you choose — plus you get the full metadata, chapters and channel data in the same structured row, across as many videos as you supply in one run.

Does YouTube Video Summarizer return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with consistent field names across every run — no HTML parsing or CSS selectors. Pass transcriptText or the timestamped transcript array straight into an LLM prompt, a vector store, or an agent tool.

What happens when YouTube changes its layout or anti-bot system?

The Actor is maintained and the output schema stays stable across updates; no specific turnaround time is promised for fixes.

Can I use YouTube Video Summarizer without managing proxies or browser infrastructure?

Yes. No browser is launched — extraction goes through yt-dlp directly, and on the Apify platform the Actor automatically escalates to a residential proxy route if a request looks blocked, without any proxy setup required from you. Enabling proxyConfiguration yourself is optional and mainly useful for larger batches.

Which YouTube video fields work best for AI training data and RAG indexing?

For RAG, index transcriptText (or the timestamped transcript array for citation-level precision) alongside title and description for retrieval context. For structured training features, duration_seconds, views, engagement_rate and transcriptWordCount return as consistent typed numbers across every row.

Scraper NameWhat it extracts
YouTube Video Subtitles ScraperClean subtitles/transcripts only, from YouTube video URLs
Facebook Video Transcript ExtractorTranscripts from public Facebook videos
TikTok ScraperTikTok profiles, videos, reposts, hashtags and keyword search results

💬 Your feedback

Found a bug or missing a field? Let us know through the Actor's Issues tab on the Apify Store, or contact Scraper Engine support directly — reports like this keep the Actor maintained and accurate.