{"id":"6efb1808-683c-4260-a0f7-094aafe71c69","slug":"youtube-com-api","name":"youtube.com API","description":"Retrieve video URLs and titles from any YouTube channel with flexible sorting and pagination options. Build applications that catalog, organize, or display channel content programmatically.","front_facing_description":"Retrieve public YouTube channel information, discover featured channels and recommendations, and access liked videos playlists to understand what content creators are promoting and enjoying. Perfect for researching creator profiles, finding related channels, and exploring curated video collections without needing direct channel access.","source_url":"https://www.youtube.com/@SuccessionBio/videos","is_authenticated":false,"canonical_scraper_id":"17f80f00-16b9-481b-8d14-fa845ca3f046","apis":[{"method":"GET","endpoint_name":"get_channel_videos","description":"Retrieve videos from a YouTube channel's public videos page. Returns video IDs, titles, watch URLs, view counts, relative publish labels, the absolute publish timestamp, the highest-resolution thumbnail URL and a visibility label per video. Supports sorting by latest (default), popular, or oldest, using the channel page's own sort options. The channel's video grid is paginated automatically until limit videos are collected, the channel is exhausted, or (for a date-sorted walk) the range has been passed. Each returned video costs one extra lightweight lookup to resolve its absolute publish timestamp (published_at, ISO 8601 with YouTube's own timezone offset, e.g. '2024-01-31T06:52:28-08:00'), so a limit of 50 means roughly 50 additional requests; published_at is null and date_lookup_failed is incremented when that lookup fails. Optional published_after / published_before (ISO dates YYYY-MM-DD, both inclusive, either or both) restrict results to videos whose publish date falls in the range: the relative label narrows the candidates cheaply and the exact timestamp decides inclusion, so the lookup cost is paid only for videos near or inside the range; with 'popular' sorting the whole grid (up to 40 pages) may be walked. A video whose exact date could not be resolved is kept only when its relative label places it entirely inside the range. View counts and publish labels are returned as strings exactly as YouTube renders them (e.g. '21 views', '2 weeks ago'; YouTube sometimes serves compact forms like '10M', '5d ago'). visibility is 'public', 'members-only' (YouTube's 'Members only' badge; such videos show no public view count, so views is null) or 'members-first' (YouTube's 'Members first' early-access badge; not observed on a live channel during verification). A nonexistent channel or a malformed date is rejected as an input error.","input_params":{"limit":{"type":"integer","required":false,"description":"Maximum number of videos to return. The scraper paginates automatically to fulfill the limit; each returned video adds one publish-date lookup request.","default":50,"domain":{"kind":"open","example":10,"pattern":"^[1-9][0-9]*$","generator":{"type":"static","value":5}}},"sort_by":{"type":"string","required":false,"description":"Sort order for videos.","default":"latest","enum":"Sort","closed":true,"domain":{"kind":"enum","values":["popular","latest","oldest"],"generator":{"type":"enum_pick","strategy":"first"},"source_selector":"sort chips"}},"channel_handle":{"type":"string","required":true,"description":"YouTube channel handle, with or without the leading '@' (e.g. '@SuccessionBio' or 'SuccessionBio').","domain":{"kind":"large_enum","sample":["@SuccessionBio","@mkbhd","@Google"],"example":"@SuccessionBio","pattern":"^@?[A-Za-z0-9._-]+$","discovery":"YouTube channel pages","generator":{"type":"sample_pick"},"cardinality":"millions"}},"published_after":{"type":"string","required":false,"description":"Earliest publish date to include, ISO 8601 calendar date YYYY-MM-DD (inclusive). Omit for no lower bound.","domain":{"kind":"open","example":"2024-01-01","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"published_before":{"type":"string","required":false,"description":"Latest publish date to include, ISO 8601 calendar date YYYY-MM-DD (inclusive). Omit for no upper bound; must not be earlier than published_after.","domain":{"kind":"open","example":"2024-01-31","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}}},"return_schema":{"type":"object","fields":{"videos":"array of Video objects with video_id, title, url, views (string or null — null for members-only videos), published (relative label as rendered), published_at (string or null — absolute ISO 8601 publish timestamp with offset), thumbnail (string — highest-resolution thumbnail URL), visibility ('public' | 'members-only' | 'members-first')","video_count":"integer — number of videos returned in this response","channel_handle":"string — the normalized channel handle with @ prefix","published_after":"string or null — the lower date bound applied (YYYY-MM-DD), null when not supplied","published_before":"string or null — the upper date bound applied (YYYY-MM-DD), null when not supplied","date_lookup_failed":"integer — number of processed videos whose absolute publish timestamp could not be resolved (their published_at is null)"},"sample":{"data":{"videos":[{"url":"https://www.youtube.com/watch?v=dtp6b76pMak","title":"Using Apple Vision Pro: What It’s Actually Like!","views":"28M views","video_id":"dtp6b76pMak","published":"2 years ago","thumbnail":"https://i.ytimg.com/vi/dtp6b76pMak/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCvTagTWL8xV8W7BCvqxouQF19H-g","visibility":"public","published_at":"2024-01-31T06:52:28-08:00"},{"url":"https://www.youtube.com/watch?v=SaneSRqePVY","title":"Apple Vision Pro Unboxing!","views":"8.8M views","video_id":"SaneSRqePVY","published":"2 years ago","thumbnail":"https://i.ytimg.com/vi/SaneSRqePVY/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCpr7SMCVkXFTG5HsQyXXuO6pm5kA","visibility":"public","published_at":"2024-01-30T06:00:32-08:00"}],"video_count":2,"channel_handle":"@mkbhd","published_after":"2024-01-01","published_before":"2024-01-31","date_lookup_failed":0},"status":"success"}},"initiates_session":false,"price":1,"verification":{"assertions":[{"path":"$.status","op":"equals","value":"success"},{"path":"$.data.videos","op":"array_min_len","value":1},{"path":"$.data.videos[0].video_id","op":"not_null"},{"path":"$.data.videos[0].title","op":"not_null"},{"path":"$.data.videos[0].url","op":"not_null"},{"path":"$.data.videos[0].thumbnail","op":"not_null"},{"path":"$.data.videos[0].visibility","op":"not_null"},{"path":"$.data.videos[0].published_at","op":"not_null"},{"path":"$.data.channel_handle","op":"not_null"},{"path":"$.data.video_count","op":"not_null"},{"path":"$.data.date_lookup_failed","op":"not_null"}],"empty_is_valid":false,"recipe_version":2}},{"method":"GET","endpoint_name":"get_channel_live_status","description":"Check whether a YouTube channel is currently live streaming. Inspects the channel's streams page for an active broadcast. Returns the live status and, when live, the stream's title, watch URL, current viewer count, and thumbnail. Viewer count is returned as a human-readable string exactly as YouTube renders it (e.g. '1.2K watching').","input_params":{"channel_handle":{"type":"string","required":true,"description":"YouTube channel handle, with or without the leading '@' (e.g. '@SkyNews' or 'SkyNews').","domain":{"kind":"large_enum","sample":["@SkyNews","@ABCNews","@CNN"],"example":"@SkyNews","pattern":"^@?[A-Za-z0-9._-]+$","discovery":"YouTube channel pages","generator":{"type":"sample_pick"},"cardinality":"millions"}}},"return_schema":{"type":"object","fields":{"is_live":"boolean — true if the channel has an active live stream","live_url":"string or null — watch URL of the live stream if active","live_title":"string or null — title of the live stream if active","live_viewers":"string or null — current viewer count as displayed by YouTube","thumbnail_url":"string or null — thumbnail URL of the live stream if active","channel_handle":"string — the normalized channel handle with @ prefix"},"sample":{"data":{"is_live":true,"live_url":"https://www.youtube.com/watch?v=KNB6XNR0Yqc","live_title":"Sky News Live","live_viewers":"420 watching","thumbnail_url":"https://i.ytimg.com/vi/KNB6XNR0Yqc/hqdefault.jpg","channel_handle":"@SkyNews"},"status":"success"}},"initiates_session":false,"price":1,"verification":{"assertions":[{"path":"$.status","op":"equals","value":"success"},{"path":"$.data.channel_handle","op":"not_null"},{"path":"$.data.is_live","op":"not_null"}],"empty_is_valid":false,"recipe_version":1}},{"method":"GET","endpoint_name":"search_channels","description":"Search YouTube for channels matching a topic or niche query, filtered to channel results only. For each channel found, visits the channel's About page to extract the full description and any publicly visible contact email. Returns channel metadata including handle, name, subscriber count, video count, profile picture, and contact email. Each result requires an additional About page fetch, so larger limits take proportionally longer.","input_params":{"page":{"type":"integer","required":false,"description":"Page number for pagination. Each page returns up to limit channels. Increment across calls to get fresh non-duplicate results.","default":1,"domain":{"kind":"open","example":1,"pattern":"^[1-9][0-9]*$","generator":{"type":"static","value":1}}},"limit":{"type":"integer","required":false,"description":"Maximum number of channels to return per call. Each channel requires an additional About page request.","default":20,"domain":{"kind":"open","example":5,"pattern":"^[1-9][0-9]*$","generator":{"type":"static","value":2}}},"niche":{"type":"string","required":true,"description":"Search query or topic to find YouTube channels (e.g. 'fitness', 'personal finance', 'cooking').","domain":{"kind":"open","example":"personal finance","pattern":"^.+$","generator":{"type":"static","value":"personal finance"}}}},"return_schema":{"type":"object","fields":{"page":"integer — current page number","niche":"string — the search query used","channels":"array of channel objects with channel_handle, channel_name, channel_url, description, subscriber_count, video_count, profile_picture_url, contact_email","total_results":"integer — number of channels returned in this response"},"sample":{"data":{"page":1,"niche":"tech reviews","channels":[{"channel_url":"https://www.youtube.com/@SulitTechReviews","description":"Unboxing, impression, review, and tutorial videos!","video_count":"1K videos","channel_name":"Sulit Tech Reviews","contact_email":null,"channel_handle":"@SulitTechReviews","subscriber_count":"810K subscribers","profile_picture_url":"https://yt3.googleusercontent.com/ytc/AIdro_kTP-6cHb_UuYGmKoYZ6iTL8Lhbd-D7BI2pzVU-3S8mJB_K=s176-c-k-c0x00ffffff-no-rj-mo"},{"channel_url":"https://www.youtube.com/@IDTR","description":"In-depth reviews for everything tech.","video_count":"791 videos","channel_name":"In Depth Tech Reviews","contact_email":"user@example.com","channel_handle":"@IDTR","subscriber_count":"201K subscribers","profile_picture_url":"https://yt3.googleusercontent.com/ytc/AIdro_lkDwB9R7r1qQ2N6bXW5d6wuBXcI-0hfqf3aObC7l1UFw=s176-c-k-c0x00ffffff-no-rj-mo"}],"total_results":3},"status":"success"}},"initiates_session":false,"price":1,"verification":{"assertions":[{"path":"$.status","op":"equals","value":"success"},{"path":"$.data.channels","op":"array_min_len","value":1},{"path":"$.data.channels[0].channel_handle","op":"not_null"},{"path":"$.data.channels[0].channel_name","op":"not_null"},{"path":"$.data.channels[0].channel_url","op":"not_null"},{"path":"$.data.niche","op":"not_null"},{"path":"$.data.total_results","op":"not_null"},{"path":"$.data.page","op":"not_null"}],"empty_is_valid":false,"recipe_version":1}},{"method":"GET","endpoint_name":"get_video_transcript","description":"Retrieve the full transcript of a single YouTube video as ordered, timestamped segments. Accepts either a bare 11-character video ID or any YouTube watch, youtu.be, shorts, or embed URL containing one. Two round trips: one to resolve the video's caption tracks and one to fetch the selected track. By default the first manually-created track is returned, falling back to the auto-generated track; the optional language code selects a specific track from available_languages (a request for a language the video does not offer is rejected with an input error naming the available codes). Each segment carries start/end/duration in seconds (numbers), a zero-padded HH:MM:SS timestamp, and the segment text; full_text joins all segments. A video with no captions at all returns success with has_transcript=false and an empty segments array. Auto-generated transcripts can contain overlapping segment windows exactly as YouTube publishes them. A nonexistent or removed video is rejected as an input error.","input_params":{"video":{"type":"string","required":true,"description":"YouTube video ID (11 characters, e.g. from get_channel_videos.videos[*].video_id) or a watch/shorts/youtu.be URL containing one.","domain":{"kind":"derived","example":"ZjXB3jGfKu0","pattern":"^.+$","generator":{"path":"$.data.videos[*].video_id","type":"derived","from_endpoint":"get_channel_videos"}}},"language":{"type":"string","required":false,"description":"Caption language code to select (e.g. 'en', 'de'), matched against available_languages[*].language_code; a base language such as 'en' also matches regional variants like 'en-GB'. Omit to use the default track.","domain":{"kind":"open","example":"de","pattern":"^[A-Za-z]{2,3}(-[A-Za-z0-9]+)?$"}}},"return_schema":{"type":"object","fields":{"url":"string — canonical watch URL of the video","title":"string — video title","language":"string or null — display name of the returned track, e.g. 'English (auto-generated)'","segments":"array of segment objects with start, end, duration (seconds as numbers), timestamp (HH:MM:SS) and text","video_id":"string — the 11-character video ID resolved from the input","full_text":"string — all segment texts joined with spaces","language_code":"string or null — language code of the returned track","segment_count":"integer — number of segments returned","has_transcript":"boolean — false when the video has no caption tracks (segments then empty)","is_auto_generated":"boolean or null — true when the returned track is YouTube's automatic speech recognition","available_languages":"array of caption tracks the video offers, each with language_code, language (display name), is_auto_generated"},"sample":{"data":{"url":"https://www.youtube.com/watch?v=jNQXAC9IVRw","title":"Me at the zoo","language":"German","segments":[{"end":5.067,"text":"Also hier sind wir vor den Elefanten.","start":0.0,"duration":5.067,"timestamp":"00:00:00"},{"end":12.467,"text":"Das Coole an den Typen ist dass sie sehr, sehr, sehr, lange Rüssel haben.","start":5.067,"duration":7.4,"timestamp":"00:00:05"}],"video_id":"jNQXAC9IVRw","full_text":"Also hier sind wir vor den Elefanten. Das Coole an den Typen ist dass sie sehr, sehr, sehr, lange Rüssel haben.","language_code":"de","segment_count":2,"has_transcript":true,"is_auto_generated":false,"available_languages":[{"language":"English","language_code":"en","is_auto_generated":false},{"language":"German","language_code":"de","is_auto_generated":false}]},"status":"success"}},"initiates_session":false,"price":3,"verification":{"assertions":[{"path":"$.status","op":"equals","value":"success"},{"path":"$.data.video_id","op":"not_null"},{"path":"$.data.has_transcript","op":"not_null"},{"path":"$.data.segments","op":"array_min_len","value":1},{"path":"$.data.segments[0].timestamp","op":"not_null"},{"path":"$.data.segments[0].text","op":"not_null"},{"path":"$.data.segments[0].start","op":"not_null"}],"empty_is_valid":false,"recipe_version":1}},{"method":"GET","endpoint_name":"get_channel_playlist","description":"List the public playlists shown on a YouTube channel's Playlists tab. One entry per playlist with its playlist_id, title, playlist URL, cover thumbnail URL, the item count exactly as YouTube renders it (e.g. '3 videos' or '94 episodes' for podcast-type playlists), the last-updated label when YouTube shows one ('Updated 5 days ago'; null when the channel page shows no update label, which is common for older playlists) and the playlist type ('playlist' or 'podcast'). The channel's grid is paginated automatically until the requested limit is reached or the channel has no more playlists, so playlist_count may be smaller than limit. A nonexistent channel is rejected as an input error. Results follow the channel's own ordering.","input_params":{"limit":{"type":"integer","required":false,"description":"Maximum number of playlists to return. The channel's playlist grid is paginated automatically to fulfill the limit.","default":50,"domain":{"kind":"open","example":10,"pattern":"^[1-9][0-9]*$"}},"channel_handle":{"type":"string","required":true,"description":"YouTube channel handle, with or without the leading '@' (e.g. '@SuccessionBio' or 'SuccessionBio').","domain":{"kind":"large_enum","sample":["@SuccessionBio","@Google","@mkbhd"],"example":"@SuccessionBio","pattern":"^@?[A-Za-z0-9._-]+$","discovery":"YouTube channel pages","generator":{"type":"sample_pick"},"cardinality":"millions"}}},"return_schema":{"type":"object","fields":{"playlists":"array of playlist objects with playlist_id (string, accepted by get_channel_playlist_videos), title, url, thumbnail (string or null), video_count (string as rendered, e.g. '3 videos'), last_updated (string or null, e.g. 'Updated 5 days ago'), type ('playlist' | 'podcast')","channel_handle":"string — the normalized channel handle with @ prefix","playlist_count":"integer — number of playlists returned in this response"},"sample":{"data":{"playlists":[{"url":"https://www.youtube.com/playlist?list=PLNpnig-8yQuzDto9ALExMtzprZYDMfWqZ","type":"playlist","title":"Scientific Sales Webinar Series","thumbnail":"https://i.ytimg.com/vi/2fhXl-81aWw/hqdefault.jpg?sqp=-oaymwEXCOADEI4CSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLBWoPm_Rp-5qjxlyc5OSIlAjefN1A","playlist_id":"PLNpnig-8yQuzDto9ALExMtzprZYDMfWqZ","video_count":"3 videos","last_updated":null},{"url":"https://www.youtube.com/playlist?list=PLNpnig-8yQuwbM5AueF_cDRub_GQW5FB2","type":"podcast","title":"SalesDNA: Decoding life science sales","thumbnail":"https://i.ytimg.com/pl_c/PLNpnig-8yQuwbM5AueF_cDRub_GQW5FB2/studio_square_thumbnail.jpg?sqp=COTh-dQG-oaymwEICNAFENAFSFqi85f_AwYIwL3VrAY=&rs=AOn4CLA-1tN2EpnSPVg97cXU9qWTRP06Gg","playlist_id":"PLNpnig-8yQuwbM5AueF_cDRub_GQW5FB2","video_count":"94 episodes","last_updated":null}],"channel_handle":"@SuccessionBio","playlist_count":2},"status":"success"}},"initiates_session":false,"price":3,"verification":{"assertions":[{"path":"$.status","op":"equals","value":"success"},{"path":"$.data.playlists","op":"array_min_len","value":1},{"path":"$.data.playlists[0].playlist_id","op":"not_null"},{"path":"$.data.playlists[0].title","op":"not_null"},{"path":"$.data.playlists[0].url","op":"not_null"},{"path":"$.data.playlists[0].video_count","op":"not_null"},{"path":"$.data.channel_handle","op":"not_null"},{"path":"$.data.playlist_count","op":"not_null"}],"empty_is_valid":false,"recipe_version":1}},{"method":"GET","endpoint_name":"get_channel_playlist_videos","description":"List the videos of a YouTube playlist in playlist order. Accepts a playlist ID (as emitted by get_channel_playlist.playlists[*].playlist_id) or any YouTube URL containing list=<id>. Returns the playlist title, the total item count and total view count exactly as YouTube renders them in the playlist header (strings such as '183 videos', '58 views'), and one object per video with its 1-based order position, video_id, title, watch URL (scoped to the playlist), highest-resolution thumbnail URL, duration as rendered ('56:25', '1:03:49'), uploader channel name, view count and relative publish date. The playlist is paginated automatically (100 videos per page) until limit is reached; has_more is true when the playlist holds more videos than were returned. Podcast-type playlists are read the same way. A nonexistent or private playlist is rejected as an input error.","input_params":{"limit":{"type":"integer","required":false,"description":"Maximum number of videos to return, counted from the start of the playlist. Pages of 100 are fetched automatically to fulfill the limit.","default":100,"domain":{"kind":"open","example":50,"pattern":"^[1-9][0-9]*$"}},"playlist":{"type":"string","required":true,"description":"YouTube playlist ID (e.g. from get_channel_playlist.playlists[*].playlist_id) or a playlist/watch URL containing list=<id>.","domain":{"kind":"derived","example":"PLNpnig-8yQuzDto9ALExMtzprZYDMfWqZ","pattern":"^.+$","generator":{"path":"$.data.playlists[*].playlist_id","type":"derived","from_endpoint":"get_channel_playlist"}}}},"return_schema":{"type":"object","fields":{"url":"string — canonical playlist URL","title":"string — playlist title","videos":"array of video objects with order (integer, 1-based position), video_id, title, url (watch URL with list parameter), thumbnail (string or null), duration (string as rendered, or null), channel_name, views (string or null), published (string or null)","has_more":"boolean — true when the playlist contains more videos than were returned under limit","playlist_id":"string — the playlist ID resolved from the input","total_views":"string or null — total playlist views as rendered, e.g. '58 views'","video_count":"integer — number of videos returned in this response","total_videos":"string or null — total item count as rendered in the playlist header, e.g. '3 videos'"},"sample":{"data":{"url":"https://www.youtube.com/playlist?list=PLNpnig-8yQuzDto9ALExMtzprZYDMfWqZ","title":"Scientific Sales Webinar Series","videos":[{"url":"https://www.youtube.com/watch?v=2fhXl-81aWw&list=PLNpnig-8yQuzDto9ALExMtzprZYDMfWqZ","order":1,"title":"Why Scientific Sales?","views":"125 views","duration":"56:25","video_id":"2fhXl-81aWw","published":"2 years ago","thumbnail":"https://i.ytimg.com/vi/2fhXl-81aWw/hqdefault.jpg?sqp=-oaymwErCNACELwBSFryq4qpAx0IARUAAIhCGAHYAQHiAQoIGBACGAY4AUABuALzGA==&rs=AOn4CLAvgEUm9O6sX4dR2rYmWQ_LOYyKgg","channel_name":"Succession Bio"},{"url":"https://www.youtube.com/watch?v=T1OAGoRg_rk&list=PLNpnig-8yQuzDto9ALExMtzprZYDMfWqZ","order":2,"title":"Sales Skills 101","views":"123 views","duration":"1:03:49","video_id":"T1OAGoRg_rk","published":"2 years ago","thumbnail":"https://i.ytimg.com/vi/T1OAGoRg_rk/hqdefault.jpg?sqp=-oaymwErCNACELwBSFryq4qpAx0IARUAAIhCGAHYAQHiAQoIGBACGAY4AUABuALzGA==&rs=AOn4CLAayjUXk_VIxhF-3tB4NlKXdige1A","channel_name":"Succession Bio"},{"url":"https://www.youtube.com/watch?v=0Uj95bLcH9g&list=PLNpnig-8yQuzDto9ALExMtzprZYDMfWqZ","order":3,"title":"Landing Your Ideal Sales Role","views":"56 views","duration":"58:36","video_id":"0Uj95bLcH9g","published":"2 years ago","thumbnail":"https://i.ytimg.com/vi/0Uj95bLcH9g/hqdefault.jpg?sqp=-oaymwErCNACELwBSFryq4qpAx0IARUAAIhCGAHYAQHiAQoIGBACGAY4AUABuALzGA==&rs=AOn4CLCjh-3E-lWZrc75MKNeoJPGbj59xQ","channel_name":"Succession Bio"}],"has_more":false,"playlist_id":"PLNpnig-8yQuzDto9ALExMtzprZYDMfWqZ","total_views":"58 views","video_count":3,"total_videos":"3 videos"},"status":"success"}},"initiates_session":false,"price":10,"verification":{"assertions":[{"path":"$.status","op":"equals","value":"success"},{"path":"$.data.playlist_id","op":"not_null"},{"path":"$.data.title","op":"not_null"},{"path":"$.data.videos","op":"array_min_len","value":1},{"path":"$.data.videos[0].video_id","op":"not_null"},{"path":"$.data.videos[0].title","op":"not_null"},{"path":"$.data.videos[0].url","op":"not_null"},{"path":"$.data.videos[0].order","op":"not_null"},{"path":"$.data.video_count","op":"not_null"}],"empty_is_valid":false,"recipe_version":1}},{"method":"GET","endpoint_name":"get_video_topics","description":"Retrieve what a single YouTube video is about: its chapters (the 'key moments' topic list YouTube renders from the creator's timestamps, in time order), the creator's tag keywords, hashtags found in the description, the YouTube category label, an optional series label (the playlist/series line shown above the title, when present), the full description, and basic metadata (channel name, handle and ID, absolute publish timestamp with YouTube's own offset, duration in seconds, and view and like counts as plain numeric strings exactly as the page carries them). One round trip to the video's watch page. Accepts a bare 11-character video ID or any YouTube watch, youtu.be, shorts or embed URL containing one. chapters and keywords are empty arrays when the video defines none (many videos have no tags visible to the public and no chapters); hashtags is empty when the description contains none. A nonexistent or removed video is rejected as an input error.","input_params":{"video":{"type":"string","required":true,"description":"YouTube video ID (11 characters, e.g. from get_channel_videos.videos[*].video_id) or a watch/shorts/youtu.be URL containing one.","domain":{"kind":"derived","example":"nRl-7Yhmbog","pattern":"^.+$","generator":{"path":"$.data.videos[*].video_id","type":"derived","from_endpoint":"get_channel_videos"}}}},"return_schema":{"type":"object","fields":{"url":"string — canonical watch URL of the video","likes":"string or null — like count as a plain numeric string","title":"string — video title","views":"string or null — view count as a plain numeric string","series":"string or null — series/playlist label shown above the video title, when YouTube shows one","category":"string — YouTube category label, e.g. 'Science & Technology'","chapters":"array of chapter objects in time order with order (integer, 1-based), title, start_seconds (integer), timestamp (as rendered, e.g. '2:09') and url (watch URL seeking to the chapter start)","hashtags":"array of strings — distinct hashtags found in the description, without the leading '#'","keywords":"array of strings — the creator's tag keywords (empty when none are public)","video_id":"string — the 11-character video ID resolved from the input","channel_id":"string — uploading channel's UC… ID","description":"string — full video description","channel_name":"string — uploading channel's display name","published_at":"string or null — absolute ISO 8601 publish timestamp with offset","chapter_count":"integer — number of chapters","keyword_count":"integer — number of tag keywords","channel_handle":"string or null — uploading channel's handle with @ prefix (accepted by get_channel_videos)","duration_seconds":"integer or null — video length in seconds"},"sample":{"data":{"url":"https://www.youtube.com/watch?v=xD84xGdrj6k","likes":"0","title":"Going AI-first as a life science commercial team | Applied AI for Life Science GTM","views":"21","series":null,"category":"Science & Technology","chapters":[{"url":"https://www.youtube.com/watch?v=xD84xGdrj6k&t=0s","order":1,"title":"Welcome and technical setup","timestamp":"0:00","start_seconds":0},{"url":"https://www.youtube.com/watch?v=xD84xGdrj6k&t=181s","order":2,"title":"Workshop objectives","timestamp":"3:01","start_seconds":181}],"hashtags":[],"keywords":["AI agents","AI sales tools","B2B sales life science","biotech sales","cold email biotech","commercial teams","life science GTM","life science outbound","life science sales","pharma sales","sales enablement","selling to scientists"],"video_id":"xD84xGdrj6k","channel_id":"UClp4a5N9bb-CaVXnK3JT2Yw","description":"How can a life science commercial team move from individual AI chats to shared workflows? ...\n\nChapters\n0:00 Welcome and technical setup\n3:01 Workshop objectives","channel_name":"Succession Bio","published_at":"2026-10-04T08:39:17-07:00","chapter_count":2,"keyword_count":12,"channel_handle":"@SuccessionBio","duration_seconds":3228},"status":"success"}},"initiates_session":false,"price":5,"verification":{"assertions":[{"path":"$.status","op":"equals","value":"success"},{"path":"$.data.video_id","op":"not_null"},{"path":"$.data.title","op":"not_null"},{"path":"$.data.category","op":"not_null"},{"path":"$.data.chapters","op":"type_is","value":"array"},{"path":"$.data.keywords","op":"type_is","value":"array"},{"path":"$.data.chapter_count","op":"not_null"},{"path":"$.data.description","op":"not_null"},{"path":"$.data.channel_handle","op":"not_null"}],"empty_is_valid":false,"recipe_version":1}},{"method":"GET","endpoint_name":"search_videos","description":"Search YouTube for videos matching a free-text query (e.g. 'Latest news on Apple'), filtered to video results only, in YouTube's own relevance order. Returns one object per video with video_id, title, watch URL, uploader channel name, handle and ID, view count and relative publish label exactly as YouTube renders them (e.g. '1,730,702 views', '9h ago'; live streams show 'N watching'), duration as rendered, highest-resolution thumbnail URL and the description snippet shown in results. YouTube serves roughly 20 results per page; the first page costs one request and each further page one more, fetched automatically until limit is reached. When more results exist, has_more is true and next_cursor is an opaque string: pass it back unchanged as cursor with the same query to continue where this call stopped (omit cursor to start from the first result). Search ranking is computed live by YouTube and can shift slightly between calls, so a continued walk may occasionally repeat or skip a video. estimated_results is YouTube's own rough total-match estimate, not the number reachable. A query with no matches returns success with an empty videos array; an empty query, out-of-range limit or malformed cursor is rejected as an input error.","input_params":{"limit":{"type":"integer","required":false,"description":"Maximum number of videos to return in this call, 1 to 100. Result pages are fetched automatically to fulfill it.","default":20,"domain":{"kind":"open","example":10,"pattern":"^[1-9][0-9]*$","generator":{"type":"static","value":5}}},"query":{"type":"string","required":true,"description":"Free-text search query, e.g. 'Latest news on Apple'.","domain":{"kind":"open","example":"Latest news on Apple","pattern":"^.+$","generator":{"type":"static","value":"Latest news on Apple"}}},"cursor":{"type":"string","required":false,"description":"Opaque continuation from a previous search_videos response's next_cursor, used with the same query.","domain":{"kind":"open","example":"<next_cursor>","pattern":"^.+$"}}},"return_schema":{"type":"object","fields":{"query":"string — the search query used","videos":"array of video objects with video_id, title, url, channel_name, channel_handle (string or null, '@' form accepted by get_channel_videos), channel_id, views (string or null, as rendered), published (string or null, relative label as rendered), duration (string or null), thumbnail (string or null), description_snippet (string or null)","has_more":"boolean — true when more results can be fetched with next_cursor","next_cursor":"string or null — opaque continuation to pass as cursor; null when results are exhausted","video_count":"integer — number of videos returned in this response","estimated_results":"integer or null — YouTube's approximate total match count"},"sample":{"data":{"query":"Latest news on Apple","videos":[{"url":"https://www.youtube.com/watch?v=x5h1JykMcFU","title":"Introducing the new iPad mini with OLED display","views":"1,730,702 views","duration":"1:21","video_id":"x5h1JykMcFU","published":"9h ago","thumbnail":"https://i.ytimg.com/vi/x5h1JykMcFU/hq720.jpg?sqp=-oaymwEnCNAFEJQDSFryq4qpAxkIARUAAIhCGAHYAQHiAQoIGBACGAY4AUAB&rs=AOn4CLDWuWzBLH4REY6UDTJ5ZVJWxbbVhg","channel_id":"UCE_M8A5yxnLfW0KghEeajjw","channel_name":"Apple","channel_handle":"@Apple","description_snippet":"Introducing the all-new thinner and lighter iPad mini. Featuring a stunning OLED display for deeper blacks and brilliant brights, ..."}],"has_more":true,"next_cursor":"eyJ0IjogbnVsbCwgIm8iOiA1LCAicSI6ICJMYXRlc3QgbmV3cyBvbiBBcHBsZSJ9","video_count":1,"estimated_results":12026138},"status":"success"}},"initiates_session":false,"price":5,"verification":{"assertions":[{"path":"$.status","op":"equals","value":"success"},{"path":"$.data.videos","op":"array_min_len","value":1},{"path":"$.data.videos[0].video_id","op":"not_null"},{"path":"$.data.videos[0].title","op":"not_null"},{"path":"$.data.videos[0].url","op":"not_null"},{"path":"$.data.videos[0].channel_name","op":"not_null"},{"path":"$.data.query","op":"not_null"},{"path":"$.data.video_count","op":"not_null"},{"path":"$.data.has_more","op":"type_is","value":"boolean"}],"empty_is_valid":false,"recipe_version":1}}],"sample_inputs":{"search_videos":{"limit":"5","query":"Latest news on Apple"},"search_channels":{"page":"1","limit":"2","niche":"personal finance"},"get_video_topics":{"video":"2hkXRoqPkXU"},"get_channel_videos":{"limit":"5","sort_by":"popular","channel_handle":"@SuccessionBio"},"get_channel_playlist":{"channel_handle":"@SuccessionBio"},"get_video_transcript":{"video":"2hkXRoqPkXU"},"get_channel_live_status":{"channel_handle":"@SkyNews"},"get_channel_playlist_videos":{"playlist":"PLNpnig-8yQuzDto9ALExMtzprZYDMfWqZ"}},"prefill_inputs":{"get_channel_videos":{"limit":"5","sort_by":"popular","channel_handle":"@SuccessionBio"},"get_channel_live_status":{"channel_handle":"@SkyNews"},"search_channels":{"page":"1","limit":"2","niche":"personal finance"},"get_channel_playlist":{"channel_handle":"@SuccessionBio"},"search_videos":{"limit":"5","query":"Latest news on Apple"}},"last_verified_at":"2026-10-31T13:14:52.241617+00:00","endpoint_health":[{"endpoint_name":"get_channel_playlist_videos","status":"healthy","last_checked_at":"2026-10-30T08:01:52.956617+00:00","last_verified_at":"2026-10-30T08:01:52.956617+00:00","recent_runs":[{"at":"2026-10-30T08:01:52.956617+00:00","status":"healthy"},{"at":"2026-10-26T23:04:52.913863+00:00","status":"healthy"},{"at":"2026-10-23T19:00:25.199108+00:00","status":"healthy"},{"at":"2026-10-23T17:03:52.925798+00:00","status":"healthy"},{"at":"2026-10-20T19:02:26.063228+00:00","status":"healthy"}]},{"endpoint_name":"get_video_transcript","status":"healthy","last_checked_at":"2026-10-31T13:14:52.241617+00:00","last_verified_at":"2026-10-31T13:14:52.241617+00:00","recent_runs":[{"at":"2026-10-30T08:01:52.956617+00:00","status":"healthy"},{"at":"2026-10-26T23:04:52.913863+00:00","status":"healthy"},{"at":"2026-10-23T19:00:25.199108+00:00","status":"healthy"},{"at":"2026-10-23T17:03:52.925798+00:00","status":"blocked"},{"at":"2026-10-20T19:02:26.063228+00:00","status":"healthy"}]},{"endpoint_name":"get_video_topics","status":"healthy","last_checked_at":"2026-10-30T08:01:52.956617+00:00","last_verified_at":"2026-10-30T08:01:52.956617+00:00","recent_runs":[{"at":"2026-10-30T08:01:52.956617+00:00","status":"healthy"},{"at":"2026-10-26T23:04:52.913863+00:00","status":"healthy"},{"at":"2026-10-23T19:00:25.199108+00:00","status":"healthy"},{"at":"2026-10-23T17:03:52.925798+00:00","status":"blocked"}]},{"endpoint_name":"search_videos","status":"healthy","last_checked_at":"2026-10-30T08:01:52.956617+00:00","last_verified_at":"2026-10-30T08:01:52.956617+00:00","recent_runs":[{"at":"2026-10-30T08:01:52.956617+00:00","status":"healthy"},{"at":"2026-10-26T23:04:52.913863+00:00","status":"healthy"}]},{"endpoint_name":"get_channel_videos","status":"healthy","last_checked_at":"2026-10-30T08:01:52.956617+00:00","last_verified_at":"2026-10-30T08:01:52.956617+00:00","recent_runs":[{"at":"2026-10-30T08:01:52.956617+00:00","status":"healthy"},{"at":"2026-10-26T23:04:52.913863+00:00","status":"healthy"},{"at":"2026-10-23T19:00:25.199108+00:00","status":"healthy"},{"at":"2026-10-23T17:03:52.925798+00:00","status":"healthy"},{"at":"2026-10-23T17:03:52.925798+00:00","status":"ambiguous"}]},{"endpoint_name":"get_channel_playlist","status":"healthy","last_checked_at":"2026-10-30T08:01:52.956617+00:00","last_verified_at":"2026-10-30T08:01:52.956617+00:00","recent_runs":[{"at":"2026-10-30T08:01:52.956617+00:00","status":"healthy"},{"at":"2026-10-26T23:04:52.913863+00:00","status":"healthy"},{"at":"2026-10-23T19:00:25.199108+00:00","status":"healthy"},{"at":"2026-10-23T17:03:52.925798+00:00","status":"healthy"},{"at":"2026-10-20T19:02:26.063228+00:00","status":"healthy"}]},{"endpoint_name":"get_channel_live_status","status":"healthy","last_checked_at":"2026-10-30T08:01:52.956617+00:00","last_verified_at":"2026-10-30T08:01:52.956617+00:00","recent_runs":[{"at":"2026-10-30T08:01:52.956617+00:00","status":"healthy"},{"at":"2026-10-26T23:04:52.913863+00:00","status":"healthy"},{"at":"2026-10-23T19:00:25.199108+00:00","status":"healthy"},{"at":"2026-10-23T17:03:52.925798+00:00","status":"healthy"},{"at":"2026-10-20T19:02:26.063228+00:00","status":"healthy"}]},{"endpoint_name":"search_channels","status":"healthy","last_checked_at":"2026-10-30T08:01:52.956617+00:00","last_verified_at":"2026-10-30T08:01:52.956617+00:00","recent_runs":[{"at":"2026-10-30T08:01:52.956617+00:00","status":"healthy"},{"at":"2026-10-26T23:04:52.913863+00:00","status":"healthy"},{"at":"2026-10-23T19:00:25.199108+00:00","status":"healthy"},{"at":"2026-10-23T17:03:52.925798+00:00","status":"healthy"},{"at":"2026-10-20T19:02:26.063228+00:00","status":"healthy"}]}],"sdk_usage_example":null,"sdk_delivery_state":"absent","summary":"Extract video URLs and metadata from a YouTube channel's videos page (with sorting and pagination), list a channel's playlists and the ordered videos inside a playlist, check live status, search channels by niche, search videos by query, retrieve timestamped video transcripts, and get a video's topics (chapters, tags, hashtags, category, description).","updated_at":"2026-10-26T22:34:29.466205+00:00","user_variants":[],"latest_version":14,"user_status":null,"user_scraper_id":null,"contributes_to_marketplace":true,"pinned_version":null,"seo_content":{"faqs":[{"a":"Yes. Google provides the YouTube Data API v3 at https://developers.google.com/youtube/v3. It covers many overlapping use cases but enforces a quota unit system that restricts daily usage, does not expose raw transcript segments, and requires OAuth for some resources.","q":"Does YouTube have an official developer API?"},{"a":"The response sets has_transcript to false, returns an empty segments array, and still includes the video's url and title. The language and language_code fields will be null. Auto-generated tracks are flagged separately via is_auto_generated.","q":"What does get_video_transcript return when a video has no captions?"},{"a":"It returns public and members-only videos as visible on the channel's public videos page. Members-only videos appear with a null views field and a visibility label. Unlisted videos are not surfaced because they do not appear on the public videos tab.","q":"Does get_channel_videos return members-only or unlisted videos?"},{"a":"Not currently. get_channel_videos returns videos from the channel's main videos page; Shorts published to the Shorts tab are not broken out as a separate collection. You can fork this API on Parse and revise it to add an endpoint targeting the channel's Shorts tab.","q":"Can I retrieve YouTube Shorts separately from regular videos?"},{"a":"Yes. Each channel object in the channels array includes subscriber_count, video_count, profile_picture, and description from the About page. contact_email is included when the channel has one publicly listed; it will be null otherwise.","q":"Does search_channels return subscriber counts and profile pictures?"}],"keywords":["youtube channel videos API","youtube transcript API","youtube search API","youtube playlist API","youtube live stream status API","youtube video chapters API","youtube channel scraper API","youtube video metadata API","youtube captions API","youtube keyword tags API","youtube channel contact email","youtube video timestamped transcript","youtube niche channel search","youtube published date filter API"],"use_cases":["Build a content calendar by pulling a channel's video list with absolute publish timestamps using get_channel_videos and the published_after filter.","Generate subtitles or searchable transcripts for video archives using get_video_transcript with language selection and segment-level timestamps.","Monitor when a news or sports channel goes live and capture the stream title and viewer count with get_channel_live_status.","Identify creator keyword strategy and content structure by extracting chapters, tags, and hashtags per video with get_video_topics.","Find niche YouTube channels with contact emails for outreach campaigns using search_channels with the niche parameter.","Audit a channel's playlist structure and episode ordering for podcast or series analysis with get_channel_playlist and get_channel_playlist_videos.","Run video research across YouTube by keyword and paginate through results with search_videos and next_cursor."],"meta_title":"YouTube API – Channel Videos, Transcripts & Search","generated_at":"2026-10-26T22:34:52.383737+00:00","lead_paragraph":"This API covers 8 endpoints for extracting public data from YouTube, including channel videos with absolute publish timestamps, full timestamped transcripts via get_video_transcript, playlist listings, live stream status, video topic metadata (chapters, tags, hashtags, category), and keyword-driven channel and video search. Every video endpoint returns fields like video_id, url, views, and thumbnail_url, ready to pipe into downstream workflows.","schema_version":2,"meta_description":"Extract YouTube channel videos, playlists, transcripts, live status, and video topics via 8 endpoints. Filter by date, sort order, language, and more.","primary_category":"streaming_video","long_description_md":"## Channel Videos and Playlists\n\n`get_channel_videos` accepts a `channel_handle` (with or without `@`) and returns an array of video objects — each with `video_id`, `title`, `url`, `views`, `published_at` (absolute ISO timestamp), and the highest-resolution `thumbnail_url` available. The `sort_by` parameter accepts latest, popular, or oldest ordering, and `published_after` / `published_before` filter the results to a date range. The `date_lookup_failed` counter tells you how many videos could not have their absolute timestamp resolved. `get_channel_playlist` lists a channel's public playlists with `playlist_id`, item count as rendered (e.g. `'94 episodes'`), and last-updated label; `get_channel_playlist_videos` then returns the ordered video list inside any playlist, including 1-based `order` position, `thumbnail`, `duration`, and aggregated `total_views`.\n\n## Transcripts and Video Topics\n\n`get_video_transcript` accepts either an 11-character video ID or any YouTube watch, youtu.be, shorts, or embed URL. It returns ordered `segments` with `start`, `end`, `duration`, `timestamp` (HH:MM:SS), and `text`, plus a `full_text` string of all segments joined. The `language` parameter selects a caption track by code (e.g. `'en'`, `'de'`); the response includes `is_auto_generated` to distinguish ASR tracks from manual captions. `get_video_topics` returns `chapters` (key moments with `start_seconds` and `timestamp`), `keywords`, `hashtags`, `category`, `likes`, `views`, and an optional `series` label when YouTube shows a playlist-style series above the title.\n\n## Search and Live Status\n\n`search_videos` accepts a free-text `query` and returns up to 100 video results per call, each with `channel_name`, `channel_handle`, `view_count`, `duration`, and relative publish label. Pagination is handled via `next_cursor` — pass it back as `cursor` on the next call with the same `query`. `search_channels` searches by `niche` and supplements each channel result with data from the channel's About page: full `description` and publicly listed `contact_email`. `get_channel_live_status` checks whether a channel is actively broadcasting, returning `is_live`, `live_title`, `live_url`, and `live_viewers` as a human-readable string (matching what YouTube displays).\n\n## Input Flexibility and Pagination\n\nAll endpoints that accept a video identifier (`get_video_transcript`, `get_video_topics`) resolve bare video IDs as well as any standard YouTube URL format. Endpoints with a `limit` parameter paginate automatically — you receive a flat result up to your limit without managing continuation tokens manually, except for `search_videos` which exposes `next_cursor` explicitly for stateful search sessions.","generated_with_model":"global.anthropic.claude-sonnet-4-6","secondary_categories":["social_media","news_media"]},"primary_category":"streaming_video","secondary_categories":["social_media","news_media"],"access_requirements":[]}