YouTube Playlist Scraper avatar

YouTube Playlist Scraper

Pricing

from $0.50 / 1,000 playlist videos

Go to Apify Store
YouTube Playlist Scraper

YouTube Playlist Scraper

List every video in a YouTube playlist by URL or ID: title, channel, duration, position and thumbnail, plus the playlist title, owner, video count and view count. Handles playlists of any size. No API key, no quota.

Pricing

from $0.50 / 1,000 playlist videos

Rating

0.0

(0)

Developer

Tarik Cerkezovic

Tarik Cerkezovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

Every video in a YouTube playlist, from a playlist URL or ID, as one item per video: title, channel, duration, position and thumbnail, with the playlist's title, owner, description, video count, view count and last-updated date repeated on each item. Works for playlists of any size (hundreds of videos page through automatically), for podcasts, courses, albums, uploads playlists (UU...) and unlisted playlists you have the link to.

No YouTube API key, no quota, no login. Built for archiving course or podcast playlists, feeding video IDs into transcript or details actors, and tracking playlist changes over time.

What you get

FieldDescription
videoId, url, titleThe video
position, indexPosition among returned videos, and YouTube's own index in the playlist
channelName, channelId, channelUrlWho published the video
durationSeconds, durationText, thumbnailUrl, isAvailableLength, thumbnail, and whether the video is still playable
playlistId, playlistUrl, playlistTitle, playlistDescription, playlistTypeThe playlist
ownerName, ownerChannelId, ownerUrlThe playlist owner
videoCount, playlistViewCount, lastUpdatedText, isUnlistedPlaylist stats
error, errorMessageOnly on playlist-level failures

Sample output

{
"videoId": "ZAzWPE9CItg",
"url": "https://www.youtube.com/watch?v=ZAzWPE9CItg",
"title": "AI Crisis in Math: Navier-Stokes, Riemann Hypothesis & Complexity Theory | Lex Fridman Podcast #503",
"position": 1,
"index": 1,
"channelName": "Lex Fridman",
"channelId": "UCSHZKyawb77ixDdsGog4iWA",
"channelUrl": "https://www.youtube.com/@lexfridman",
"durationSeconds": 12867,
"durationText": "3:34:27",
"thumbnailUrl": "https://i.ytimg.com/vi/ZAzWPE9CItg/hqdefault.jpg",
"isAvailable": true,
"playlistId": "PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4",
"playlistUrl": "https://www.youtube.com/playlist?list=PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4",
"playlistTitle": "Lex Fridman Podcast",
"playlistType": "Podcast",
"ownerName": "Lex Fridman",
"videoCount": 448,
"playlistViewCount": 5049988,
"lastUpdatedText": "Last updated on Oct 26, 2026",
"input": "PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4",
"fetchedAt": "2026-11-05T17:20:00.000Z"
}

Input

FieldTypeDefaultWhat it does
playlistUrlsarray of stringsrequiredPlaylist URLs, watch URLs with a list parameter, or bare playlist IDs.
maxVideosPerPlaylistinteger0 (all)Cap per playlist.
includeUnavailablebooleanfalseReturn entries YouTube still lists but marks as private or deleted, with isAvailable false. Entries YouTube hides entirely cannot be returned.
maxConcurrencyinteger3Playlists in parallel.
proxyConfigurationobjectApify datacenter proxyProxy for all requests.
residentialFallbackbooleantrueRetry a blocked playlist through residential proxies, only on a detected block.

Minimal input:

{ "playlistUrls": ["https://www.youtube.com/playlist?list=PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4"] }

Errors

errorMeaningCharged?
INVALID_INPUTNot a playlist URL or IDno
PLAYLIST_NOT_FOUNDThe playlist does not exist or is privateno
NO_VIDEOSThe playlist has no available videosno
BLOCKEDYouTube refused the request from every proxy triedno
FETCH_FAILEDNetwork or parsing failureno

Pricing

Pay per event: a small fixed amount per video item, plus Apify platform usage. Error items are free. YouTube serves 200 playlist entries per request, so even a 1,000-video playlist is a handful of requests.

Notes

  • View counts and publish dates per video are not part of YouTube's playlist listing. Pass the video IDs to the YouTube Video Details Scraper from the same author to get them.
  • Mixes (playlist IDs starting with RD) are endless by design; the actor returns their first page only.
  • index follows YouTube's numbering, so it keeps counting over hidden private or deleted entries; position counts only what was returned.

Using it from code

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('serentity/youtube-playlist-scraper').call({ playlistUrls: ['PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((v) => v.videoId));

The data is what YouTube shows to any visitor of a public or unlisted playlist page. No login, no personal data beyond public channel names. Use it in line with YouTube's terms of service.