Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
YouTube Playlist Scraper icon

YouTube Playlist Scraper

Export every video in a YouTube playlist. Get title, watch URL, views, age, runtime and thumbnail. No API key or OAuth. $0.40 per 1,000 videos.

181 runs on Apify $0.0004 per video ($0.4 / 1,000)
Run this in the cloudRun on Apify →

YouTube & Creator Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust playlistUrls, playlistIds, maxItems (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0004 per video = $0.4 per 1,000

You are charged forWhenPrice
Video returnedCharged once per video returned. Failed/empty runs are not charged.$0.0004

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-19, and they are what you are actually charged.

Inputs

FieldWhat it doesType
playlistUrlsYouTube playlist URLs (with ?list=...).array
playlistIdsOr bare playlist ids (PL.../UU.../OL...).array
maxItemsMax videos. Charged per video.integer
notionConnectorOptional. Deliver results to your connected Notion via Apify MCP connectors.string
notionParentIdOptional Notion database/data-source id.string

What you get

A structured dataset — each result includes fields like:

titlechannelNameviewCountTextpublishedTimeTexturl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

2 ready-to-run use cases

Export YouTube Playlist to CSV, JSON or Excel

Every video in a public playlist as rows: title, video ID, URL, running time and views. Publish dates come back relative, like "3 weeks ago".

YouTube Podcast Episode List: Export a Full Playlist

A podcast playlist as a clean episode list: title, link, running time and views. The publish column is relative, "5 months ago", not a real date.

Related tools in YouTube & Creator Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

YouTube Transcript Scraper iconYouTube & Creator Tools

YouTube Transcript Scraper

YouTube transcripts from links or a keyword search: text, timed segments, SRT, VTT and video details. No API key. $0.80 per 1,000.

2 use cases

YouTube Trending Scraper iconYouTube & Creator Tools

YouTube Trending Scraper

Get the most-viewed YouTube videos for any topic, no login or key. Rows carry views, titles, channels, duration, thumbnails. $0.40 per 1,000 videos.

Ready to run — no setup

YouTube Channel Email Scraper iconYouTube & Creator Tools

YouTube Channel Email Scraper

Find the business emails creators publish in their YouTube channel description, plus their linked site's contact pages. $1.50 per 1,000 channels.

Ready to run — no setup

YouTube Scraper iconYouTube & Creator Tools

YouTube Scraper

Search YouTube or scrape a channel: title, channel, views, publish date, length and thumbnail. No API key or quota. $0.135 per 1,000 videos.

18 use cases

YouTube Channel Monitor — New Upload Tracker iconYouTube & Creator Tools

YouTube Channel Monitor — New Upload Tracker

Watch YouTube channels and get only their new uploads: title, URL, publish date, views, thumbnail. $0.01 per new video.

17 use cases

YouTube Video & Audio Downloader iconYouTube & Creator Tools

YouTube Video & Audio Downloader

Download YouTube videos as MP4 up to 8K, audio as MP3 or subtitles as .srt. No login or API key. You pay per megabyte delivered.

17 use cases

See all YouTube & Creator Tools →

YouTube Playlist Scraper: every video in a playlist, as rows

Paste playlist links or bare PL and UU ids and you get one row per video: id, title, watch link, uploader, view count, age, runtime and the largest thumbnail YouTube offers. It keeps paging, so a long playlist comes back in one run rather than stopping at the first twenty.

The thing that catches people out: channelName is read off each video's own byline, not off the playlist. A playlist collecting clips from nineteen creators gives you nineteen different channels, which is usually what you want and occasionally not.

InputPlaylist links, or bare PL, UU, OL, RD, FL, LL ids
OutputOne row per video
Ceiling5,000 videos per run
Account neededNone from you
Price$0.40 per 1,000 videos, flat on every plan

🗂️ What YouTube Playlist Scraper does

Anything with ?list= in it works, including a plain watch link that happens to carry a playlist parameter. Bare ids work too, and so does a Mix. No Google API key, no OAuth screen, no daily quota.

It follows the playlist's own continuations, up to 80 pages per playlist, which is a very long list before it matters. maxItems is the budget for the whole run, not per playlist, so it is also your spend cap.

Videos are deduplicated by videoId across every playlist in the run. A video sitting in two of your playlists is returned once and billed once.

📥 What you give it

{
  "playlistUrls": ["https://www.youtube.com/playlist?list=PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf"],
  "maxItems": 100
}
FieldDefaultWhat it is
playlistUrlsnoneAny link containing ?list=. A watch link with a list parameter counts.
playlistIdsnoneOr bare ids: PL, UU, OL, RD, FL, LL.
maxItems100Total videos across every playlist in the run, 1 to 5,000. This is also your spend cap.
notionConnector, notionParentIdnoneOptional. Write each video into a Notion database as well as the dataset.
proxyConfigurationApify defaultLeave it alone unless you have your own servers you want the run to go out through.

Send at least one of playlistUrls or playlistIds. With neither, the run fails rather than returning a polite row.

📤 What you get back

A real row from a real run, with the thumbnail link cut short:

{
  "ok": true,
  "videoId": "0VH1Lim8gL8",
  "title": "Deep Learning State of the Art (2020)",
  "url": "https://www.youtube.com/watch?v=0VH1Lim8gL8",
  "channelName": "Lex Fridman",
  "channelId": "UCSHZKyawb77ixDdsGog4iWA",
  "viewCountText": "1.3M views",
  "publishedTimeText": "6 years ago",
  "lengthText": "1:27:41",
  "thumbnail": "https://i.ytimg.com/vi/0VH1Lim8gL8/hqdefault.jpg?sqp=...",
  "mode": "playlist"
}
FieldWhat it is
videoId, urlThe 11 character id and the canonical watch link. Use videoId as your key across runs.
channelName, channelIdThe video's own uploader, read off its byline. Roughly one row in a hundred arrives with no byline and these two come back blank.
viewCountText"1.3M views", as the playlist page renders it.
publishedTimeText"6 years ago". Relative to when the run read the page.
lengthText"1:27:41". Empty on a live stream or a premiere.
thumbnailThe largest one YouTube offers for that video.
modeAlways playlist here, so rows merge cleanly with the other YouTube scrapers.

The counts and dates are strings, not numbers. "1.3M views" is what the page prints, and the exact figure is not in it. If you need integers and real dates, parse what you can and accept the rounding.

🧾 Reading the output

Two kinds of row land in your dataset.

RowHow to spot itBilled
A videook: trueyes
A diagnosticok: false and an errorCodeno

Filter on ok == true and you have your data. A playlist that fails gets its own uncharged diagnostic row naming the playlistId and the reason, and the run carries on to the next one. NO_RESULTS means the run finished with nothing to show, BLOCKED and RATE_LIMITED mean YouTube pushed back on the request, SERVER_ERROR is a 5xx and NETWORK means it could not be reached.

One quirk of the Overview table: it shows the video columns only, so a diagnostic row reads as a blank line there. Open the row or download the JSON to see the errorCode.

▶️ How to run it

1. Open YouTube Playlist Scraper and click Try for free. 2. Paste links into Playlist URLs, or ids into Playlist IDs. 3. Set Max videos. Start at 100 while you look at the shape. 4. Click Start. 5. Download the dataset as JSON, CSV or Excel, or read it over the Apify API.

💰 How much does it cost?

$0.40 per 1,000 videos. Flat on every Apify plan, no volume tiers.

You pay per video row delivered. Diagnostic rows and duplicates inside a run are never billed, so a playlist that returns nothing delivers no charged rows. maxItems is the ceiling on both the rows and the spend.

💡 What people use it for

  • Turning a course or conference playlist into a spreadsheet, then working down it.
  • Pulling a channel's uploads playlist as a single ordered list.
  • Collecting video ids from a curated playlist to feed the transcript or comments actors.
  • Auditing a playlist you inherited, to see which creators are actually in it.

🚧 What it does not do

  • Public and unlisted playlists only. A private playlist needs a signed-in account and will not

work here.

  • No exact view counts and no real dates. The strings are what the page carries.
  • No descriptions, likes, comments or transcripts. Those are separate actors, two linked below.
  • Paging stops at 80 pages per playlist. That is a very long list, but it is the ceiling.
  • The playlist's own title and owner are not returned. Rows describe videos, not the playlist.
  • Order is the playlist's order, and there is no sort option.
  • Nothing valid in the input fails the run rather than returning an explanatory row.

🧭 Which YouTube scraper do you need?

If you wantUse
Every video in a playlistThis one
A channel's uploads, without finding its playlist idYouTube Channel Scraper
Keyword search resultsYouTube Scraper
The spoken words in each videoYouTube Transcript Scraper
The videos themselves as filesYouTube Downloader

❓ Questions people ask

Do I need a YouTube or Google account? No. Nothing here is signed in, and there is no quota.

Is maxItems per playlist? No, it is the total for the run. Five playlists at 100 gives you 100 rows altogether, not 500.

Why does channelName differ row to row? Because it is the video's uploader, not the playlist's owner. On a channel's own uploads playlist they are the same thing.

Can I get a channel's videos without knowing its playlist id? Yes, use the channel scraper linked above.

Is scraping YouTube legal? This reads public and unlisted playlist pages, nothing signed in. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

Can I run it on a schedule? Yes. Apify's scheduler, or start it from the API and read the dataset when it finishes.

🆘 If something breaks

Open the Issues tab on the actor page. Include the playlist link or id you used and the run ID, and the log is enough for us to see what happened.