YouTube Playlist Scraper: Videos & Metadata
Pricing
from $0.22 / 1,000 videos
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
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 |
|---|---|---|---|---|---|---|---|
| 1 | Crystal Castles - Alice Practice (Music Video) | xxzxcuzx me! | 17,924 | 716 | 35 | 2022-11-12 | 00:02:19 |
| 2 | This video is private (listed in the run summary, not charged) | ||||||
| 3 | Crystal Castles - Crimewave (Official Video) | Gastón Ossandón | 576,992 | 12,367 | 488 | 2011-07-16 | 00:02:53 |
| 4 | Crystal Castles - Crimewave (2007 HD Music Video) | xxzxcuzx me! | 2,579 | 146 | 9 | 2024-07-10 | 00:02:50 |
| 5 | Crystal Castles - "Magic Spells" - Official Video | Crystal Castles official | 876,262 | 8,852 | 629 | 2008-03-12 | 00:00:55 |
| 6 | Air War - Crystal Castles (Official Music Video) | WaxTrax ! | 13,308 | 522 | 49 | 2022-08-18 | 00:02:28 |
| 7 | This video is private (listed in the run summary, not charged) | ||||||
| 8 | Crystal Castles "COURTSHIP DATING" Official | Crystal Castles official | 3,384,045 | 48,815 | 1,231 | 2009-10-18 | 00:02:36 |
| 9 | Vanished - Crystal Castles Music Video (Alternate) | cc | 2,128 | 84 | 6 | 2025-01-25 | 00:02:42 |
| 10 | This video is private (listed in the run summary, not charged) | ||||||
| 11 | Crystal Castles "TELL ME WHAT TO SWALLOW" (Home Footage Video) | Untitled Profile | 31,762 | 1,705 | 50 | 2017-12-14 | 00:02:13 |
| 12 | Crystal Castles - Celestica | Crystal Castles official | 13,802,606 | hidden | 4,111 | 2010-07-20 | 00: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.
| Plan | Price per 1,000 videos |
|---|---|
| Free | $0.30 |
| Starter | $0.29 |
| Scale | $0.25 |
| Business | $0.22 |
What you type
| Input | Example | You get |
|---|---|---|
| 🔗 Playlist links or IDs | https://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 links | https://www.youtube.com/@Fireship | That channel's playlists (its Playlists tab), each read like a link |
| 🔍 Search words | python tutorial | The playlists, courses and podcasts YouTube's playlist search finds, each read like a link |
| Max videos per playlist | 50 | The first 50 available videos of each playlist (empty = all) |
| Max playlists per search or channel | 10 (default) | How many playlists a search or channel link reads |
| Full video details | on (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
| Group | Fields |
|---|---|
| 📍 Position | position (1 = first, YouTube's numbering) |
| 🎬 Video | title, type (video, shorts, stream), id, url, embedUrl, text (description), descriptionLinks, hashtags, keywords (tags), category, duration, durationSeconds |
| 🗣️ Language | originalLanguage, originalLanguageCode (the spoken language, e.g. English / en), audioTracks (dubbed audio tracks: language, name, original or automatic dub; null with one track) |
| 📈 Stats | viewCount, likes (exact), commentsCount (exact: 1,231, not YouTube's rounded 1.2K), commentsTurnedOff |
| 📅 Dates | date (exact publish time, UTC), uploadDate, dateText, publishedTimeText ("3 years ago"), liveStartedAt, liveEndedAt, streamType, isLiveNow |
| 🖼️ Thumbnails | thumbnailUrl (the largest) and thumbnails: every size YouTube lists, smallest first, {url, width, height} up to 1280x720 |
| 🚩 Flags | hasCaptions, 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 |
| 📺 Channel | channelName, 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 previews | captionTracks (each caption track's language, name, whether it's automatic, and its link), videoPreviews (YouTube's storyboard preview images per size), isEmbeddable |
| 🎵 Shorts | soundTitle, musicTitle, musicArtist |
| 📃 Playlist | playlistId, playlistUrl, playlistTitle, playlistDescription, playlistType (Playlist, Podcast, Course), playlistVisibility (public, unlisted), playlistVideoCount, playlistViewCount, playlistLastUpdated, playlistLastUpdatedText, playlistThumbnailUrl, playlistOwnerName, playlistOwnerId, playlistOwnerUrl, playlistOwnerUsername |
| 🧾 Run | input (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):
| Field | Filled |
|---|---|
position | 100% |
viewCount | 100% |
likes | 98% (the rest have likes hidden by the uploader) |
commentsCount | 100% |
date (exact time) | 100% |
durationSeconds | 100% |
text (description) | 90% |
keywords | 87% |
category | 100% |
thumbnails | 100% |
hasCaptions | 100% |
numberOfSubscribers | 100% |
channelTotalViews | 100% |
playlistTitle, playlistOwnerName, playlistVideoCount, playlistLastUpdated | 100% |
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 field | Here |
|---|---|
views | viewCount |
comments | commentsCount (exact) |
description | text |
duration (seconds), lengthSeconds | durationSeconds |
channel.id, channel.name, channel.handle, channel.url, channel.subscriberCount | channelId, channelName, channelUsername, channelUrl, numberOfSubscribers |
channel.badges | channelBadges |
isRatingsAllowed | allowRatings |
isLive | isLiveNow |
publishDate, relativeDate | date (exact time) |
captions.captionTracks | captionTracks (and hasCaptions) |
videoPreviews | videoPreviews |
isEmbeddable | isEmbeddable |
index, position | position |
relativeUploadTime, videoInfo | publishedTimeText (and the exact viewCount) |
playlistInfo.*, playlist title/videoCount/channel* | playlistTitle, playlistVideoCount, playlistOwnerName, ... |
hiddenVideoCount | the 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-scraper | This 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 playlist | not in its rows | position, YouTube's own numbering |
| The first 16 entries | 10 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 update | not in its rows | on every row |
| Likes and views on the same videos | same numbers | same numbers |
| Comment counts | YouTube'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