Youtube Video Summarizer By Channel & Playlist
Pricing
from $4.99 / 1,000 results
Youtube Video Summarizer By Channel & Playlist
YouTube Video Summarizer by Channel & Playlist extracts videos from YouTube channels and playlists and generates concise AI summaries. Analyze video content, topics, transcripts, and key insights at scale for research, content analysis, and automation.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
10
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
YouTube Video Summarizer โ Extract Videos, Transcripts & Channel Data
Youtube Video Summarizer By Channel & Playlist turns a whole YouTube channel, playlist, or list of individual video URLs into structured rows: full video metadata, the timestamped transcript, chapters, hashtags, and โ with your own AI provider key โ a short and a long summary per video, plus one roll-up row per channel or playlist. Every response is typed, normalized JSON, not HTML or scraped selectors, so it drops straight into a database, a spreadsheet, or an LLM context window. After reading this, you'll know exactly which fields you get, how the per-container video cap controls cost, and how to wire the output into your own pipeline.
๐บ What is Youtube Video Summarizer By Channel & Playlist?
Youtube Video Summarizer By Channel & Playlist is a YouTube channel scraper, playlist scraper, and transcript/summary tool in one Actor. Paste a channel URL, a playlist URL, or plain video URLs, and it lists the videos, then runs every one of them through the same per-video pipeline: metadata, transcript, chapters, and โ if you switch it on โ an AI summary. No YouTube account, no Google API key, and no OAuth flow are required; every field comes from public YouTube pages.
- Expand a channel (
@handleor/channel/UC...) into its newest videos - Expand a playlist (
?list=PL...) into its items, in playlist order - Extract the transcript (manual captions when available, auto-captions otherwise) with real timestamps
- Optionally generate an AI summary and long-form Markdown summary per video, using your own model key
- Add one roll-up row per channel or playlist with batch-level stats
๐ What data does Youtube Video Summarizer By Channel & Playlist collect?
Every run can return up to four distinct row shapes, all sharing one fixed key set so downstream code never has to branch on schema.
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Videos | title, view/like/comment counts, engagement rate, duration, category, upload type | title, views, likes, comment_count, engagement_rate, duration_seconds, upload_type, isShort |
| Transcripts & chapters | timestamped captions, plain-text transcript, chapter markers | transcript[], transcriptText, transcriptSource, chapters[] |
| Channel details | channel identity, subscriber/view counts, description, links | channel{} (name, handle, subscriberCount, description, joined, country, links[]) |
| Channel/playlist roll-ups | batch totals and averages per container | containerVideosDiscovered, containerAvgViews, containerAvgEngagementRate, containerTopTags[] |
| AI summaries (optional) | short and long-form video summary | summary, long_summary, summaryStatus |
Need more YouTube data?
If you specifically need subtitles with keyword search across videos rather than full metadata and roll-ups, API Empire also publishes YouTube Video Subtitles Scraper With Keyword Search. Use that one when subtitle search is the whole job; use this Actor when you need the full video record โ metadata, transcript, and an optional summary โ across an entire channel or playlist.
๐ How does Youtube Video Summarizer By Channel & Playlist differ from the official YouTube Data API?
The YouTube Data API v3 is quota-metered and requires a Google Cloud project; this Actor is quota-free and requires only an Apify account.
| Feature | YouTube Data API v3 | Youtube Video Summarizer By Channel & Playlist |
|---|---|---|
| Daily quota | Default allocation of 10,000 units/day combined for most endpoints, plus separate caps of 100 search.list and 100 videos.insert calls/day (Google Developers, checked 2026-08-15) | No quota concept โ the only ceiling is maxVideosPerContainer (1โ500) that you set per run |
| Setup | Requires a Google Cloud project, an API key, and quota approval for higher volume | Run directly from the Apify Store โ no key or project needed for scraping |
| Caption/transcript access | captions.download requires OAuth 2.0 authorization and "permission to edit the video" โ practically, your own uploads only (Google Developers, checked 2026-08-15) | Returns the public transcript (manual or auto-captions) for any video that has a caption track, no ownership required |
| Assembling one video's record | Metadata, captions, and channel details come from separate endpoints and separate quota buckets | One dataset row already joins metadata, transcript, channel details, and (optionally) the AI summary |
| Batch-level stats | Not provided โ the caller computes aggregates from raw API responses | One container_summary row per channel/playlist with totals and averages built in |
| AI summaries | Not part of the API | Optional per-video summary using a model and key you supply |
The official API is the right choice if you own the channel, stay inside quota, and only need your own analytics. Youtube Video Summarizer By Channel & Playlist is the fit when you need transcripts and summaries for videos you don't own, across a whole channel or playlist, without managing a Google Cloud project or OAuth consent screen.
๐ฏ Why do developers and teams scrape YouTube channels and playlists?
For AI engineers and agent builders
The transcript, chapters, and per-video metadata land in one JSON row per video โ feed transcriptText straight into a RAG index, use chapters[] to chunk long videos at natural boundaries, and let an agent call the Actor with a channel URL as its only tool input instead of stitching together three separate scraping steps.
For marketers and content teams
Point the Actor at a competitor's channel with a cap of 50 and read views, likes, engagement_rate, and tags back for every recent upload, plus the container_summary row's containerTopTags for the whole batch โ a fast read on what a channel is publishing and what's landing.
For researchers and analysts
hashtags, tags, category, and full transcript text across a channel or playlist give a text corpus and metadata set for topic or sentiment analysis, without touching anything gated behind a login โ everything returned comes from public pages.
For developers building data products
Schedule the Actor against a fixed list of channels or playlists, export new rows on each run, and build a monitoring dashboard, digest, or search index on top โ the row shape never changes, so a downstream schema doesn't need to change either.
๐งญ How to scrape YouTube channels and playlists (step by step)
- Open Youtube Video Summarizer By Channel & Playlist on its Apify Store page.
- Paste one or more channel or playlist URLs into Channel or Playlist URLs โ or, for specific videos only, use Individual Video URLs instead (both can be filled together).
- Set Max Videos Per Channel or Playlist, your cost ceiling, and optionally switch on Generate AI Summaries with your own provider model and API key.
- Click Start to run the Actor on the Apify platform.
- Read results from the Output tab as they arrive, or export as JSON, CSV, XML, or Excel once the run finishes.
What to do when YouTube changes its structure
The Actor is maintained, and the output schema stays stable โ field names and types don't change on your end even when YouTube's underlying pages do. No action is required from you when that happens.
โฌ๏ธ Input
None of the twelve parameters are individually required, but the run needs at least one of Channel or Playlist URLs, Individual Video URLs, or Channel Search Phrases โ with all three empty, the run fails immediately.
| Parameter | Required | Type | Constraints | Description |
|---|---|---|---|---|
channelOrPlaylistUrls | No | array | editor: stringList | Channel or playlist URLs/handles to expand into videos. Accepts @handle, /channel/UC..., ?list=PL..., or a bare @handle. |
maxVideosPerContainer | No | integer | min: 1, max: 500, default: 5 | Hard cap on videos taken from each channel or playlist โ the cost control for batch runs. |
channelSearchQueries | No | array | editor: stringList | Phrases used to find channels when both URL lists above are empty. Each match is expanded exactly like a pasted channel URL. |
maxChannelsPerQuery | No | integer | min: 1, max: 20, default: 1 | How many channels to take from each search phrase. Only applies when no channel, playlist, or video URL was supplied. |
singleVideoUrls | No | array | editor: stringList, items pattern: ^(https?://) | Specific video URLs processed alongside (or instead of) the channel/playlist batch. |
urls | No | array | editor: stringList, items pattern: ^(https?://) | Legacy field, kept for input built against the single-video version of this Actor. Used only when singleVideoUrls is empty. |
includeContainerSummary | No | boolean | default: true | Adds one container_summary row after each channel/playlist with discovery, processing, and engagement stats. |
enableAiSummaries | No | boolean | default: false | Turns on the AI summary step. Requires aiApiKey (or a matching environment variable) to actually produce a summary. |
aiModel | No | string (enum) | default: "gpt-4o-mini" | 24 supported models across Anthropic, OpenAI, Google, xAI, DeepSeek, Perplexity, and Mistral (full list below). |
aiApiKey | No | string (secret) | editor: textfield | Your own provider API key. Stored encrypted, used only for this run's summary calls. |
maxDurationSeconds | No | integer | min: 0, default: 0 | Videos longer than this still get full metadata and transcript, but are skipped for the AI summary call. 0 = no limit. |
maxRetries | No | integer | min: 1, max: 6, default: 3 | Attempts per video before it is reported as unavailable. One failing video never stops the batch. |
proxyConfiguration | No | object | editor: proxy | Optional. Recommended for larger channel/playlist batches. |
aiModel enum values: claude-haiku-4-5, claude-sonnet-5, claude-opus-4-8, claude-fable-5, gpt-4o-mini, gpt-4o, gpt-4.1-mini, gpt-4.1, o3-mini, o1, gemini-2.0-flash-lite, gemini-2.0-flash, gemini-1.5-pro, gemini-2.5-flash, gemini-2.5-pro, grok-2-latest, grok-3-mini, grok-3, deepseek-chat, deepseek-reasoner, sonar, sonar-pro, mistral-small-latest, mistral-large-latest. Provider is detected from the model name: claude-* โ Anthropic, gpt-*/o1/o3 โ OpenAI, gemini-* โ Google, grok-* โ xAI, deepseek-* โ DeepSeek, sonar* โ Perplexity, mistral-* โ Mistral.
Example input
{"channelOrPlaylistUrls": ["https://www.youtube.com/@somechannel","https://www.youtube.com/playlist?list=PLxxxxxxxxxxxxxxxx"],"maxVideosPerContainer": 10,"channelSearchQueries": [],"maxChannelsPerQuery": 1,"singleVideoUrls": [],"urls": [],"includeContainerSummary": true,"enableAiSummaries": true,"aiModel": "gpt-4o-mini","aiApiKey": "<your own provider key>","maxDurationSeconds": 0,"maxRetries": 3,"proxyConfiguration": { "useApifyProxy": false }}
Common pitfall: leaving channelOrPlaylistUrls, singleVideoUrls, and channelSearchQueries all empty. The run fails on start with "Nothing to process" rather than returning zero rows silently.
โฌ๏ธ Output
Every row โ video, roll-up, or error โ is pushed to the dataset the moment it's ready, and every row carries the same full key set; a field that doesn't apply to that row type is null, [], or {}, never omitted. Export as JSON, CSV, XML, or Excel from the Output tab, or read it via the Apify API.
โ ๏ธ Every pushed row is billed, including failed videos. The Actor charges the row_result pay-per-event on every Actor.push_data() call โ a video that comes back as status: "error" (private, removed, unreachable after retries) is charged the same as a fully processed one. Filter them out on your side when you only want to pay attention to usable rows, for example [r for r in items if r["status"] == "ok"].
Scraped video (type: "video")
{"type": "video","isChild": true,"parentContainerType": "channel","parentContainerId": "UCxxxxxxxxxxxxxxxxxxxxxx","parentContainerTitle": "Example Channel","parentContainerUrl": "https://www.youtube.com/@somechannel","positionInContainer": 1,"inputUrl": "https://www.youtube.com/watch?v=VIDEO_ID","url": "https://www.youtube.com/watch?v=VIDEO_ID","id": "VIDEO_ID","video_id": "VIDEO_ID","title": "Example video title","description": "Full video description text ...","published_date": "2026-05-14","publishedAt": "2026-05-14T00:00:00Z","relativeDate": "2 months ago","duration_seconds": 733,"views": 184230,"likes": 7421,"comment_count": 512,"engagement_rate": 0.0431,"tags": ["example", "tutorial"],"hashtags": ["#shorts", "#howto"],"category": "Education","language": "en","live_status": "none","upload_type": "normal","isShort": false,"resolution": "1920x1080","ageLimit": 0,"availability": "public","thumbnails": { "default": "https://i.ytimg.com/...", "maxres": "https://i.ytimg.com/..." },"channel_id": "UCxxxxxxxxxxxxxxxxxxxxxx","channel_name": "Example Channel","channel": {"id": "UCxxxxxxxxxxxxxxxxxxxxxx","name": "Example Channel","handle": "somechannel","url": "https://www.youtube.com/@somechannel","subscriberCount": "1200000 subscribers","logo": ["https://yt3.ggpht.com/..."],"badges": ["Verified"],"description": "Channel about page description ...","joined": "Jan 12, 2015","country": "United States","subscribersText": "1.2M subscribers","totalViewsText": "245,123,000 views","videoCountText": "812 videos","canonicalUrl": "https://www.youtube.com/@somechannel","links": [],"followerCount": 1200000},"chapters": [{ "title": "Intro", "start_time": 0, "end_time": 42 }],"transcript": [{ "start": "0.320", "dur": "3.120", "text": "welcome back to the channel" }],"transcriptText": "welcome back to the channel ...","transcriptEntryCount": 412,"transcriptWordCount": 1836,"transcriptSource": "auto_captions:en","summary": "A concise overview of the video ...","long_summary": "# Overview\n\n...","summary_source": "transcript","summaryStatus": "generated","containerVideosDiscovered": null,"containerVideosProcessed": null,"containerVideosSummarized": null,"containerVideosFailed": null,"containerTotalViews": null,"containerAvgViews": null,"containerAvgLikes": null,"containerAvgEngagementRate": null,"containerTotalDurationSeconds": null,"containerTopTags": [],"status": "ok","error": null,"scrapedAt": "2026-08-06T12:00:00Z"}
Channel/playlist roll-up (type: "container_summary")
{"type": "container_summary","isChild": false,"parentContainerType": "playlist","parentContainerId": "PLxxxxxxxxxxxxxxxx","parentContainerTitle": "Example Playlist","parentContainerUrl": "https://www.youtube.com/playlist?list=PLxxxxxxxxxxxxxxxx","positionInContainer": null,"inputUrl": "https://www.youtube.com/playlist?list=PLxxxxxxxxxxxxxxxx","url": "https://www.youtube.com/playlist?list=PLxxxxxxxxxxxxxxxx","id": null,"video_id": null,"title": "Example Playlist","description": null,"channel_id": null,"channel_name": "Example Channel","containerVideosDiscovered": 42,"containerVideosProcessed": 10,"containerVideosSummarized": 10,"containerVideosFailed": 0,"containerTotalViews": 1842300,"containerAvgViews": 184230,"containerAvgLikes": 7421,"containerAvgEngagementRate": 0.0431,"containerTotalDurationSeconds": 7330,"containerTopTags": ["tutorial", "example"],"status": "ok","error": null,"scrapedAt": "2026-08-06T12:00:00Z"}
A row with status: "error" keeps the identical key set; the data fields are left null and error holds a plain-language reason (for example "This video is private." or "This video is unavailable.").
Full key reference (every key present on every row, video or roll-up):
type, isChild, parentContainerType, parentContainerId, parentContainerTitle, parentContainerUrl, positionInContainer, inputUrl, url, id, video_id, title, description, published_date, publishedAt, relativeDate, duration_seconds, views, likes, comment_count, engagement_rate, tags, hashtags, category, language, live_status, upload_type, isShort, resolution, ageLimit, availability, thumbnails, channel_id, channel_name, channel, chapters, transcript, transcriptText, transcriptEntryCount, transcriptWordCount, transcriptSource, summary, long_summary, summary_source, summaryStatus, containerVideosDiscovered, containerVideosProcessed, containerVideosSummarized, containerVideosFailed, containerTotalViews, containerAvgViews, containerAvgLikes, containerAvgEngagementRate, containerTotalDurationSeconds, containerTopTags, status, error, scrapedAt
The dataset's default table view surfaces 48 of these as columns; parentContainerId, inputUrl, video_id, description, published_date, ageLimit, availability, the full channel{} object, the full transcript[] array, and transcriptText are pushed on every row but are not columns in the default view โ read them from the raw dataset item or the API response.
๐ How does Youtube Video Summarizer By Channel & Playlist compare to other YouTube scrapers?
| Feature | Youtube Video Summarizer By Channel & Playlist | Generic YouTube scraper |
|---|---|---|
| Container input | โ Channel URLs, playlist URLs, and individual video URLs in the same run | โ Typically one entity type per run |
| Transcript extraction | โ Timestamped transcript plus plain text, included by default | โ Often a separate tool or paid add-on |
| AI summaries | โ Optional, using your own provider key, no bundled AI cost | โ Rarely offered, or requires a separate service |
| Batch roll-up row | โ One aggregate row per channel/playlist (totals, averages, top tags) built in | โ Usually left for the user to compute downstream |
| Output shape | โ
Fixed key set on every row โ missing data is null, not a missing column | โ ๏ธ Varies by tool, often inconsistent across runs |
If you're building an AI agent or RAG pipeline, the output-format row is the decision-maker โ parsing HTML or reconciling an inconsistent schema inside an agent loop is a reliability failure mode, not a feature. A fixed key set means the same parsing code works on every run.
๐ข How many videos can you scrape with Youtube Video Summarizer By Channel & Playlist?
Up to maxVideosPerContainer videos โ 1 to 500, default 5 โ from each channel or playlist you supply; there's no schema limit on how many channel, playlist, or individual video URLs you can list in one run. Internally, the Actor pages through YouTube's continuation tokens (up to 60 pages per container) until it hits your cap or runs out of videos, whichever comes first, so discovery never does more work โ or triggers more AI calls โ than the cap allows. When discovering channels from search phrases instead of pasted URLs, maxChannelsPerQuery (1โ20, default 1) caps how many channels each phrase expands to.
๐ Integrate Youtube Video Summarizer By Channel & Playlist and automate your workflow
Youtube Video Summarizer By Channel & Playlist works with any language or tool that can send an HTTP request, since every run and every result is reachable through the Apify API.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("<store-owner>/youtube-video-summarizer-by-channel-playlist").call(run_input={"channelOrPlaylistUrls": ["https://www.youtube.com/@somechannel"],"maxVideosPerContainer": 10,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["views"], item["transcriptSource"])
Works in Python, Node.js, Go, Ruby, cURL โ any language that can call a REST endpoint and read JSON.
Automation platforms
Any Apify Actor, including this one, can be triggered from Make or Zapier through Apify's own app/integration, or from n8n through the Apify node โ start a run from a trigger, then pass the dataset rows into the rest of your workflow without writing a scraper yourself.
โ๏ธ Is it legal to scrape YouTube?
Yes โ Youtube Video Summarizer By Channel & Playlist returns only publicly available data: video metadata, transcripts of videos that already have public captions, and public channel information such as name, handle, and subscriber count. No login-gated or private content is accessed.
Because channel data can identify an individual creator (name, handle, public description, country), it can constitute personal data under regimes like the GDPR and CCPA. If you plan to store or process this data at scale โ for profiling, marketing outreach, or building a product around it โ you are responsible for having a lawful basis to do so and for honoring deletion or access requests where applicable. Consult legal counsel for commercial use cases involving bulk personal data.
โ Frequently asked questions
Does Youtube Video Summarizer By Channel & Playlist work without a YouTube account?
Yes. No YouTube account, Google API key, or OAuth flow is required โ every field comes from YouTube's public pages.
How often is the scraped data updated?
Every run fetches fresh data live from YouTube at run time; nothing is served from a cache. Run the Actor again, or on a schedule, to get current numbers.
What happens to a private, deleted, or region-restricted video?
It comes back as a row with status: "error" and a plain-language reason in error (for example, "This video is private." or "This video is unavailable."). All other fields are null. One failing video never stops the rest of the batch, and the same applies per channel or playlist โ an unreadable target is skipped and logged, and the run continues with the rest.
Can I scrape private or login-restricted YouTube content?
No. Only publicly accessible videos, channels, and playlists are returned. Private videos, members-only content, and channels behind a login wall are out of scope.
What happens if I turn on AI summaries without an API key?
The run still returns every metadata field, chapters, and the full transcript โ the summary step is simply skipped. summary and long_summary are null, and summaryStatus reads no_api_key so you can tell the difference from a video that had no source text to summarize.
Does Youtube Video Summarizer By Channel & Playlist work for AI agent workflows and LLM pipelines?
Yes. It's callable as an HTTP endpoint through the Apify API from any agent framework. Every response is typed JSON with a fixed key set โ no HTML, no selectors, and no parsing step before passing a row's transcriptText or summary into an LLM context window.
How does it handle YouTube's anti-bot defenses?
When a request is refused or challenged (including a "sign in to confirm you're not a bot" response), the Actor automatically switches from a direct connection to a residential proxy fallback and retries, with exponential backoff between attempts (maxRetries, default 3). If you supply your own Apify Proxy configuration, that's tried first before the automatic fallback.
How does Youtube Video Summarizer By Channel & Playlist compare to other YouTube scrapers?
It expands channels, playlists, and individual video URLs in one run, returns the transcript by default rather than as an add-on, adds a batch roll-up row automatically, and keeps a fixed output key set across every row. See the comparison table above for the full breakdown.
Does it return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with stable field names โ no HTML, no selectors, no cleanup step. Pass a row directly into an LLM context window, index transcriptText into a vector store, or route the whole row through an agent tool call.
Can I use it without managing proxies?
Yes. Leave Proxy Configuration empty and the Actor still runs, switching to an automatic residential-proxy fallback if YouTube challenges a request. A proxy is recommended, not required, and is more useful for larger batches.
What happens when YouTube changes its structure or blocks the scraper?
The Actor is maintained, and the output schema stays stable โ field names and types don't change on your end. No numeric turnaround time is promised for any given fix.
๐ฌ Your feedback
Found a bug, or missing a field you need? We want to know โ open an issue from the Actor's page in Apify Console, or reach out through the developer contact listed on the Store listing. Reports like this keep the Actor maintained as YouTube's pages change.