YouTube Playlist Scraper avatar

YouTube Playlist Scraper

Pricing

from $0.45 / 1,000 results

Go to Apify Store
YouTube Playlist Scraper

YouTube Playlist Scraper

Collect playlist metadata and every available video from one or many YouTube playlist URLs or IDs. Paginate automatically and optionally add full video details or timed transcripts.

Pricing

from $0.45 / 1,000 results

Rating

0.0

(0)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

The Actor reads one or many public YouTube playlists and returns every video in them, with the playlist's own metadata attached to each row. It can optionally add full video details or a timed transcript to each item. Playlists are accepted as URLs or bare playlist IDs. No YouTube account, API key, or cookie is required.

Accepted input

FieldTypeDefaultDescription
playlist_sourcesarrayRequired. Playlist URLs or playlist IDs.
maxItemsinteger100Maximum videos saved across all playlists. 0 removes the limit.
includeVideoDetailsbooleanfalseAttaches the full video record to each item.
includeTranscriptbooleanfalseAttaches the timed transcript to each item.
region_codestringUSTwo-letter country code used to localize results.
language_codestringenLanguage code for result text and transcript selection.
{
"playlist_sources": [
{ "url": "https://www.youtube.com/playlist?list=PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj" }
],
"maxItems": 200,
"includeVideoDetails": false
}

Response fields

One row per video in the playlist.

FieldContents
recordTypeAlways playlist_video
sourceThe playlist URL or ID as supplied
typeYouTube's own label for the item
videoIdVideo ID
title, descriptionVideo text
urlCanonical video URL, derived from the ID
viewCount, viewCountTextNumeric and human-readable view counts
lengthTextDuration
publishedTimeText, publishedAt, publishDateRelative time, ISO 8601 timestamp, and date
thumbnailThumbnail images
positionOne-based position within the run
metaThe playlist's own metadata, on every row

meta carries the playlist itself — playlistId, title, description, videoCount, viewCount, lastUpdated, and the owning channelId, channelTitle, and channelHandle. Because it is attached to every row, a single playlist's rows are self-describing without a separate lookup.

Present only when the matching enrichment is enabled:

FieldContents
videoDetailsThe full video record, as returned by the video endpoint
transcriptTimed transcript segments
{
"recordType": "playlist_video",
"type": "video",
"videoId": "ekr2nIex040",
"title": "ROSÉ & Bruno Mars - APT. (Official Music Video)",
"url": "https://www.youtube.com/watch?v=ekr2nIex040",
"viewCount": 2600000000,
"viewCountText": "2.6B views",
"lengthText": "2:54",
"publishDate": "2025-07-30",
"position": 1
}

Pagination and result limits

Playlist pages are large — a request commonly returns 100 items — and the cursor is followed until maxItems is reached or YouTube stops serving pages. maxItems is shared across every playlist in the run, so a single long playlist can consume the whole budget before a later one is reached. Run long playlists separately, or set maxItems: 0, when complete coverage of each matters.

meta.videoCount is the playlist's own declared length, which makes it easy to tell a completed playlist from a truncated run.

Behaviour on partial results

A target that is not a playlist URL or ID is logged and skipped. A playlist that YouTube declines to serve — private, deleted, or region-blocked — is logged and skipped, and the remaining playlists still run. Rows already collected are kept. The run fails only when no supplied target was a usable playlist reference.

The two enrichments are independent and are applied per item, each costing one extra request. A failure leaves that field absent, is not charged, and does not interrupt the run. On a 200-video playlist, enabling both performs 400 extra requests, so it is worth collecting the playlist first and enriching a shortlist afterwards.

Frequently asked questions

Which playlist forms are accepted? A full playlist URL, a watch URL carrying a list= parameter, or a bare playlist ID. Mixing forms in one run is fine.

Why did a playlist return fewer videos than its videoCount? Either maxItems was reached, or the playlist contains videos that are no longer public. Deleted and private entries remain in a playlist's declared count but are not served as items, so a small shortfall against meta.videoCount is normal and comes from YouTube.

Can a channel's "all uploads" playlist be read? Yes, if you have its ID. The YouTube Channel Scraper is usually the better route to a channel's uploads, since it takes a handle or URL and paginates the uploads tab directly.

What does includeVideoDetails add that the playlist row does not have? The playlist listing gives title, duration, view count, and publication date. The full record adds the description, tags, category, like and comment counts, caption availability, and the countries the video is playable in. It is one request per item.

Are private or unavailable videos included as rows? No. YouTube does not serve them as playlist items, so they do not appear. Their absence is the difference between meta.videoCount and the rows saved.

Is a YouTube account or API key required? No. Only publicly visible playlists are read, with no credentials or logged-in session, and no YouTube Data API quota is consumed.

ActorPurpose
YouTube Video ScraperFull metadata and transcripts for known videos and Shorts
YouTube Channel ScraperChannel details, uploads, playlists, and community posts
YouTube Search ScraperFind videos by keyword, hashtag, or chart
YouTube Comments ScraperComments from videos, Shorts, and community posts