YouTube Playlist Scraper avatar

YouTube Playlist Scraper

Pricing

from $0.50 / 1,000 video results

Go to Apify Store
YouTube Playlist Scraper

YouTube Playlist Scraper

Get every video of any YouTube playlist, with its title, views, duration and publish date, plus the playlist's own stats: title, description, video count, views. 0.50 USD per 1,000 videos.

Pricing

from $0.50 / 1,000 video results

Rating

0.0

(0)

Developer

Brahim Sliti

Brahim Sliti

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

Give it a YouTube playlist, get back every video it contains, in order, with views, duration and publish date. Each row also carries the playlist's own title, description, channel and stats, so you don't need a second actor for them.

What people use it for

  • Course and tutorial archiving. Pull every video of a multi-part series in the right order, with durations, to build a table of contents.
  • Competitor research. Track a brand's "best of" or product playlists to see what they are promoting this month.
  • Content curation. Export a public playlist you follow into a spreadsheet, with views and dates to sort by.
  • Backup and migration. Get a clean list of every video id and URL in a playlist before it changes or disappears.

How to use it

  1. Add playlists in Playlist URLs / ids, one per line: a playlist URL (https://www.youtube.com/playlist?list=PL...), a watch URL with &list=, or a bare id (PL..., UU..., OL...).
  2. Set Max videos per playlist (default 100, up to 5000).
  3. Optional: turn on Add likes, comment count and full description for one extra request per video.
  4. Click Start. Export as JSON, CSV or Excel, or pull the results through the API.
{
"startUrls": ["https://www.youtube.com/playlist?list=PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH"],
"maxVideosPerPlaylist": 250
}

What you get

{
"id": "17WoOqgXsRM",
"title": "Coding Challenge #1: The Game of Life",
"url": "https://www.youtube.com/watch?v=17WoOqgXsRM",
"thumbnailUrl": "https://i.ytimg.com/vi/17WoOqgXsRM/hq720.jpg",
"duration": "17:00",
"durationSeconds": 1020,
"viewCount": 676000,
"channelName": "The Coding Train",
"channelId": "UCvjgXvBlbQiydffZU7m1_aw",
"playlistIndex": 1,
"isPlayable": true,
"playlistInfo": {
"playlistId": "PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH",
"playlistTitle": "Coding Challenges",
"playlistChannelName": "The Coding Train",
"playlistVideoCount": 246,
"playlistViewCount": 2719868
}
}
  • playlistIndex is the video's position in the playlist, starting at 1, with no gaps or duplicates even on a 5,000-video playlist read over several pages.
  • playlistInfo carries the playlist's own title, description, channel and stats, the same on every row.
  • isPlayable is false for a private or deleted video still listed in the playlist; its other fields stay null since YouTube gives nothing else for it.
  • Turn on Add likes, comment count and full description to also get likes, commentsCount, text (the full description) and publishedAt of each video, with dateIsApproximate telling you whether that date is the exact one or (rarely, when a single video's own page could not be fetched) the same approximate one as without the option. Without the option, those five fields are left out, not guessed.

Pricing

0.50 USD per 1,000 videos. Likes, comment count and description are included at no extra cost when you turn them on.

There is no minimum charge per run: one playlist with 50 videos costs 0.025 USD. Error rows are free, and there's no monthly fee or Apify platform usage on top.

Example: 250 videos from one playlist costs 0.125 USD.

Good to know

  • A mix or "radio" playlist (an id starting with RD) is not a regular playlist: it comes back as an UNSUPPORTED_PLAYLIST error row, free.
  • This actor only scrapes playlists. For a channel's own uploads, Shorts or streams, use our YouTube Channel Scraper. For captions, use our YouTube Transcript Scraper.
  • Without Add likes, comment count and full description, dates come from the playlist listing itself and can be approximate ("2 months ago"); turn the option on for the exact publish date.
  • You don't need a proxy, a YouTube account or a YouTube API key.

Use it from n8n, Make or an API

  • Small inputs: call run-sync-get-dataset-items and read the items back directly. Set Time budget (seconds) (default 240) to how long you are willing to wait: the actor stops picking up new pages before that point and returns what it already has, so you never hit Apify's 300 second run-sync limit and lose the whole run.
  • Big inputs: start the run with POST /v2/acts/vakitek~youtube-playlist/runs, poll GET /v2/actor-runs/<runId> (or add waitForFinish=60) until the status is SUCCEEDED, then read GET /v2/datasets/<datasetId>/items. Set Time budget (seconds) to 0 (no limit) for this pattern.

Errors

A bad input never crashes the run. It becomes a row with an error code, and you are not charged for it.

errorWhat happenedRetry?
NOT_FOUNDThe playlist URL or id doesn't match a real playlistNo
UNSUPPORTED_PLAYLISTThe id is a mix/radio playlist or another auto-generated type YouTube does not let anyone browseNo
NO_RESULTSThe playlist exists but has no videosNo
INVALID_INPUTAn input value is invalidNo
BLOCKEDYouTube refused us for now, even after trying every proxy tierYes
UPSTREAM_ERRORSomething went wrong on YouTube's side or oursYes
UPSTREAM_UNAVAILABLEOur API was unreachableYes
TIME_BUDGET_EXCEEDEDThe time budget ran out before this playlist finishedYes

FAQ

How many videos can I get from one playlist? Up to 5000. Set Max videos per playlist as high as you need.

I already use another YouTube playlist actor. Do I have to change my code? Probably not. The output field names (playlistIndex, playlistInfo, viewCount...) follow the most used playlist scrapers on the Store.

Can I call it from my code or from an AI agent? Yes, like any Apify actor: REST API, the Python and JavaScript clients, or the Apify MCP server. The examples are in the API tab.

Something broke or a field is missing? Open an issue on this page. We read every one and usually answer within a day.