# YouTube Playlist Details – Metadata, Owner & Counts (`scrapingmonkey/youtube-playlist-details-scraper`) Actor

Extract YouTube playlist metadata from full links. Get titles, descriptions, owner details, counts, thumbnails, and available visibility information in one row per playlist.

- **URL**: https://apify.com/scrapingmonkey/youtube-playlist-details-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

Describe a YouTube playlist before collecting or reviewing its videos. **YouTube Playlist Details Scraper** returns the title, description, owner, thumbnail images, displayed counts, and available visibility information from a playlist link.

Each submitted playlist produces one result row with its original input and status. No YouTube account or cookies are required.

| At a glance | Details |
| --- | --- |
| 📥 Input | Full YouTube URLs containing list |
| 📤 Output | Playlist title, description, owner, counts, thumbnails, and available visibility metadata |
| 🔐 Login required | No |
| 📄 Collection | One metadata lookup per input |
| 💾 Delivery | One row per playlist result, in one table |

### What the YouTube playlist details scraper collects 🔎

The Actor reads the metadata attached to a known playlist rather than expanding its video entries.

- Playlist ID, URL, canonical URL, title, and description
- Video and view counts with YouTube's displayed labels
- Update text, thumbnail URL, and available thumbnail sizes
- Owner channel identity and available avatar details
- Exposed unlisted, family-safety, and country-availability metadata
- Links and hashtags found in the description

Use the Playlist Videos Actor when you need one row for each item inside the playlist.

### How to scrape YouTube playlist details 🚀

1. Prepare the full playlist links you want to collect.
2. Add them to `inputList`, one value per item.
3. Start the Actor.
4. Check `status` and export the fields needed for your workflow.

```json
{
  "inputList": [
    "https://www.youtube.com/playlist?list=PL2aBZuCeDwlRxnw-jDj51gmtBuCVZbsaZ"
  ]
}
```

### YouTube playlist details data fields and output 📦

| Field group | Included data |
| --- | --- |
| Playlist | ID, URLs, title, and description |
| Counts and updates | Video and view counts, original labels, and update text |
| Owner and images | Channel identity, avatar references, and playlist thumbnails |
| Visibility | Public/unlisted classification and exposed availability flags |
| Description references | Extracted links and hashtags |

Complete illustrative success item. The fictional values below demonstrate the output and are not a live result:

```json
{
  "input": "https://www.youtube.com/playlist?list=PLtrailjournalroutes2026",
  "status": "success",
  "id": "PLtrailjournalroutes2026",
  "url": "https://www.youtube.com/playlist?list=PLtrailjournalroutes2026",
  "canonical_url": "https://www.youtube.com/playlist?list=PLtrailjournalroutes2026",
  "title": "Weekend Trail Guides",
  "description": "#hiking Route guides: https://example.com/trail",
  "thumbnail_url": "https://example.com/trail-large.jpg",
  "thumbnails.url": [
    "https://example.com/trail-small.jpg",
    "https://example.com/trail-large.jpg"
  ],
  "thumbnails.width": [
    160,
    1280
  ],
  "thumbnails.height": [
    90,
    720
  ],
  "videos_count": 25,
  "videos_count_text": "25 videos",
  "views": 500000,
  "views_text": "500K views",
  "updated_text": "Last updated yesterday",
  "privacy": "public",
  "is_unlisted": false,
  "is_family_safe": true,
  "available_countries": [
    "US",
    "GB"
  ],
  "author.id": "UCabcdefghijklmnopqrstuv",
  "author.name": "Trail Journal",
  "author.handle": "@TrailJournal",
  "author.url": "https://www.youtube.com/@TrailJournal",
  "author.avatar_url": "https://example.com/trail-large.jpg",
  "author.avatar_thumbnails.url": [
    "https://example.com/trail-small.jpg",
    "https://example.com/trail-large.jpg"
  ],
  "author.avatar_thumbnails.width": [
    160,
    800
  ],
  "author.avatar_thumbnails.height": [
    160,
    800
  ],
  "author.is_verified": false,
  "description_links": [
    "https://example.com/trail"
  ],
  "hashtags": [
    "#hiking"
  ]
}
```

The table and JSON use the same flat field names, including literal dotted keys. Thumbnail and author-avatar fields keep URL, width, and height values aligned by position. Description links, hashtags, and available countries remain lists in the playlist's row.

Optional values can be `null`, empty strings, `false`, or empty lists. Missing counts are normally `null`; numeric values parsed from abbreviated labels remain approximate. Failed rows preserve `input` and `status` and set the result-data fields to `null`.

### Input requirements and coverage ⚙️

| Parameter | Type | Default | Rules |
| --- | --- | --- | --- |
| `inputList` | array of strings | Required | One or more full YouTube URLs containing a valid list parameter. Raw playlist IDs are not accepted. No fixed batch-size maximum. |

Playlist, watch, and youtu.be links are accepted when they include list. The playlist ID must contain at least eight letters, digits, underscores, or hyphens. Output uses a canonical youtube.com/playlist URL.

There is no pagination parameter. Each input starts its own lookup, so repeating an input can produce another row.

### YouTube playlist details use cases 🎯

#### Playlist catalogues

Build a searchable directory of known playlists with titles, descriptions, owner links, and thumbnail references.

#### Curation review

Compare descriptions, displayed video counts, and update labels before selecting playlists for a learning or editorial collection.

#### Owner attribution

Keep playlist ownership and canonical links beside records in a content catalogue.

#### Playlist snapshots

Compare repeated exports to identify changes in a known playlist's title, description, or displayed counts.

### Pricing and billable playlist rows 💰

Check the Actor's **Pricing** tab for the current pricing model and rate.

Under dataset-item pricing, each saved success or failed row can be billable. Automatic retry attempts do not independently add rows. A successful lookup saves one metadata row for its input. Invalid or unavailable inputs save failed rows, and repeated input entries can each produce a result.

Image variants and other list fields remain in their parent row and do not create separate dataset items.

### YouTube Playlist Details Scraper API and integrations 🔌

Use the Actor ID from the **API** tab as $ACTOR\_ID and your Apify token as $APIFY\_TOKEN.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["https://www.youtube.com/playlist?list=PL2aBZuCeDwlRxnw-jDj51gmtBuCVZbsaZ"]}'
```

The request starts a run. Retrieve the dataset when it finishes, or use a completion webhook to send results to your application. Apify schedules can repeat collection; exports and integrations support JSON, CSV, Excel, Google Sheets, Make, and Zapier workflows.

### Reliability and limits ⚠️

Up to five requests run concurrently, with automatic retries for temporary failures. Invalid, unavailable, or unresolved inputs are visible as failed rows. YouTube can restrict public access or omit fields.

A supplied unlisted playlist may be readable when YouTube makes it accessible by link. Private or removed playlists may fail. The privacy field uses public when the source does not signal unlisted, so retain is\_unlisted as well when interpreting visibility. Updated dates remain source text and public count labels may be rounded.

### Frequently asked questions ❓

#### Do I need a playlist URL or its raw ID?

Use a full YouTube URL containing the list parameter. Raw playlist IDs are not accepted.

#### Can I use a watch link that includes a playlist?

Yes. A supported YouTube watch or youtu.be link with a valid list parameter is resolved to the playlist.

#### Will the result include every video?

No. The row describes the playlist. Use YouTube Playlist Videos Scraper to collect its entries.

#### Can it read an unlisted playlist?

It can read a supplied unlisted link when YouTube exposes the playlist without authentication. It does not discover unlisted playlists.

#### Is updated\_text an exact timestamp?

No. It preserves YouTube's displayed update wording, which can be relative or absent.

### Support, responsible use, and related actors 🛟

For support, share the run ID and a safe public example input through the Actor's support channel. Keep tokens and credentials out of messages.

Use public data and media within the privacy, copyright, and other obligations that apply to your project.

# Actor input Schema

## `inputList` (type: `array`):

Add full YouTube URLs containing the list parameter, including playlist, watch, and youtu.be links. Raw playlist IDs are not accepted.

## Actor input object example

```json
{
  "inputList": [
    "https://www.youtube.com/playlist?list=PL2aBZuCeDwlRxnw-jDj51gmtBuCVZbsaZ"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

Success and failed rows. Check the status column.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "inputList": [
        "https://www.youtube.com/playlist?list=PL2aBZuCeDwlRxnw-jDj51gmtBuCVZbsaZ"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/youtube-playlist-details-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "inputList": ["https://www.youtube.com/playlist?list=PL2aBZuCeDwlRxnw-jDj51gmtBuCVZbsaZ"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/youtube-playlist-details-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "inputList": [
    "https://www.youtube.com/playlist?list=PL2aBZuCeDwlRxnw-jDj51gmtBuCVZbsaZ"
  ]
}' |
apify call scrapingmonkey/youtube-playlist-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/youtube-playlist-details-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/uS7VTciAbRzHt7Osu/builds/iigf1pRMjQE0Tdb0B/openapi.json
