# YouTube Channel Playbook: Titles & Thumbnails (`seasons-ai/youtube-channel-playbook`) Actor

Find which YouTube titles, thumbnails, topics, formats and upload days beat each channel's median, then get original video ideas for your channel.

- **URL**: https://apify.com/seasons-ai/youtube-channel-playbook.md
- **Developed by:** [Seasons AI](https://apify.com/seasons-ai) (community)
- **Categories:** AI, Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 analysed videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Playbook: Titles, Thumbnails & Video Ideas

You already scrape YouTube channels. This Actor tells you **which titles, thumbnails, topics, formats and upload days beat each channel's normal reach**, where your channel has **gaps** next to the others, and writes **original title + thumbnail + hook ideas** for your channel.

Give it the dataset of a [YouTube Scraper](https://apify.com/streamers/youtube-scraper) or [YouTube Channel Scraper](https://apify.com/streamers/youtube-channel-scraper) run on one or more public channels: yours and the ones you compete with. For every video it:

1. compares its views with **the median of the same channel's videos of the same format and age**, so a 2-day-old Short is not measured against a 2-year-old tutorial, and a 10K channel compares fairly with a 1M channel,
2. labels the **title**: number, question, how-to wording, curiosity gap, negative framing, length, ALL-CAPS, talks to "you", and its angle (tutorial, listicle, review, story, explainer, challenge…),
3. looks at the **thumbnail**: face or no face, facial expression, text on it, contrast, main subject, dominant colour, arrows/circles,
4. reads the **first 60 seconds of subtitles** when your dataset has them, to label the opening hook (videos are never downloaded),
5. groups all videos into **topic clusters** across channels.

Then, per channel, it shows what over-performs and under-performs, **Shorts vs long-form**, **upload cadence and best days**, and **gaps**: patterns that win on the other channels but that this channel rarely uses (with one channel: winners it under-uses). Finally it writes N video concepts for your channel brief.

Concepts take the **pattern**, never the words. The writer only gets labels, statistics and generic title templates (like *"\[EXPERT] reacts to \[N] \[TOPIC] mistakes"*), not real titles. Every concept is checked against all input titles, thumbnail text and subtitles: a concept that shares **any 5-word sequence**, or that mostly restates an existing title, is dropped and not charged.

### How to use

1. Run the **YouTube Scraper** on the channels you want to learn from (paste channel URLs in *Direct URLs*; set *Maximum videos* and *Maximum Shorts*). 30–100 videos per channel give useful medians. Optional: set *Transcription & subtitles* to **Only download subtitles** to also get the opening-hook analysis.
2. Open this Actor, pick that run's dataset in **YouTube scraper dataset**, type your channel's @handle in **Your channel** (if it is in the dataset), paste your **channel brief** and choose how many concepts you want.
3. Start. The Actor reads the dataset, checks the price against your run's maximum cost, and only then begins.

No dataset? Paste items in **Items** (YouTube Scraper JSON format) or link a JSON or CSV export in **Items URL**. The prefilled input is a 9-video synthetic demo of two fictional cooking channels, so the form runs as-is.

### Input

| Field | Required | Notes |
|---|---|---|
| `datasetId` | one of these three | Dataset of a YouTube Scraper or YouTube Channel Scraper run (picker in Console; via API pass the run's `defaultDatasetId`). Read-only access |
| `items` | | Items as JSON: `title`, `url`, `thumbnailUrl`, `viewCount`, `likes`, `commentsCount`, `date`, `duration`, `type` (`video` / `shorts` / `stream`), `channelName`, `channelUsername`, optional `subtitles` |
| `itemsUrl` | | Link to a JSON array or CSV export with the same fields |
| `myChannel` | no | Your channel's @handle, name or URL. Turns on the "your channel vs the others" view and aims the concepts at it |
| `maxVideos` | no | Default 200, max 1,000. Taken evenly across channels |
| `channelBrief` | when concepts > 0 | Niche, audience, tone, what you can film, goal, what to avoid (up to 4,000 characters) |
| `conceptsCount` | no | 0–30, default 10. 0 = analysis only |
| `language` | no | Language of concepts and takeaways. Default English |

```json
{
  "datasetId": "<your YouTube Scraper run's dataset ID>",
  "myChannel": "@yourchannel",
  "maxVideos": 200,
  "channelBrief": "Weeknight Meals: 30-minute one-pan dinners for busy people. Host cooks on camera at home. Friendly, practical, no chef jargon. Avoid clickbait we cannot deliver.",
  "conceptsCount": 10
}
```

### Output

**Dataset**: one row per video (from the demo run):

```json
{
  "status": "analyzed",
  "channel": "Demo Weeknight Meals",
  "isMyChannel": true,
  "title": "Why Your Stir Fry Is Soggy",
  "format": "long-form",
  "publishedAt": "2026-10-08T17:00:00.000Z",
  "views": 27500,
  "ageBucket": "7-30d",
  "uploadDay": "Thu",
  "baseline": "long-form, 7-30d old",
  "baselineMedianViews": 14000,
  "performanceIndex": 1.96,
  "performance": "over",
  "topicCluster": "stir fry cooking problem",
  "titleAngle": "explainer-why",
  "titleTemplate": "Why Your [FOOD] Is [NEGATIVE_OUTCOME]",
  "isQuestion": true,
  "curiosityGap": true,
  "negativeFraming": true,
  "titleLength": "≤30 chars",
  "thumbFace": "none",
  "thumbHasText": true,
  "thumbText": "SOGGY?",
  "thumbContrast": "high",
  "thumbFocus": "single-object-product",
  "thumbColour": "orange",
  "hookType": "no-transcript",
  "priceUsd": 0.004
}
```

With subtitles in the dataset, `transcriptFirst60s`, `hookType` (question, bold-claim, preview-payoff, story-open, problem-pain, surprising-fact, direct-address, cold-open-action…) and `hookPattern` are filled too.

**Key-value store**

| Record | Content |
|---|---|
| `playbook.md` | The playbook: key takeaways, a channel table, per channel Shorts vs long-form, cadence and best days, over- and under-performing patterns, gaps, top videos; topic clusters; your concepts; pattern tables for every label |
| `concepts.json` | Takeaways and concepts as JSON, each with the pattern evidence behind it |
| `channels.json` | All channel summaries and pattern statistics as JSON |
| `OUTPUT` | Counts, amount charged and links to the files above |

A concept (from the demo run):

```json
{
  "id": "C3",
  "title": "Meal Prep 3 Weeknight Dinners in One Go",
  "format": "long-form",
  "topicCluster": "meal prep for the week",
  "titleAngle": "how-to-tutorial",
  "titlePatterns": ["number", "curiosity-gap"],
  "thumbnail": {
    "description": "Three dinner components in containers beside a single pan on a small kitchen counter. Bright, high-contrast text labels the batch-cooking payoff.",
    "text": "ONE COOK, THREE DINNERS",
    "face": "none",
    "focus": "collage",
    "colour": "red",
    "contrast": "high"
  },
  "hookLine": "I'll show you how to prep three weeknight dinners in one cooking session, using supermarket ingredients and a single pan.",
  "whyItShouldWork": "A concrete number and useful meal-prep promise offer a clear plan, while the thumbnail makes the one-session payoff easy to understand.",
  "evidence": { "thumbText": { "value": "text on thumbnail", "videos": 3, "medianIndex": 1.22, "scope": "Demo Weeknight Meals" } }
}
```

### Pricing

Pay per event. Failed videos and dropped concepts are free.

| Event | Price |
|---|---|
| Video analysed | $0.004 |
| Concept written (title + thumbnail + hook line) | $0.01 |

Examples:

| Run | Price |
|---|---|
| 3 channels × 50 videos, 10 concepts | 150 × $0.004 + 10 × $0.01 = **$0.70** |
| 200 videos, 10 concepts (defaults) | **$0.90** |
| 100 videos, analysis only | **$0.40** |

The Actor computes the maximum price before it starts and stops, free of charge, if your run's maximum cost is lower.

Available on paid Apify plans.

### Limits and good to know

- On the free Apify plan the Actor returns a short preview with an example result and prices instead of running.
- Up to 1,000 videos and 30 concepts per run. Long datasets are capped at `maxVideos`, taken evenly across channels.
- Numbers (medians, indexes, lift, cadence) are computed in code from the scraper's public view, like and comment counts at scrape time, not by the AI. With few videos per pattern the results are hints: the playbook shows the number of videos behind every figure and a confidence level.
- Cadence is measured per format, because scrapers cap Videos and Shorts separately. Upload days and hours are in UTC. Relative dates from the YouTube Channel Scraper ("3 weeks ago") are approximate, so those videos are left out of the upload-day analysis; that scraper also has no likes, so engagement is empty.
- The opening hook is read only from subtitles that are already in your dataset (first 60 seconds). No video or audio is downloaded.
- Thumbnail and title labels come from an AI model and can be wrong on unusual images; thumbnail text is read from the image and can contain small errors.
- Concepts are ideas to test, not guarantees. They only claim what your brief supports, but check them before you film.
- Only public channel-level and content-level data is used and output: no comments, commenter names or channel contact details.
- Use it on public channels you are allowed to analyse and keep to YouTube's terms. Thumbnails are viewed in memory and never stored or re-hosted.

# Actor input Schema

## `datasetId` (type: `string`):

Pick the dataset of your YouTube Scraper run (streamers/youtube-scraper) or YouTube Channel Scraper run (streamers/youtube-channel-scraper) on one or more public channels: yours and the ones you compete with. Through the API, pass the run's defaultDatasetId. The Actor only reads it. Tip: in the YouTube Scraper turn on "Only download subtitles" to also get the opening 60 seconds of each video analysed. Leave empty to use Items or Items URL instead.

## `items` (type: `array`):

Video items as JSON in the YouTube Scraper format: title, url, thumbnailUrl, viewCount, likes, commentsCount, date, duration, type (video / shorts / stream), channelName, channelUsername, optional subtitles. Used when no dataset is picked. The prefill is a 9-video synthetic demo of two fictional cooking channels.

## `itemsUrl` (type: `string`):

Link to a JSON or CSV export of a YouTube scraper dataset (same fields as Items). Used when neither a dataset nor items are given.

## `myChannel` (type: `string`):

Your channel's @handle, name or URL, if it is in the dataset. The playbook then compares it with the other channels (gaps) and aims the concepts at it. Leave empty to compare all channels equally.

## `maxVideos` (type: `integer`):

Cap on videos analysed in this run, taken evenly across the channels in the dataset. Each analysed video is one charge.

## `channelBrief` (type: `string`):

What your channel is about, who watches it, tone, what you can film (on camera or not, budget, gear) and what to avoid. Required when Number of concepts is above 0.

## `conceptsCount` (type: `integer`):

How many original video concepts (title + thumbnail idea + opening hook line) to write from the winning patterns (0 = analysis only). Each concept is one charge.

## `language` (type: `string`):

Language of the concepts and takeaways, for example English, German, Spanish.

## `_previewAsFree` (type: `boolean`):

Owner-only test switch: return the free-plan preview instead of running. Ignored for every other account.

## Actor input object example

```json
{
  "items": [
    {
      "title": "I Tried 5 Cheap Knives. One Shocked Me",
      "type": "video",
      "url": "https://example.com/demo/kl1",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl1.jpg?signature=JRenYivYHxvmvSopDhqs",
      "viewCount": 48200,
      "likes": 2100,
      "commentsCount": 312,
      "date": "2026-10-02T15:00:00.000Z",
      "duration": "00:11:42",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "How to Cook Rice Perfectly Every Time",
      "type": "video",
      "url": "https://example.com/demo/kl2",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl2.jpg?signature=qYb9zZFOMS1vgAT3RsRV",
      "viewCount": 21400,
      "likes": 880,
      "commentsCount": 95,
      "date": "2026-10-09T15:00:00.000Z",
      "duration": "00:08:15",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "Kitchen Lab Q&A: Your Questions Answered",
      "type": "video",
      "url": "https://example.com/demo/kl3",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl3.jpg?signature=1GmdHhDYXICv63FSeTTdX",
      "viewCount": 6200,
      "likes": 240,
      "commentsCount": 61,
      "date": "2026-10-16T15:00:00.000Z",
      "duration": "00:21:03",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "Stop Ruining Your Pasta (3 Mistakes)",
      "type": "video",
      "url": "https://example.com/demo/kl4",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl4.jpg?signature=1QblQqnu7vFveYAhQvKO7",
      "viewCount": 39100,
      "likes": 1650,
      "commentsCount": 204,
      "date": "2026-10-23T15:00:00.000Z",
      "duration": "00:09:30",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "the 10-second garlic trick",
      "type": "shorts",
      "url": "https://example.com/demo/kl5",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl5.jpg?signature=JnhbTBlBngg7CTxdF59d",
      "viewCount": 15300,
      "likes": 900,
      "commentsCount": 22,
      "date": "2026-10-25T18:00:00.000Z",
      "duration": "00:00:24",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "Easy Weeknight Dinner Ideas",
      "type": "video",
      "url": "https://example.com/demo/wm1",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm1.jpg?signature=wvHi1RBeLqTJfaC7ReMn",
      "viewCount": 9800,
      "likes": 310,
      "commentsCount": 28,
      "date": "2026-10-01T17:00:00.000Z",
      "duration": "00:14:10",
      "channelName": "Demo Weeknight Meals",
      "channelUsername": "demo_weeknight_meals",
      "channelUrl": "https://example.com/demo/weeknight-meals",
      "numberOfSubscribers": 21000
    },
    {
      "title": "Why Your Stir Fry Is Soggy",
      "type": "video",
      "url": "https://example.com/demo/wm2",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm2.jpg?signature=fY4Wb7dXabZSz5J7Ub42",
      "viewCount": 27500,
      "likes": 1200,
      "commentsCount": 140,
      "date": "2026-10-08T17:00:00.000Z",
      "duration": "00:07:48",
      "channelName": "Demo Weeknight Meals",
      "channelUsername": "demo_weeknight_meals",
      "channelUrl": "https://example.com/demo/weeknight-meals",
      "numberOfSubscribers": 21000
    },
    {
      "title": "Meal Prep for the Week in 1 Hour",
      "type": "video",
      "url": "https://example.com/demo/wm3",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm3.jpg?signature=1J8PWi0wi3PflW6aQdjp1",
      "viewCount": 14000,
      "likes": 520,
      "commentsCount": 47,
      "date": "2026-10-15T17:00:00.000Z",
      "duration": "00:12:20",
      "channelName": "Demo Weeknight Meals",
      "channelUsername": "demo_weeknight_meals",
      "channelUrl": "https://example.com/demo/weeknight-meals",
      "numberOfSubscribers": 21000
    },
    {
      "title": "fastest fried egg ever?",
      "type": "shorts",
      "url": "https://example.com/demo/wm4",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm4.jpg?signature=1mjjEHNxB5M6OPFVip0TR",
      "viewCount": 22000,
      "likes": 1400,
      "commentsCount": 35,
      "date": "2026-10-22T18:00:00.000Z",
      "duration": "00:00:18",
      "channelName": "Demo Weeknight Meals",
      "channelUsername": "demo_weeknight_meals",
      "channelUrl": "https://example.com/demo/weeknight-meals",
      "numberOfSubscribers": 21000
    }
  ],
  "myChannel": "@demo_weeknight_meals",
  "maxVideos": 200,
  "channelBrief": "Weeknight Meals is a cooking channel for busy people who want dinner on the table in 30 minutes with one pan and supermarket ingredients. Host cooks on camera in a small home kitchen. Tone: friendly, practical, a bit funny, no chef jargon. Goal: more subscribers and longer watch time. Avoid: clickbait we cannot deliver, expensive gadgets, diet claims.",
  "conceptsCount": 5,
  "language": "English"
}
```

# Actor output Schema

## `videos` (type: `string`):

No description

## `playbook` (type: `string`):

No description

## `concepts` (type: `string`):

No description

## `channels` (type: `string`):

No description

# 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 = {
    "items": [
        {
            "title": "I Tried 5 Cheap Knives. One Shocked Me",
            "type": "video",
            "url": "https://example.com/demo/kl1",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl1.jpg?signature=JRenYivYHxvmvSopDhqs",
            "viewCount": 48200,
            "likes": 2100,
            "commentsCount": 312,
            "date": "2026-10-02T15:00:00.000Z",
            "duration": "00:11:42",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000
        },
        {
            "title": "How to Cook Rice Perfectly Every Time",
            "type": "video",
            "url": "https://example.com/demo/kl2",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl2.jpg?signature=qYb9zZFOMS1vgAT3RsRV",
            "viewCount": 21400,
            "likes": 880,
            "commentsCount": 95,
            "date": "2026-10-09T15:00:00.000Z",
            "duration": "00:08:15",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000
        },
        {
            "title": "Kitchen Lab Q&A: Your Questions Answered",
            "type": "video",
            "url": "https://example.com/demo/kl3",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl3.jpg?signature=1GmdHhDYXICv63FSeTTdX",
            "viewCount": 6200,
            "likes": 240,
            "commentsCount": 61,
            "date": "2026-10-16T15:00:00.000Z",
            "duration": "00:21:03",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000
        },
        {
            "title": "Stop Ruining Your Pasta (3 Mistakes)",
            "type": "video",
            "url": "https://example.com/demo/kl4",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl4.jpg?signature=1QblQqnu7vFveYAhQvKO7",
            "viewCount": 39100,
            "likes": 1650,
            "commentsCount": 204,
            "date": "2026-10-23T15:00:00.000Z",
            "duration": "00:09:30",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000
        },
        {
            "title": "the 10-second garlic trick",
            "type": "shorts",
            "url": "https://example.com/demo/kl5",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl5.jpg?signature=JnhbTBlBngg7CTxdF59d",
            "viewCount": 15300,
            "likes": 900,
            "commentsCount": 22,
            "date": "2026-10-25T18:00:00.000Z",
            "duration": "00:00:24",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000
        },
        {
            "title": "Easy Weeknight Dinner Ideas",
            "type": "video",
            "url": "https://example.com/demo/wm1",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm1.jpg?signature=wvHi1RBeLqTJfaC7ReMn",
            "viewCount": 9800,
            "likes": 310,
            "commentsCount": 28,
            "date": "2026-10-01T17:00:00.000Z",
            "duration": "00:14:10",
            "channelName": "Demo Weeknight Meals",
            "channelUsername": "demo_weeknight_meals",
            "channelUrl": "https://example.com/demo/weeknight-meals",
            "numberOfSubscribers": 21000
        },
        {
            "title": "Why Your Stir Fry Is Soggy",
            "type": "video",
            "url": "https://example.com/demo/wm2",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm2.jpg?signature=fY4Wb7dXabZSz5J7Ub42",
            "viewCount": 27500,
            "likes": 1200,
            "commentsCount": 140,
            "date": "2026-10-08T17:00:00.000Z",
            "duration": "00:07:48",
            "channelName": "Demo Weeknight Meals",
            "channelUsername": "demo_weeknight_meals",
            "channelUrl": "https://example.com/demo/weeknight-meals",
            "numberOfSubscribers": 21000
        },
        {
            "title": "Meal Prep for the Week in 1 Hour",
            "type": "video",
            "url": "https://example.com/demo/wm3",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm3.jpg?signature=1J8PWi0wi3PflW6aQdjp1",
            "viewCount": 14000,
            "likes": 520,
            "commentsCount": 47,
            "date": "2026-10-15T17:00:00.000Z",
            "duration": "00:12:20",
            "channelName": "Demo Weeknight Meals",
            "channelUsername": "demo_weeknight_meals",
            "channelUrl": "https://example.com/demo/weeknight-meals",
            "numberOfSubscribers": 21000
        },
        {
            "title": "fastest fried egg ever?",
            "type": "shorts",
            "url": "https://example.com/demo/wm4",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm4.jpg?signature=1mjjEHNxB5M6OPFVip0TR",
            "viewCount": 22000,
            "likes": 1400,
            "commentsCount": 35,
            "date": "2026-10-22T18:00:00.000Z",
            "duration": "00:00:18",
            "channelName": "Demo Weeknight Meals",
            "channelUsername": "demo_weeknight_meals",
            "channelUrl": "https://example.com/demo/weeknight-meals",
            "numberOfSubscribers": 21000
        }
    ],
    "myChannel": "@demo_weeknight_meals",
    "channelBrief": "Weeknight Meals is a cooking channel for busy people who want dinner on the table in 30 minutes with one pan and supermarket ingredients. Host cooks on camera in a small home kitchen. Tone: friendly, practical, a bit funny, no chef jargon. Goal: more subscribers and longer watch time. Avoid: clickbait we cannot deliver, expensive gadgets, diet claims.",
    "conceptsCount": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("seasons-ai/youtube-channel-playbook").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 = {
    "items": [
        {
            "title": "I Tried 5 Cheap Knives. One Shocked Me",
            "type": "video",
            "url": "https://example.com/demo/kl1",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl1.jpg?signature=JRenYivYHxvmvSopDhqs",
            "viewCount": 48200,
            "likes": 2100,
            "commentsCount": 312,
            "date": "2026-10-02T15:00:00.000Z",
            "duration": "00:11:42",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000,
        },
        {
            "title": "How to Cook Rice Perfectly Every Time",
            "type": "video",
            "url": "https://example.com/demo/kl2",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl2.jpg?signature=qYb9zZFOMS1vgAT3RsRV",
            "viewCount": 21400,
            "likes": 880,
            "commentsCount": 95,
            "date": "2026-10-09T15:00:00.000Z",
            "duration": "00:08:15",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000,
        },
        {
            "title": "Kitchen Lab Q&A: Your Questions Answered",
            "type": "video",
            "url": "https://example.com/demo/kl3",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl3.jpg?signature=1GmdHhDYXICv63FSeTTdX",
            "viewCount": 6200,
            "likes": 240,
            "commentsCount": 61,
            "date": "2026-10-16T15:00:00.000Z",
            "duration": "00:21:03",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000,
        },
        {
            "title": "Stop Ruining Your Pasta (3 Mistakes)",
            "type": "video",
            "url": "https://example.com/demo/kl4",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl4.jpg?signature=1QblQqnu7vFveYAhQvKO7",
            "viewCount": 39100,
            "likes": 1650,
            "commentsCount": 204,
            "date": "2026-10-23T15:00:00.000Z",
            "duration": "00:09:30",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000,
        },
        {
            "title": "the 10-second garlic trick",
            "type": "shorts",
            "url": "https://example.com/demo/kl5",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl5.jpg?signature=JnhbTBlBngg7CTxdF59d",
            "viewCount": 15300,
            "likes": 900,
            "commentsCount": 22,
            "date": "2026-10-25T18:00:00.000Z",
            "duration": "00:00:24",
            "channelName": "Demo Kitchen Lab",
            "channelUsername": "demo_kitchen_lab",
            "channelUrl": "https://example.com/demo/kitchen-lab",
            "numberOfSubscribers": 48000,
        },
        {
            "title": "Easy Weeknight Dinner Ideas",
            "type": "video",
            "url": "https://example.com/demo/wm1",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm1.jpg?signature=wvHi1RBeLqTJfaC7ReMn",
            "viewCount": 9800,
            "likes": 310,
            "commentsCount": 28,
            "date": "2026-10-01T17:00:00.000Z",
            "duration": "00:14:10",
            "channelName": "Demo Weeknight Meals",
            "channelUsername": "demo_weeknight_meals",
            "channelUrl": "https://example.com/demo/weeknight-meals",
            "numberOfSubscribers": 21000,
        },
        {
            "title": "Why Your Stir Fry Is Soggy",
            "type": "video",
            "url": "https://example.com/demo/wm2",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm2.jpg?signature=fY4Wb7dXabZSz5J7Ub42",
            "viewCount": 27500,
            "likes": 1200,
            "commentsCount": 140,
            "date": "2026-10-08T17:00:00.000Z",
            "duration": "00:07:48",
            "channelName": "Demo Weeknight Meals",
            "channelUsername": "demo_weeknight_meals",
            "channelUrl": "https://example.com/demo/weeknight-meals",
            "numberOfSubscribers": 21000,
        },
        {
            "title": "Meal Prep for the Week in 1 Hour",
            "type": "video",
            "url": "https://example.com/demo/wm3",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm3.jpg?signature=1J8PWi0wi3PflW6aQdjp1",
            "viewCount": 14000,
            "likes": 520,
            "commentsCount": 47,
            "date": "2026-10-15T17:00:00.000Z",
            "duration": "00:12:20",
            "channelName": "Demo Weeknight Meals",
            "channelUsername": "demo_weeknight_meals",
            "channelUrl": "https://example.com/demo/weeknight-meals",
            "numberOfSubscribers": 21000,
        },
        {
            "title": "fastest fried egg ever?",
            "type": "shorts",
            "url": "https://example.com/demo/wm4",
            "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm4.jpg?signature=1mjjEHNxB5M6OPFVip0TR",
            "viewCount": 22000,
            "likes": 1400,
            "commentsCount": 35,
            "date": "2026-10-22T18:00:00.000Z",
            "duration": "00:00:18",
            "channelName": "Demo Weeknight Meals",
            "channelUsername": "demo_weeknight_meals",
            "channelUrl": "https://example.com/demo/weeknight-meals",
            "numberOfSubscribers": 21000,
        },
    ],
    "myChannel": "@demo_weeknight_meals",
    "channelBrief": "Weeknight Meals is a cooking channel for busy people who want dinner on the table in 30 minutes with one pan and supermarket ingredients. Host cooks on camera in a small home kitchen. Tone: friendly, practical, a bit funny, no chef jargon. Goal: more subscribers and longer watch time. Avoid: clickbait we cannot deliver, expensive gadgets, diet claims.",
    "conceptsCount": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("seasons-ai/youtube-channel-playbook").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 '{
  "items": [
    {
      "title": "I Tried 5 Cheap Knives. One Shocked Me",
      "type": "video",
      "url": "https://example.com/demo/kl1",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl1.jpg?signature=JRenYivYHxvmvSopDhqs",
      "viewCount": 48200,
      "likes": 2100,
      "commentsCount": 312,
      "date": "2026-10-02T15:00:00.000Z",
      "duration": "00:11:42",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "How to Cook Rice Perfectly Every Time",
      "type": "video",
      "url": "https://example.com/demo/kl2",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl2.jpg?signature=qYb9zZFOMS1vgAT3RsRV",
      "viewCount": 21400,
      "likes": 880,
      "commentsCount": 95,
      "date": "2026-10-09T15:00:00.000Z",
      "duration": "00:08:15",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "Kitchen Lab Q&A: Your Questions Answered",
      "type": "video",
      "url": "https://example.com/demo/kl3",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl3.jpg?signature=1GmdHhDYXICv63FSeTTdX",
      "viewCount": 6200,
      "likes": 240,
      "commentsCount": 61,
      "date": "2026-10-16T15:00:00.000Z",
      "duration": "00:21:03",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "Stop Ruining Your Pasta (3 Mistakes)",
      "type": "video",
      "url": "https://example.com/demo/kl4",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl4.jpg?signature=1QblQqnu7vFveYAhQvKO7",
      "viewCount": 39100,
      "likes": 1650,
      "commentsCount": 204,
      "date": "2026-10-23T15:00:00.000Z",
      "duration": "00:09:30",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "the 10-second garlic trick",
      "type": "shorts",
      "url": "https://example.com/demo/kl5",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/kl5.jpg?signature=JnhbTBlBngg7CTxdF59d",
      "viewCount": 15300,
      "likes": 900,
      "commentsCount": 22,
      "date": "2026-10-25T18:00:00.000Z",
      "duration": "00:00:24",
      "channelName": "Demo Kitchen Lab",
      "channelUsername": "demo_kitchen_lab",
      "channelUrl": "https://example.com/demo/kitchen-lab",
      "numberOfSubscribers": 48000
    },
    {
      "title": "Easy Weeknight Dinner Ideas",
      "type": "video",
      "url": "https://example.com/demo/wm1",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm1.jpg?signature=wvHi1RBeLqTJfaC7ReMn",
      "viewCount": 9800,
      "likes": 310,
      "commentsCount": 28,
      "date": "2026-10-01T17:00:00.000Z",
      "duration": "00:14:10",
      "channelName": "Demo Weeknight Meals",
      "channelUsername": "demo_weeknight_meals",
      "channelUrl": "https://example.com/demo/weeknight-meals",
      "numberOfSubscribers": 21000
    },
    {
      "title": "Why Your Stir Fry Is Soggy",
      "type": "video",
      "url": "https://example.com/demo/wm2",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm2.jpg?signature=fY4Wb7dXabZSz5J7Ub42",
      "viewCount": 27500,
      "likes": 1200,
      "commentsCount": 140,
      "date": "2026-10-08T17:00:00.000Z",
      "duration": "00:07:48",
      "channelName": "Demo Weeknight Meals",
      "channelUsername": "demo_weeknight_meals",
      "channelUrl": "https://example.com/demo/weeknight-meals",
      "numberOfSubscribers": 21000
    },
    {
      "title": "Meal Prep for the Week in 1 Hour",
      "type": "video",
      "url": "https://example.com/demo/wm3",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm3.jpg?signature=1J8PWi0wi3PflW6aQdjp1",
      "viewCount": 14000,
      "likes": 520,
      "commentsCount": 47,
      "date": "2026-10-15T17:00:00.000Z",
      "duration": "00:12:20",
      "channelName": "Demo Weeknight Meals",
      "channelUsername": "demo_weeknight_meals",
      "channelUrl": "https://example.com/demo/weeknight-meals",
      "numberOfSubscribers": 21000
    },
    {
      "title": "fastest fried egg ever?",
      "type": "shorts",
      "url": "https://example.com/demo/wm4",
      "thumbnailUrl": "https://api.apify.com/v2/key-value-stores/pRN5toUmxPnE06IBj/records/wm4.jpg?signature=1mjjEHNxB5M6OPFVip0TR",
      "viewCount": 22000,
      "likes": 1400,
      "commentsCount": 35,
      "date": "2026-10-22T18:00:00.000Z",
      "duration": "00:00:18",
      "channelName": "Demo Weeknight Meals",
      "channelUsername": "demo_weeknight_meals",
      "channelUrl": "https://example.com/demo/weeknight-meals",
      "numberOfSubscribers": 21000
    }
  ],
  "myChannel": "@demo_weeknight_meals",
  "channelBrief": "Weeknight Meals is a cooking channel for busy people who want dinner on the table in 30 minutes with one pan and supermarket ingredients. Host cooks on camera in a small home kitchen. Tone: friendly, practical, a bit funny, no chef jargon. Goal: more subscribers and longer watch time. Avoid: clickbait we cannot deliver, expensive gadgets, diet claims.",
  "conceptsCount": 5
}' |
apify call seasons-ai/youtube-channel-playbook --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seasons-ai/youtube-channel-playbook"
        }
    }
}
```

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/FwleHmwhoYkPjT5eN/builds/b6hoWFvQYPUaJo48n/openapi.json
