YouTube Playlist Scraper - Videos, Views & Order, No API Key
Pricing
from $5.84 / 1,000 playlist video row returneds
YouTube Playlist Scraper - Videos, Views & Order, No API Key
For playlist exports, new-upload alerts and course or podcast tracking: YouTube playlist videos as rows with position, title, URL, channel, length, views and age, plus the playlist's title, owner and total views. First 100 videos. No API key or quota. Monitoring returns only new videos.
Pricing
from $5.84 / 1,000 playlist video row returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Paste YouTube playlist URLs and get every video on the playlist's page in playlist order: position, video id and URL, title, channel, length, view count and how long ago it was published - plus, on every row, the playlist's title, owner channel, video count and total views. No YouTube Data API key, no quota, no sign-in.
Turn on monitoring mode, schedule the Actor, and a run returns only the videos that were added since the last run - handy for a channel's uploads playlist (UU...), a course, a podcast or a curated music list.
Coverage, stated plainly: the playlist page YouTube serves without signing in lists at most the first 100 videos (measured on 2026-09-21: a 183-video playlist and a 1,848-video uploads playlist both showed exactly 100). YouTube loads the rest through its internal API (/youtubei/), which YouTube's robots.txt disallows, so this Actor does not read it. For a longer playlist you get the first 100 videos, and a free first-page-only row tells you how many YouTube lists in total.
What you can use it for
- Playlist exports: turn a playlist into a spreadsheet with titles, channels, lengths and views, in the order the playlist shows them.
- New-upload alerts: monitor a channel's uploads playlist (
UU+ the channel id withoutUC) and get a row for each new video. - Course and podcast tracking: see when a lesson or an episode is added to a playlist you follow.
- Music and curation research: see which videos and channels a curated playlist features, with their view counts.
How it works
- Paste playlist URLs (
https://www.youtube.com/playlist?list=PL...), watch URLs that contain&list=, or bare playlist ids (PL...,UU...,OLAK5uy_...). - For each playlist the Actor opens the public playlist page (
https://www.youtube.com/playlist?list=<id>&hl=en&gl=US) and checks that the page is the playlist you asked for (its canonical playlist id). A video is only counted if YouTube links it to that playlist. - It reads the playlist header (title, owner, video count, views) and every video card on the page, in order. The position is YouTube's own index for the card, the same number you see in a browser (unavailable videos YouTube hides are not counted).
- Private, deleted and unviewable playlists come back as a free row with YouTube's own message.
Input
| Field | Default | What it does |
|---|---|---|
playlists | example playlist | Playlist URLs, watch URLs with &list=, or playlist ids, one per line (commas also separate entries, and so do spaces between entries that are all playlists). A repeated playlist is read and charged once; the repeat gets a free duplicate row. Up to 500 per run. |
maxVideosPerPlaylist | 100 | With monitoring off, return at most this many videos per playlist, from position 1. 100 is the most the page shows. |
maxResults | 1000 | With monitoring off, stop after this many video rows in total; a free row says what was not returned. In monitoring mode it does not cut new videos. |
monitoringMode | false | Remember which videos were returned for each playlist and return only videos not returned before. |
resetMonitoringState | false | Forget the remembered videos of the playlists in this run's list and start a fresh baseline. Turn it off again after one run. |
useProxy | true | Retry a page through a proxy (datacenter first, then residential) only if YouTube answers it with a bot check or an error. |
{"playlists": ["https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE","UUBJycsmduvYEL83R_U4JriQ"],"monitoringMode": false}
If you leave playlists out of the input with monitoring off, the example playlist above is read (its URL appears in inputPlaylist and the run log says so). In monitoring mode playlists is required, so a schedule never pays to watch the example. An empty list is rejected with a free invalid-input row.
Output
One row per video. This row was read on 2026-09-21 (UTC) from the example playlist (13 videos listed by YouTube, 10 shown, 3 hidden by YouTube as unavailable):
{"source": "youtube-playlist","status": "ok","inputPlaylist": "PLBCF2DAC6FFB574DE","playlistId": "PLBCF2DAC6FFB574DE","playlistUrl": "https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE","playlistTitle": "Google Search Stories","playlistOwnerName": "Google Search Stories","playlistOwnerChannelId": "UCvceBgMIpKb4zK1ss-Sh90w","playlistOwnerUrl": "https://www.youtube.com/@SearchStories","playlistVideoCount": 13,"playlistViewCount": 102161,"hiddenUnavailableVideos": 3,"videosOnFirstPage": 10,"onlyFirstPageReturned": false,"position": 1,"videoId": "GvgqDSnpRQM","videoUrl": "https://www.youtube.com/watch?v=GvgqDSnpRQM","title": "Andrew Willis, Skatepark Engineer","channelName": "Google Search Stories","channelId": "UCvceBgMIpKb4zK1ss-Sh90w","channelUrl": "https://www.youtube.com/@SearchStories","durationText": "1:30","lengthSeconds": 90,"viewCountText": "2.6M views","viewCount": 2600000,"viewCountIsRounded": true,"publishedTimeText": "12 years ago","badges": [],"thumbnailUrl": "https://i.ytimg.com/vi/GvgqDSnpRQM/hqdefault.jpg?...","playlistDescription": "Searches can become stories. Some are inspiring, some change the way we see the world, and some just make us laugh. Here are a few of our favorites.","newSinceLastRun": null,"scrapedAt": "2026-09-21T05:37:56.052Z"}
What the columns mean, and their limits:
positionis the video's place in the playlist as YouTube shows it (1 = first). Videos YouTube hides as unavailable are not counted, so positions run 1, 2, 3... over the visible videos.viewCounton a video is rounded by YouTube on the playlist page (761M views,2.6M views);viewCountIsRoundedsays so, andviewCountTextkeeps YouTube's text. The playlist'splaylistViewCountis shown in full by YouTube and is not rounded. YouTube sometimes serves a compact version of the page with no view counts and short ages (2y ago); seen on 2 of 28 page loads we checked on 2026-09-21. When more than half of the videos come without a view count, the Actor reads the page once more and keeps the version with more view counts; if both lack them,viewCountisnull(never 0) and the run log says so.publishedTimeTextis YouTube's relative text (2 years ago); the playlist page has no exact date.channelName/channelId: a video made by several channels shows asMarques Brownlee and Auto Focuswith no single channel link, sochannelIdisnullthere rather than guessed.playlistVideoCountis YouTube's count, which includes hidden unavailable videos;hiddenUnavailableVideosis YouTube's own "N unavailable videos are hidden" number.onlyFirstPageReturnedistruewhen the playlist has more videos than its page shows (more than 100).newSinceLastRun: in monitoring modetruefor a video added since an earlier run,falseon the first monitoring run of a playlist (the baseline);nullwith monitoring off.
Free rows
These rows have a note explaining why, and are never charged:
status | When |
|---|---|
playlist-unavailable | YouTube did not show the playlist; youtubeMessage has YouTube's own words (for example "The playlist does not exist." or "This playlist type is unviewable." for mixes). Private playlists are reported the same way. |
no-visible-videos | The playlist exists but its page shows no video (for example all of them are unavailable). |
first-page-only | The playlist has more videos than its page shows; the note says how many YouTube lists. With monitoring on, it is written only on a playlist's first monitoring run. |
different-playlist-returned | YouTube answered with another playlist than the one asked for. |
blocked / unreadable | Bot check, consent page, error or no answer after retries. Nothing is guessed. |
invalid-input / duplicate | Not a playlist URL or id (personal lists like Watch later and Liked videos included), or a repeat in the list. |
no-new-videos | Monitoring mode: no playlist checked had a video that was not returned before. |
budget-reached / not-checked | The run's maximum total charge, maxResults or the 500-playlist limit stopped the run; the note says what was left out. |
Monitoring mode
- The first monitoring run of a playlist returns every video on its page once, as the baseline (
newSinceLastRun: false), charged at the row price. If the run's maximum total charge stops the baseline part-way, the next run finishes it and those rows are still markednewSinceLastRun: false. After the baseline, runs return only videos that were not returned before for that playlist (newSinceLastRun: true). - Only videos that were actually delivered are remembered. If the run's maximum total charge stops delivery part-way, the rest are not remembered and come back on the next run.
- Only the first page is visible. Playlists that show the newest video first (channel uploads
UU..., most news and podcast lists) work well. A playlist that adds new videos at the end and already shows 100 videos will not reveal them. - A video removed from a playlist and added back is not returned again.
- Videos are remembered per playlist, in a store of your Apify account. Do not put the same playlist in two schedules that can run at the same time: Apify's key-value store has no atomic update, so two overlapping runs can overwrite each other's records (the Actor re-reads and merges before writing, which narrows but does not remove this).
Pricing
- $8 per 1,000 video rows (
playlist-video-returned, $0.008 per row returned) on Apify's free plan, less on paid plans (down to $5.84 per 1,000). - Monitoring mode only: $0.30 per 1,000 playlist checks (
playlist-checked), charged for every playlist that is read, whether it has new videos or not. Example: 20 playlists every hour = 14,400 checks a month = $4.32, plus $0.008 per new video returned. The first monitoring run of a playlist returns every video on its page (up to 100) as the baseline, at the row price: up to $0.80 per playlist once, so 20 channel-uploads playlists cost up to $16 on the first run. - Free rows (unavailable playlists, bot checks, invalid input, notes) are never charged.
- The Actor respects the run's maximum total charge: it stops before a row that would go over it, and in monitoring mode it only reads a playlist if the check and at least one video row still fit. A free
budget-reachedrow says what was left out.
Notes
- Only public YouTube pages are read, through paths YouTube's robots.txt allows (
/playlist). No sign-in, no cookies, no API key. - Titles and descriptions are returned as YouTube shows them; email addresses and phone numbers inside them are replaced with
[email removed]/[phone removed]. - YouTube can change its page at any time. When a page cannot be understood, the Actor returns a free
unreadablerow instead of an empty or guessed result.