# YouTube Channel About, Playlists & Posts Finder (`dataspryva/youtube-channel-about-playlists-and-posts-finder`) Actor

Look up a YouTube channel's About page details - subscribers, views, country, join date, links - with optional playlist and Community Post snapshots nested into the same row. No cookies or login required.

- **URL**: https://apify.com/dataspryva/youtube-channel-about-playlists-and-posts-finder.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (community)
- **Categories:** Social media, Videos, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## YouTube Channel About, Playlists & Posts Finder

A YouTube channel page hides its most useful facts behind three different tabs. This actor reads the public About panel, the Playlists tab (including shows, courses, and podcasts), and the Community Posts tab in one cookieless run — then returns clean rows you can filter, compare, or export.

### What this actor does

- Resolves a channel from an `@handle`, a full channel URL, or a raw `UC…` channel ID.
- Collects the public About details: description, subscriber and video counts, total views, country, join date, external links, avatar, banner, verification badge, family-safe flag, RSS URL, and owner keywords.
- Lists every public playlist, show, course, and podcast on a channel with its item count, thumbnail, first video, and last-updated text.
- Lists public Community Posts with text, images, videos, polls, quizzes, shared playlists, and reposts — plus optional exact publish dates, exact likes, and public comments.
- Follows YouTube's continuation pages until the requested limit or the real end of the tab.
- Emits an explanatory status row when a channel has no such tab or no public rows, instead of returning silence.

### Modes

| Mode | One row per… | Best for |
|---|---|---|
| `profiles` | Channel | A profile table with optional nested playlist and post snapshots |
| `playlists` | Playlist / show / course / podcast | Building a catalog of a channel's collections |
| `posts` | Community Post | Content research, engagement tracking, and giveaway or poll analysis |

All rows include `recordType`, `channelId`, `channelName`, `channelHandle`, `channelUrl`, and `scrapedAt`, so rows from different modes can be combined in one dataset.

### Channel profile fields

| Field | Description |
|---|---|
| `channelId` | Channel's `UC…` ID |
| `channelName` | Display name |
| `handle` | Public `@handle` |
| `channelUrl` | Canonical channel URL |
| `description` | Full About-panel description |
| `subscriberCountText`, `subscriberCount` | Subscriber label as shown, and an exact integer only when YouTube shows an exact number |
| `videoCountText`, `videoCount` | Video count as shown, and exact integer when available |
| `totalViewsText`, `totalViews` | Total channel views |
| `country`, `countryCode` | Country name from About and its ISO 3166-1 alpha-2 code |
| `joinedDateText`, `joinedDate` | Join date as shown and as `YYYY-MM-DD` |
| `avatarUrl`, `bannerUrl` | Channel avatar and banner images |
| `isVerified`, `isFamilySafe` | Public badges and family-safe flag |
| `keywords` | Owner-set channel keywords, when present |
| `rssUrl` | Channel RSS URL (metadata only; the feed is not used as a data path) |
| `links` | External links from About, each with `title`, `url`, and `faviconUrl` |
| `playlists` | Nested playlist snapshot when `includePlaylists` is on |
| `communityPosts` | Nested post snapshot when `includePosts` is on |
| `surfaceStatus` | Explains an empty optional surface (`no_playlists_tab`, `no_posts_tab`, `no_public_playlists`, `no_public_posts`, `unavailable`) |

### Playlist row fields

`playlistId`, `playlistUrl`, `playlistType` (`playlist`, `show`, `course`, `podcast`), `title`, `videoCountText`, `videoCount`, `thumbnailUrl`, `thumbnailSources`, `firstVideoId`, `firstVideoUrl`, `watchUrl`, `lastUpdatedText`, `contentType`, `metadataRowsRaw`, plus channel context and `scrapedAt`.

Counts cover videos, episodes, and items (for example `28 episodes`), so podcast shows and courses are not dropped.

### Community Post row fields

`postId`, `postUrl`, `postType` (`text`, `image`, `video`, `poll`, `quiz`, `playlist`, `repost`), `authorName`, `authorChannelId`, `contentText`, `publishedTimeText`, `publishedAt` (exact ISO date), `voteCountText`, `likeCount` (exact), `commentCountText`, `commentCount`, `commentsDisabled`, `images`, `imageDetails`, `videoAttachments`, `poll`, `quiz`, `playlist`, `sharedPost`, `comments`, plus channel context and `scrapedAt`.

- Image rows keep one URL per image (the largest resolution), not every thumbnail size.
- Poll rows include choice text, optional choice images, and the total vote count.
- Quiz rows include the choices, correct answers, and explanations when YouTube exposes them.
- Repost rows keep the original post inside `sharedPost`.
- `comments` contains public top-level comments when comments are enabled.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | Select | `profiles` | Channel profiles, channel playlists, or Community Posts |
| `channelUrls` | Array | – | Required. Channel URLs, `@handles`, or `UC…` IDs |
| `includeLinks` | Boolean | `true` | Include About-page external links in profile mode |
| `includePlaylists` | Boolean | `false` | Nest a playlist snapshot in each profile row |
| `maxPlaylists` | Integer | `20` | Maximum playlists per channel (1–10000) |
| `includePosts` | Boolean | `false` | Nest a Community Post snapshot in each profile row |
| `maxPosts` | Integer | `20` | Maximum posts per channel (YouTube exposes at most 200) |
| `includePostDetails` | Boolean | `true` | Fetch exact post date and like count (one request per post) |
| `includePostComments` | Boolean | `false` | Collect public comments on each post |
| `maxPostComments` | Integer | `20` | Maximum top-level comments per post (1–1000) |

#### Example: profile only

```json
{
  "mode": "profiles",
  "channelUrls": ["@MrBeast"],
  "includeLinks": true
}
```

#### Example: profile with nested playlists and posts

```json
{
  "mode": "profiles",
  "channelUrls": ["@MrBeast"],
  "includePlaylists": true,
  "maxPlaylists": 10,
  "includePosts": true,
  "maxPosts": 5,
  "includePostDetails": true
}
```

#### Example: every public playlist on two channels

```json
{
  "mode": "playlists",
  "channelUrls": ["@Fireship", "@Kurzgesagt"],
  "maxPlaylists": 100
}
```

#### Example: posts with exact engagement and comments

```json
{
  "mode": "posts",
  "channelUrls": ["@MrBeast"],
  "maxPosts": 10,
  "includePostDetails": true,
  "includePostComments": true,
  "maxPostComments": 20
}
```

### Output views

The dataset ships three table views: **Channel profiles**, **Playlists & collections**, and **Community posts**. Each view shows only the fields relevant to that row type; records from different modes can share one dataset.

### Use cases

- **Creator discovery and partnerships** — shortlist channels by audience size, country, and public contact links.
- **Market research** — compare subscriber, video, and total-view figures across competitors in one table.
- **Content teams** — audit which channels still post Community updates, run polls, or publish quizzes.
- **Catalog building** — pull every playlist, show, course, and podcast a channel publishes.
- **Campaign tracking** — re-run the same channels and compare exact post likes and publish dates over time.

### FAQ

**Which channel identifiers can I use?**
An `@handle`, a full channel URL (including `/about`, `/playlists`, or `/posts`), or a raw `UC…` channel ID. Duplicate inputs are collapsed.

**Why are some fields missing for a channel?**
A field appears only when YouTube publishes it. A channel with a hidden subscriber count, no listed country, or no banner simply omits those fields instead of guessing.

**Why does a channel return no playlists or posts?**
Some channels have no Playlists or Posts tab. The actor emits a status row that says `no_playlists_tab` or `no_posts_tab`, so an empty result is explained.

**Why do some counts show only text?**
YouTube rounds large subscriber counts (`525M`). The actor keeps the displayed text and only fills the numeric field when the displayed value is exact. Compact values are never expanded into a fake precise number.

**How many posts can I get?**
YouTube's public Posts tab stops at 200 posts per channel. Older posts are only reachable through their own URLs, so `maxPosts` is capped there and the run message says so when a larger limit was requested.

**Do I need cookies or a login?**
No. Every surface is public. The actor uses YouTube's public pages and its automatic proxy fallback when a datacenter request is degraded.

**Are comments and replies included?**
`includePostComments` collects public top-level comments. Replies are not expanded in this actor; use a dedicated comment scraper when you need full reply trees.

**Is this affiliated with YouTube?**
No. This actor independently reads public YouTube pages and is not affiliated with or endorsed by YouTube or Google.

# Actor input Schema

## `mode` (type: `string`):

Channel profile returns one row per channel with its About details. Playlists returns one row per public playlist, show, course, or podcast. Posts returns one row per public Community Post.

## `channelUrls` (type: `array`):

Public YouTube channel URLs, @handles, or UC… channel IDs. One row set is produced for each channel.

## `includeLinks` (type: `boolean`):

In channel profile mode, include the external links shown on the public About page, with their titles and favicons.

## `includePlaylists` (type: `boolean`):

In channel profile mode, add a snapshot of the channel's public playlists, shows, courses, and podcasts to the same row. Use the playlists mode for one row per playlist.

## `maxPlaylists` (type: `integer`):

Maximum playlist, show, course, or podcast rows to collect per channel. Applies to the playlists mode and to nested profile snapshots.

## `includePosts` (type: `boolean`):

In channel profile mode, add a snapshot of the channel's public Community Posts to the same row. Use the posts mode for one row per post.

## `maxPosts` (type: `integer`):

Maximum Community Posts to collect per channel. Applies to the posts mode and to nested profile snapshots. YouTube exposes at most 200 posts per channel.

## `includePostDetails` (type: `boolean`):

Open each Community Post's public detail page to fill its exact ISO publish date and exact like count. Adds one request per post.

## `includePostComments` (type: `boolean`):

Collect public comments on each Community Post, up to the per-post limit. Adds one detail and one or more comment requests per post.

## `maxPostComments` (type: `integer`):

Maximum public top-level comments to keep per Community Post when comments are included. Replies are not expanded.

## Actor input object example

```json
{
  "mode": "profiles",
  "channelUrls": [
    "https://www.youtube.com/@Apify"
  ],
  "includeLinks": true,
  "includePlaylists": false,
  "maxPlaylists": 10,
  "includePosts": false,
  "maxPosts": 10,
  "includePostDetails": false,
  "includePostComments": false,
  "maxPostComments": 10
}
```

# Actor output Schema

## `profiles` (type: `string`):

Dataset containing channel profile rows, playlist/show/course rows, Community Post rows, and explanatory status rows.

# 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 = {
    "mode": "profiles",
    "channelUrls": [
        "https://www.youtube.com/@Apify"
    ],
    "includeLinks": true,
    "includePlaylists": false,
    "maxPlaylists": 10,
    "includePosts": false,
    "maxPosts": 10,
    "includePostDetails": false,
    "includePostComments": false,
    "maxPostComments": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/youtube-channel-about-playlists-and-posts-finder").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 = {
    "mode": "profiles",
    "channelUrls": ["https://www.youtube.com/@Apify"],
    "includeLinks": True,
    "includePlaylists": False,
    "maxPlaylists": 10,
    "includePosts": False,
    "maxPosts": 10,
    "includePostDetails": False,
    "includePostComments": False,
    "maxPostComments": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/youtube-channel-about-playlists-and-posts-finder").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 '{
  "mode": "profiles",
  "channelUrls": [
    "https://www.youtube.com/@Apify"
  ],
  "includeLinks": true,
  "includePlaylists": false,
  "maxPlaylists": 10,
  "includePosts": false,
  "maxPosts": 10,
  "includePostDetails": false,
  "includePostComments": false,
  "maxPostComments": 10
}' |
apify call dataspryva/youtube-channel-about-playlists-and-posts-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/youtube-channel-about-playlists-and-posts-finder"
        }
    }
}
```

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/pYQ5f68fSR1uvbb6D/builds/HY5JkbjyCn2pfM7Xf/openapi.json
