YouTube Playlist Scraper: Videos & Metadata avatar

YouTube Playlist Scraper: Videos & Metadata

Pricing

from $0.22 / 1,000 videos

Go to Apify Store
YouTube Playlist Scraper: Videos & Metadata

YouTube Playlist Scraper: Videos & Metadata

YouTube playlist scraper: paste playlist links or search words, get every video with its true position, views, exact likes, comments, publish time, duration, tags and channel, plus the playlist's title, owner, counts and last update. Deleted videos are listed, never charged. No login.

Pricing

from $0.22 / 1,000 videos

Rating

0.0

(0)

Developer

DeepMine

DeepMine

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

YouTube playlist scraper: paste playlist links (or find playlists by search words or a channel link) and get every video in playlist order with its true position, exact views, likes and comment counts, exact publish time, duration, description, tags and channel stats, plus the playlist's own title, owner, video count, views and last update on every row. Deleted and private entries keep their places and are listed with YouTube's reason, never charged. No login, no YouTube API key, no browser.

#🎬 Video📺 Channel👀 Views❤️ Likes💬 Comments📅 Published⏱️ Length
1Crystal Castles - Alice Practice (Music Video)xxzxcuzx me!17,924716352022-11-1200:02:19
2This video is private (listed in the run summary, not charged)
3Crystal Castles - Crimewave (Official Video)Gastón Ossandón576,99212,3674882011-07-1600:02:53
4Crystal Castles - Crimewave (2007 HD Music Video)xxzxcuzx me!2,57914692024-07-1000:02:50
5Crystal Castles - "Magic Spells" - Official VideoCrystal Castles official876,2628,8526292008-03-1200:00:55
6Air War - Crystal Castles (Official Music Video)WaxTrax !13,308522492022-08-1800:02:28
7This video is private (listed in the run summary, not charged)
8Crystal Castles "COURTSHIP DATING" OfficialCrystal Castles official3,384,04548,8151,2312009-10-1800:02:36
9Vanished - Crystal Castles Music Video (Alternate)cc2,1288462025-01-2500:02:42
10This video is private (listed in the run summary, not charged)
11Crystal Castles "TELL ME WHAT TO SWALLOW" (Home Footage Video)Untitled Profile31,7621,705502017-12-1400:02:13
12Crystal Castles - CelesticaCrystal Castles official13,802,606hidden4,1112010-07-2000:03:28

$0.29 per 1,000 videos on Starter ($0.30 Free, $0.25 Scale, $0.22 Business). The prefilled run (50 videos of one playlist) costs about $0.0145. Nothing per run, nothing per playlist or search, and nothing for a deleted or private entry.

PlanPrice per 1,000 videos
Free$0.30
Starter$0.29
Scale$0.25
Business$0.22

What you type

InputExampleYou get
🔗 Playlist links or IDshttps://www.youtube.com/playlist?list=PLsyeobzWxl7omDoEYrrf3oXvXxa6MPgek, https://www.youtube.com/watch?v=kXYiU_JCYtU&list=PL6Lt9p1lIRZ311J9ZHuzkR5A3xesae2pk, PL..., UU... (a channel's uploads), OLAK5uy_... (an album)Every video of each playlist, in playlist order
📺 Channel linkshttps://www.youtube.com/@FireshipThat channel's playlists (its Playlists tab), each read like a link
🔍 Search wordspython tutorialThe playlists, courses and podcasts YouTube's playlist search finds, each read like a link
Max videos per playlist50The first 50 available videos of each playlist (empty = all)
Max playlists per search or channel10 (default)How many playlists a search or channel link reads
Full video detailson (default)Off: rows from the playlist pages only (position, title, duration, rounded views, relative age, channel), several times faster on huge playlists, same price

Playlist pages, watch links with &list=, music.youtube.com and mobile links all work, as do podcasts and courses. Mixes (RD...) and personal lists (Watch later, Liked videos) aren't public, so they're skipped with a note. A video that is in several of your playlists is saved and charged once, with the first playlist that lists it; the run summary says where else it appears.

Positions and unavailable entries

position is YouTube's own numbering of the playlist (1 = first). Playlists are read the way YouTube's "Show unavailable videos" option shows them, so a deleted or private entry keeps its place and the videos after it keep theirs. Without that option YouTube renumbers the list and hides entries: a 575-entry playlist showed 533 entries numbered 1 to 533 on 2026-10-16.

Deleted and private entries are never rows and never charged. The run summary (key-value store record OUTPUT) lists them for each playlist with YouTube's reason:

{
"playlistId": "PLr5X5rpmjKVkkQyRoN9NWqhRxTtWqFgi5",
"title": "Jonas Brothers All Music Videos",
"status": "ok",
"videoCount": 180,
"listed": 180,
"videosRead": 170,
"unavailableCount": 10,
"unavailable": [
{"position": 14, "id": "sp9-c-qSgso", "reason": "This video is private"},
{"position": 118, "id": "ej8Tt4RCI8g", "reason": "Video unavailable: It was removed following a copyright removal request by Universal Music Group"},
{"position": 130, "id": "xFzKpvchphw", "reason": "Video unavailable: This video is no longer available because the YouTube account associated with this video has been terminated."}
],
"totalDurationSeconds": 31444
}

(Shortened: this playlist has 10 unavailable entries.) The summary also gives each playlist's status (ok, notFound with YouTube's reason, empty), its total duration, and the entries saved with another playlist.

What you get in every row

GroupFields
📍 Positionposition (1 = first, YouTube's numbering)
🎬 Videotitle, type (video, shorts, stream), id, url, embedUrl, text (description), descriptionLinks, hashtags, keywords (tags), category, duration, durationSeconds
🗣️ LanguageoriginalLanguage, originalLanguageCode (the spoken language, e.g. English / en), audioTracks (dubbed audio tracks: language, name, original or automatic dub; null with one track)
📈 StatsviewCount, likes (exact), commentsCount (exact: 1,231, not YouTube's rounded 1.2K), commentsTurnedOff
📅 Datesdate (exact publish time, UTC), uploadDate, dateText, publishedTimeText ("3 years ago"), liveStartedAt, liveEndedAt, streamType, isLiveNow
🖼️ ThumbnailsthumbnailUrl (the largest) and thumbnails: every size YouTube lists, smallest first, {url, width, height} up to 1280x720
🚩 FlagshasCaptions, isAgeRestricted, isFamilySafe, isUnlisted, isPrivate, isMembersOnly, isPaidContent ("Includes paid promotion"), isMonetized (YouTube serves ads on it to a logged-out viewer; null on Shorts), allowRatings, availableCountries
📺 ChannelchannelName, channelUrl, channelUsername, channelId, numberOfSubscribers, isChannelVerified, channelBadges ("Verified", "Official Artist Channel"), channelAvatarUrl, channelDescription, channelDescriptionLinks, channelJoinedDate, channelCreatedAt (to the second, when the run reads the channel's feed anyway), channelLocation, channelTotalVideos, channelTotalViews, collaborators
💬 Captions and previewscaptionTracks (each caption track's language, name, whether it's automatic, and its link), videoPreviews (YouTube's storyboard preview images per size), isEmbeddable
🎵 ShortssoundTitle, musicTitle, musicArtist
📃 PlaylistplaylistId, playlistUrl, playlistTitle, playlistDescription, playlistType (Playlist, Podcast, Course), playlistVisibility (public, unlisted), playlistVideoCount, playlistViewCount, playlistLastUpdated, playlistLastUpdatedText, playlistThumbnailUrl, playlistOwnerName, playlistOwnerId, playlistOwnerUrl, playlistOwnerUsername
🧾 Runinput (what you typed), searchQuery (the words that found the playlist), scrapedAt

The dataset has four views: Videos, Playlists, Video details, and Channels.

Measured on the 242 rows of two runs on Apify on 2026-10-17 (the prefill and two playlists with 13 unavailable entries):

FieldFilled
position100%
viewCount100%
likes98% (the rest have likes hidden by the uploader)
commentsCount100%
date (exact time)100%
durationSeconds100%
text (description)90%
keywords87%
category100%
thumbnails100%
hasCaptions100%
numberOfSubscribers100%
channelTotalViews100%
playlistTitle, playlistOwnerName, playlistVideoCount, playlistLastUpdated100%

text and keywords are empty where the video has none.

Speed

On Apify at the default 512 MB: the prefill (50 videos) ran 10-16 seconds, first row after 2.3-4.5 seconds; two playlists with 192 videos ran 34-43 seconds; 1,000 entries of a channel's uploads with full video details off ran 19 seconds. apidojo's run of 10 videos from the same playlist ran 50 seconds (at its default 256 MB).

Moving from another playlist Actor

Saved inputs run here unchanged: startUrls and keywords and maxItems (apidojo), playlistUrls, maxVideosPerPlaylist and includeVideoDetails (dz_omar), startURLs (toludare). Field names differ a little:

Their fieldHere
viewsviewCount
commentscommentsCount (exact)
descriptiontext
duration (seconds), lengthSecondsdurationSeconds
channel.id, channel.name, channel.handle, channel.url, channel.subscriberCountchannelId, channelName, channelUsername, channelUrl, numberOfSubscribers
channel.badgeschannelBadges
isRatingsAllowedallowRatings
isLiveisLiveNow
publishDate, relativeDatedate (exact time)
captions.captionTrackscaptionTracks (and hasCaptions)
videoPreviewsvideoPreviews
isEmbeddableisEmbeddable
index, positionposition
relativeUploadTime, videoInfopublishedTimeText (and the exact viewCount)
playlistInfo.*, playlist title/videoCount/channel*playlistTitle, playlistVideoCount, playlistOwnerName, ...
hiddenVideoCountthe run summary's unavailableCount (with every entry's position and reason)

Same playlist, same day (Crystal Castles, above; apidojo on a free account, which caps runs at 10 videos):

apidojo/youtube-playlist-scraperThis Actor
Price$0.50 per 1,000 videos, plus $0.025 per playlist and $0.005 per search (each with about 100 videos free)$0.29 per 1,000 videos on Starter, nothing per playlist or search
Position in the playlistnot in its rowsposition, YouTube's own numbering
The first 16 entries10 rows: positions 1, 4, 6, 8, 11-16 (the private 2, 7 and 10 and the videos at 3, 5 and 9 left out, unreported)13 rows (positions 1, 3-6, 8, 9, 11-16) and the 3 private entries listed with their reason
Playlist title, owner, counts, last updatenot in its rowson every row
Likes and views on the same videossame numberssame numbers
Comment countsYouTube's rounded figure (1,200 for 1.2K)exact (1,231)

Prices are from the Apify Store on 2026-10-16. Not offered here: playback stream URLs (YouTube ties them to the reading IP and expires them within hours). The caption files themselves: the YouTube Transcripts Actor downloads them.

Output

One row per video. A real row from the prefilled run, shortened:

{
"position": 1,
"title": "Python Tutorial 2026",
"type": "video",
"id": "YZkyL-f-YXY",
"url": "https://www.youtube.com/watch?v=YZkyL-f-YXY",
"embedUrl": "https://www.youtube.com/embed/YZkyL-f-YXY",
"thumbnailUrl": "https://i.ytimg.com/vi/YZkyL-f-YXY/maxresdefault.jpg",
"viewCount": 588078,
"likes": 4318,
"commentsCount": 107,
"date": "2025-09-23T12:31:03Z",
"uploadDate": "2025-09-23T12:31:03Z",
"dateText": "Sep 23, 2025",
"publishedTimeText": "1 year ago",
"duration": "00:05:21",
"durationSeconds": 321,
"text": "This introductory Python tutorial is perfect for those stepping into the world of programming for the very first time. I...",
"keywords": ["telusko", "navin", "reddy", "tutorial"],
"category": "Science & Technology",
"hasCaptions": true,
"isAgeRestricted": false,
"isPrivate": false,
"isFamilySafe": true,
"allowRatings": true,
"channelName": "Telusko",
"channelUrl": "https://www.youtube.com/channel/UC59K-uG2A5ogwIrHw4bmlEg",
"channelUsername": "Telusko",
"numberOfSubscribers": 3030000,
"isChannelVerified": true,
"channelBadges": ["Verified"],
"channelJoinedDate": "Apr 29, 2014",
"channelLocation": "India",
"channelTotalVideos": 2184,
"channelTotalViews": 423968100,
"playlistId": "PLsyeobzWxl7omDoEYrrf3oXvXxa6MPgek",
"playlistUrl": "https://www.youtube.com/playlist?list=PLsyeobzWxl7omDoEYrrf3oXvXxa6MPgek",
"playlistTitle": "Python Tutorial 2026 | Complete Python Course (Beginner to Advanced) | Telusko",
"playlistType": "Playlist",
"playlistVisibility": "public",
"playlistVideoCount": 54,
"playlistViewCount": 1310698,
"playlistLastUpdated": "2026-06-12",
"playlistLastUpdatedText": "Last updated on Jun 12, 2026",
"playlistOwnerName": "Telusko",
"playlistOwnerUrl": "https://www.youtube.com/@Telusko",
"input": "https://www.youtube.com/playlist?list=PLsyeobzWxl7omDoEYrrf3oXvXxa6MPgek",
"searchQuery": null,
"scrapedAt": "2026-10-17T02:20:01Z"
}

(Some fields left out here: every row has all of the fields listed above, empty ones as null.)

Did it help?

A short review helps others find it: https://apify.com/deepmine/youtube-playlist-scraper/reviews