YouTube Playlist Videos Scraper
Pricing
from $0.005 / run started
YouTube Playlist Videos Scraper
Extract public YouTube playlist video lists, positions, titles, channels, durations, views, thumbnails, and playlist metadata.
Pricing
from $0.005 / run started
Rating
0.0
(0)
Developer
Fetch Cat
Maintained by CommunityActor stats
0
Bookmarked
20
Total users
3
Monthly active users
13 days ago
Last modified
Categories
Security
Limited permissionsShare
Export public YouTube playlist-video rows with playlist context, observed order, video identities and available metadata. Use known playlist URLs or IDs to prepare a bounded inventory for separate research and curation. The Actor exports references and metadata rather than media files, private playlists or a guaranteed complete archive.
Quick start
Choose one known playlist and a small per-playlist cap. The existing example is:
{"playlistUrls": ["https://www.youtube.com/playlist?list=PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE"],"maxVideosPerPlaylist": 25,"proxyConfiguration": { "useApifyProxy": false }}
Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.
Ready-to-run examples
- Export YouTube playlist video dataset - Turn one playlist into a clean video table.
- Inventory educational YouTube playlist - Audit playlist order and metadata for research or learning content.
- Monitor YouTube playlist membership - Track which videos appear in a playlist over time.
What you get
One saved playlist-video row with playlistId, playlist title and available owner text, video identity, observed position and collection time. Optional duration, relative publish text, views, channel, thumbnail and description snippet depend on the public playlist row. Playlist position is source ordering rather than a quality or popularity rank.
Who is it for?
- Educators preparing source-linked learning-path inventories.
- Editorial teams reviewing playlist membership and order.
- Researchers building bounded public video samples with playlist provenance.
- Data developers handing video IDs to separate comment or transcript workflows.
How you can use the data
- Catalog the existing learning playlist. Export a small sample from PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE and keep position, title, videoId and playlistId together. Open original links before deciding whether content belongs in a curriculum.
- Review membership in your own snapshots. Save playlistId, videoId, position and scrapedAt in your destination before comparing repeated runs. A missing row can reflect a cap or source-access gap rather than a confirmed removal.
- Prepare a channel-attribution sheet. Retain channelName and channelUrl when exposed beside each playlist video. Missing channel or view text is unknown, and playlist ownership is distinct from authorship of every video.
- Create a separate enrichment handoff. Send saved video IDs or links to the related transcript or comment Actors. This playlist inventory does not download media, establish reuse rights or guarantee those other sources are available.
Input settings
| Setting | JSON key | What to enter |
|---|---|---|
| Playlist URLs | playlistUrls | Public YouTube playlist URLs to export. |
| Maximum videos per playlist | maxVideosPerPlaylist | Cost and size cap per playlist. |
| Proxy configuration | proxyConfiguration | Optional connection settings. Direct by default. See field help for proxy costs and supported settings. |
The main input is playlistUrls.
You can paste full URLs like:
https://www.youtube.com/playlist?list=PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE
You can also use playlist IDs.
PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE
Output data
The existing illustrative row contains historical metadata rather than fresh evidence of playlist membership:
{"playlistUrl": "https://www.youtube.com/playlist?list=PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE","playlistId": "PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE","playlistTitle": "Learn Something New","position": 1,"videoId": "MhgLasBFr6o","videoUrl": "https://www.youtube.com/watch?v=MhgLasBFr6o&list=PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE&index=1","title": "What was TEKOI? [INCORRECT VERSION]","duration": "6:19","channelName": "CGP Grey","channelUrl": "https://www.youtube.com/@CGPGrey","scrapedAt": "2026-06-17T08:47:04.106Z"}
| Field | Description |
|---|---|
playlistUrl | Canonical playlist URL |
playlistId | YouTube playlist ID |
playlistTitle | Playlist title |
playlistOwner | Playlist owner text when available |
position | Video position in the playlist |
videoId | YouTube video ID |
videoUrl | Watch URL with playlist context |
title | Video title |
descriptionSnippet | Public snippet when available |
duration | Video duration text |
thumbnailUrl | Video thumbnail URL |
publishedAtText | Public relative/date text |
channelName | Video channel name |
channelUrl | Video channel URL |
viewCountText | Public view count text when available |
scrapedAt | Extraction timestamp |
RUN_SUMMARY reports saved rows and completed, empty, partial or failed playlist entries. RUN_CHECKPOINT reports batch progress when available. These records help you distinguish unavailable targets from incomplete extraction.
Download your results
Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.
See Apify's download and export guide for the available formats and field options.
Pricing
After input and connection validation identify at least one usable playlist, the run charges the start event.
Each saved playlist-video row has a result event. Collection stops when no further results fit your charge budget. Failed or empty playlist targets do not create result rows, but a start charge can remain when no videos are saved.
See the live Pricing tab for current rates and discounts. Platform compute, storage, proxies or transfer can also apply.
Tips for best results
- Use a known accessible playlist. Check that the page is visible without logging in.
- Start with a low explicit cap. Inspect source fields and ordering before expanding toward the 500-row maximum.
- Keep playlist and video identities together. A video can belong to more than one playlist, so retain context for comparisons.
- Separate unrelated inventories. Smaller related groups are easier to inspect and reconcile with per-playlist outcomes.
- Read summaries before interpreting gaps. A failed target, pagination warning or cutoff can leave only part of the requested inventory.
Limits and caveats
Only public or unlisted playlist information exposed without login can be collected. Private, deleted, members-only, age-restricted or region-blocked videos can be absent, and source fields such as publish dates or view text can be missing.
The Actor paginates up to the selected per-playlist cap of 500. Repeating the same input starts from the beginning rather than providing an offset to later entries, so it does not guarantee access beyond that cap. RUN_CHECKPOINT reports the next playlist index and pending IDs, but there is no checkpoint or page-offset input for automatic continuation.
Explicit source messages that a playlist is empty, private or unavailable produce an empty result with a reason. Unknown page layouts, blocked requests and extraction errors are not treated as confirmed empty playlists. Mixed batches retain working playlist rows and report incomplete entries. Essential dataset or billing errors fail the run.
Later page errors, a deadline or a result-charge limit can leave partial coverage. Summary and checkpoint records may be absent after an abrupt stop.
Safety bounds apply to each decoded response (4 MiB), nesting (64 levels) and parsing/traversal work (100,000 structural tokens or visited entries). Exceeding a bound is an extraction failure, not proof of an empty playlist; useful videos fetched before a later-page failure are preserved as a partial export. Text fields are capped at 2,000 characters and image/channel links at 2,048 characters. Playlist identifiers longer than 256 characters or input URLs longer than 8,192 characters are rejected to prevent oversized exports.
Extraction stops no later than 270 seconds after the original run start, with a 30-second reserve before a configured platform timeout. Extending the timeout or setting it to unlimited does not renew that extraction budget. The reserve is for saving collected rows and reporting, not more playlist requests.
A durable run-specific marker prevents automatic re-execution of the same run after restart, migration, reboot or resurrection. Such a restart fails rather than repeating requests, output or custom charges; request a separate new run if needed. Checkpoints are reporting-only, not resume instructions. Saving rows and charging are not transactional: an abrupt failure between them may leave accessible rows uncharged. The Actor does not automatically replay or rebill ambiguous output.
Privacy and data handling
Inputs and collected rows are stored in your Apify storage. Secret-redacted input and technical failure context may also be sent to FetchCat's error-monitoring service to diagnose failures. Do not include private data or credentials in playlist URLs, and review results before sharing them.
Automation and integrations
Save your settings for next time
Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.
Run on a schedule
Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.
Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.
Send results to your other tools
Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.
For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.
API usage
Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.
The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.
For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~youtube-playlist-videos-scraper/runs?token=MY_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"playlistUrls":["https://www.youtube.com/playlist?list=PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE"],"maxVideosPerPlaylist":25}'
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/youtube-playlist-videos-scraper').call({playlistUrls: ['https://www.youtube.com/playlist?list=PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE'],maxVideosPerPlaylist: 25});console.log(run.defaultDatasetId);
Python
from apify_client import ApifyClientclient = ApifyClient('MY_APIFY_TOKEN')run = client.actor('fetch_cat/youtube-playlist-videos-scraper').call(run_input={'playlistUrls': ['https://www.youtube.com/playlist?list=PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE'],'maxVideosPerPlaylist': 25,})print(run['defaultDatasetId'])
MCP and AI agents
You can ask your AI assistant to collect data with YouTube Playlist Videos Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.
Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.
Easier setup with an Apify plugin
If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.
Use Apify AI in Console
Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's YouTube Playlist Videos Scraper. You can describe the data you want and ask questions about the results.
Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.
Choose your assistant
- Claude and Claude Code (Anthropic): Apify setup guide.
- ChatGPT and Codex (OpenAI): Apify setup guides.
- Grok Bot (xAI): Apify plugin guide.
- Gemini CLI (Google): MCP server setup guide. Use the server URL below with the HTTP configuration supported by Gemini CLI.
Connect just this scraper
To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/youtube-playlist-videos-scraper"}}}
Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.
Use Apify's general server
Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use YouTube Playlist Videos Scraper by Fetch Cat, or give it the identifier fetch_cat/youtube-playlist-videos-scraper.
Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.
Example requests
- “Use Fetch Cat’s YouTube Playlist Videos Scraper to collect up to 5 rows from playlist PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE. Keep playlist IDs, positions and video URLs without downloading media.”
- “Retrieve up to 3 playlist-video rows from https://www.youtube.com/playlist?list=PLrEnWoR732-DZV1Jc8bUpVTF_HTPbywpE. Keep channel attribution and missing duration or view text visible rather than inventing values.”
- “Collect up to 5 rows from that learning playlist and retain playlist ID, video ID, position and collection time for my own later comparison. Do not treat a missing row as a confirmed deletion or promise complete playlist coverage.”
Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.
Pay with x402
If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.
Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.
Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.
Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.
Other ways for agents to pay
Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.
FAQ
Can it scrape private playlists?
No. The actor is designed for public playlist pages only.
Can I use playlist IDs instead of URLs?
Yes. Paste the playlist ID in the input list.
Does it download videos?
No. It extracts metadata and URLs only.
Can it monitor changes over time?
Yes. Schedule repeated runs and compare video IDs or positions between datasets.
Why are some fields empty?
YouTube does not show every metadata field for every playlist row. Empty fields mean the public page did not expose that value.
Troubleshooting
If a run returns no items, confirm that the playlist URL contains a list= parameter.
If the playlist opens only after login, the actor cannot access it as public data.
If a playlist is very large, reduce the limit for a first test run.
If YouTube temporarily blocks your run environment, try enabling Apify Proxy.
Related Actors
Other useful actors from the same catalog:
-
YouTube Channel Videos Scraper — Collect recent public YouTube channel video metadata, without promising a complete historical archive.
-
YouTube Search Results Scraper — Collect public YouTube search-result metadata for supported video, channel or playlist searches.
-
YouTube Comments Scraper — Collect available public YouTube video comments and exposed replies.
-
YouTube Transcript Scraper — Collect available YouTube caption text and conditional timing from known video URLs.
-
YouTube Video Details Scraper — Collect public YouTube video metadata and available engagement from known video URLs.
Use related scrapers when you need data outside playlist video inventories.
Support and feedback
For custom additions or integrations, email hello@fetchcat.dev.
Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.
Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.
Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.
Made with care for curious people, AI agents and the possibilities in data. ♥