Youtube Video Summarizer
Pricing
$80.00 / 1,000 results
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
Maintained by CommunityActor stats
3
Bookmarked
177
Total users
2
Monthly active users
3 days ago
Last modified
Categories
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 Category | Publicly Available | Restricted |
|---|---|---|
| Video metadata (title, description, duration, views, likes, comment count) | Yes | — |
| Chapters, tags, hashtags, thumbnails | Yes | — |
| Timestamped captions/transcript | Yes, 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 videos | No | Requires a paid channel membership login |
| Premium-only videos | No | Requires a YouTube Premium subscription login |
| Age-restricted videos | No | Requires a signed-in, age-verified session |
| Private videos | No | Visible only to the video owner |
| Region-locked (copyright-blocked) videos | No | Blocked 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 Name | Description |
|---|---|
type | Constant "video" |
status | "ok" or "error" for this row |
id / video_id | The YouTube video ID (same value in both keys) |
url | Canonical https://www.youtube.com/watch?v=… URL, or null if extraction failed |
inputUrl | The exact URL you supplied for this row |
title | Video title |
description | Full video description |
published_date | Upload date, formatted YYYY-MM-DD |
relativeDate | Human-readable age, e.g. "3 month(s) ago" |
category | First category YouTube assigns to the video, if any |
language | Video/audio language reported by YouTube, if available |
live_status | Raw live-status signal, e.g. not_live, is_live, was_live, is_upcoming |
upload_type | Derived: normal, short, live, upcoming, or live_replay |
isShort | true if the video is a YouTube Short (URL path or vertical short-form video) |
resolution | Reported video resolution, e.g. 1920x1080 |
age_limit | Numeric age restriction reported by YouTube |
availability | Raw availability signal, e.g. public, private, premium_only, subscriber_only |
tags | Array of creator-assigned video tags |
hashtags | Array of #hashtags parsed out of the title and description |
chapters | Array of { start_time, end_time, title } objects |
thumbnails | Object keyed by quality: default, medium, high, standard, maxres (only keys that exist for this video are included) |
channel_id | Channel ID |
channel_name | Channel display name |
channel | Nested object — see below |
error | Friendly failure reason, or null on success |
scrapedAt | UTC 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 Name | Description |
|---|---|
duration_seconds | Video length in seconds |
views | View count |
likes | Like count, if public |
comment_count | Comment 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 Name | Description |
|---|---|
transcript | Array of { start, dur, text } timestamped caption segments |
transcriptText | Full transcript as one plain-text string, or null if no caption track exists |
transcriptEntryCount | Number of caption segments |
transcriptWordCount | Word count of transcriptText |
transcriptSource | Which caption track was used, e.g. subtitles:en or auto_captions:en; null if none found |
transcriptCoveragePercent | Sum 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 |
summary | Short AI summary (3–4 sentences); null unless AI summarization ran and succeeded |
long_summary | Long-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 |
summaryStatus | disabled, 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).
| Feature | YouTube Data API v3 | YouTube Video Summarizer |
|---|---|---|
| Setup | Google Cloud project, enabled API, API key or OAuth client | Paste URLs and run — no Google account needed |
| Caption/transcript access | OAuth + video-edit permission required; not available for videos you don't own | Reads the public caption track directly from the video page; no ownership required |
| Daily usage ceiling | Default 10,000 quota units/day across all endpoints | No platform-side daily unit quota — limited only by how many URLs you supply |
| AI summarization | Not part of the API | Optional built-in step using your own key, across 7 AI providers |
| Output shape | Separate calls for video, channel and caption resources | One 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.
- Open the Actor's page on the Apify Store and click Try for free (or Start, if you already have it saved).
- Provide the required
urlsfield — one or more YouTube video links. - Optionally turn on
enableAiSummaries, pick anaiModel, and paste your ownaiApiKeyif you want summaries. - Set
maxDurationSeconds,maxRetries, orproxyConfigurationif the defaults don't fit your batch. - 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_countandengagement_rateto compare videos without opening YouTube Studio. - ✍️ Content marketers repurposing video into blog posts use
transcriptTextandchaptersto draft outlines without re-watching the video. - 🔎 Researchers building topic datasets use
title,description,tagsandhashtagsacross many videos to study how creators frame a subject. - 🤖 AI engineers building a RAG pipeline or agent tool feed
transcriptText(or the timestampedtranscriptarray) as source context, usingsummaryas a pre-computed abstract to reduce token usage. - 🏢 Media teams doing compliance or competitive review use
availability,age_limitandlive_statusto 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.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
urls | Yes | array of string | One 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"] |
enableAiSummaries | No | boolean | Turn 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 |
aiModel | No | string (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" |
aiApiKey | No | string (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-…" |
maxDurationSeconds | No | integer | Length 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 |
maxRetries | No | integer | How many times a single video is attempted before the row is returned with an error. minimum: 1, maximum: 6, default 3. | 3 |
proxyConfiguration | No | object | Apify 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 ApifyClientclient = 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.
⚖️ Is it legal to scrape YouTube videos?
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.
How is this different from just pasting a link into an AI chatbot?
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.
Related scrapers
| Scraper Name | What it extracts |
|---|---|
| YouTube Video Subtitles Scraper | Clean subtitles/transcripts only, from YouTube video URLs |
| Facebook Video Transcript Extractor | Transcripts from public Facebook videos |
| TikTok Scraper | TikTok 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.