YouTube Playlist Videos Scraper
Pricing
from $0.01 / 1,000 results
YouTube Playlist Videos Scraper
Extract every video from a YouTube playlist in one run — title, id, watch URL, position, duration, view count, channel, publish time and thumbnail. Reads YouTube’s InnerTube API directly and pages the whole playlist automatically. No Data API key, no headless browser.
Pricing
from $0.01 / 1,000 results
Rating
0.0
(0)
Developer
Assia Fadli
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
YouTube Playlist Videos Scraper turns any YouTube playlist into a clean, structured list of its videos. Paste a playlist URL — or a bare playlist id — and get one tidy row per video, in playlist order, ready to drop into a spreadsheet, database or downstream pipeline.
No YouTube Data API key. No headless browser. No login. It talks straight to YouTube's own InnerTube API (the same endpoints the website uses) and pages through the entire playlist automatically, so it's fast, cheap and reliable.
Built for creators, analysts, agencies and developers who need a dependable playlist export without maintaining scraping infrastructure.
What you get
One dataset row per video:
| Field | Description |
|---|---|
playlistId | The playlist id (e.g. PL..., UU...) |
playlistTitle | The playlist's display name |
videoId | 11-character video id |
title | Video title |
url | https://www.youtube.com/watch?v=<videoId> |
index | Position of the video in the playlist (1-based) |
duration | Length, e.g. "16:09" |
lengthSeconds | Length in seconds (when available) |
views | View count text, e.g. "7.4M views" |
channelName | Uploader / channel name |
channelId | The uploader's UC... id (when available) |
published | Relative publish time, e.g. "5 years ago" |
thumbnail | Highest-resolution thumbnail URL |
If the playlist can't be read (empty, private, unavailable or an invalid id), the actor still writes
a row — { "playlistId": "...", "error": "..." } — instead of finishing with empty output.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
playlistUrl | string | ✅ | https://www.youtube.com/playlist?list=PLbpi6ZahtOH6Blw3RGYpWkSByi_T7Rygb | Playlist URL, a watch URL with a list= param, or a bare playlist id (PL..., UU..., OL...) |
maxResults | integer | — | 100 | Maximum number of videos to return (fetched in playlist order) |
proxyCountryCode | string | — | US | ISO country code for the Apify residential proxy; leave blank to let Apify choose |
You can also pass the playlist under the alias key playlist instead of playlistUrl.
Example input
{"playlistUrl": "https://www.youtube.com/playlist?list=PLbpi6ZahtOH6Blw3RGYpWkSByi_T7Rygb","maxResults": 100,"proxyCountryCode": "US"}
Example output row
{"playlistId": "UU8butISFwT-Wl7EV0hUK0BQ","playlistTitle": "Uploads from freeCodeCamp.org","videoId": "XgqWCiOVh7A","title": "How to think like a programmer","url": "https://www.youtube.com/watch?v=XgqWCiOVh7A","index": 1,"duration": "1:00","views": "2.3K views","channelName": "freeCodeCamp.org","published": "18 hours ago","thumbnail": "https://i.ytimg.com/vi/XgqWCiOVh7A/hqdefault.jpg"}
How it works
- Extract the playlist id from a
?list=parameter in a playlist/watch URL, or from a bare id (PL...,UU...,OL...,FL...,RD...,LL...). A leadingVLbrowse-id prefix is stripped. - Browse the playlist. It POSTs to
youtubei/v1/browsewithbrowseId = "VL" + playlistIdusing the WEB InnerTube client, which returns up to 100 videos per page. - Page through results. It follows the
continuationCommand.tokenfrom each response untilmaxResultsis reached or there are no more pages, de-duplicating byvideoIdand guarding against continuation loops.
Requests are routed through Apify residential proxy when available, with an automatic fallback to a direct connection so a proxy hiccup never fails the run.
Pricing
This actor uses Apify's pay-per-event model. You're charged once per delivered playlist video
(video-scraped); error rows are never billed, and the run stops automatically once your budget is
reached.
Notes & limitations
- The WEB client is required for the
browseendpoint. The ANDROID/IOS clients cap a playlist at ~20 videos with no continuation token, so they cannot page. views,publishedanddurationare returned as YouTube's own display text (localized), not parsed numbers.- A few auto-generated playlists (for example YouTube's "Trending" list) are served in a special
layout whose anonymous continuation is capped by YouTube, so only the first page (~20 videos) is
available for those. Normal user-created and channel-uploads (
UU...) playlists page fully. - Private, deleted or region-blocked videos may be omitted by YouTube.
- YouTube can change its internal API at any time; this actor tolerates several response shapes but is not covered by an official API contract.
Tech
Written in TypeScript on the Apify SDK. HTTP-only, so builds are fast and runs are cheap.
License
MIT © Assia Fadli