{
  "data": {
    "id": "swYZ3TQrDebcdec5a",
    "actId": "Dg3fDelv93OSfgvkB",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-31T20:23:48.222Z",
    "finishedAt": "2026-10-31T20:23:59.648Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 11316,
      "runTimeSecs": 11.316,
      "computeUnits": 0.012573333333333334,
      "imageSizeBytes": 319227392
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"YouTube Playlist Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"playlistUrls\": {\n      \"title\": \"Playlist URLs\",\n      \"type\": \"array\",\n      \"description\": \"YouTube playlist URLs, watch URLs with a list parameter, or bare playlist IDs whose videos you want. Combine with Channel URLs or Search Queries in one run.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.youtube.com/playlist?list=PLgzTt0k8mXzEk586ze4BjvDXR7c-TUSnx\"\n      ],\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"channelUrls\": {\n      \"title\": \"Channel URLs (list their playlists)\",\n      \"type\": \"array\",\n      \"description\": \"Channel handles, URLs, or channel IDs. The actor lists every public playlist, show, course, podcast, and album on each channel.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"searchQueries\": {\n      \"title\": \"Playlist Search Queries\",\n      \"type\": \"array\",\n      \"description\": \"Keywords to search for public playlists and courses, for example \\\"python course\\\" or \\\"lofi study\\\". Up to 20 queries per run.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      }\n    },\n    \"maxPlaylists\": {\n      \"title\": \"Max Playlists Per Channel\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of collections to list per channel.\",\n      \"default\": 100,\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"editor\": \"number\"\n    },\n    \"maxSearchResults\": {\n      \"title\": \"Max Results Per Search\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of playlist results to return for each search query.\",\n      \"default\": 20,\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"editor\": \"number\"\n    },\n    \"maxVideos\": {\n      \"title\": \"Max Videos Per Playlist\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of rows to return per playlist. Set to 0 for every video. Unavailable placeholders count toward the limit when enabled.\",\n      \"default\": 0,\n      \"prefill\": 3,\n      \"minimum\": 0,\n      \"maximum\": 10000,\n      \"editor\": \"number\"\n    },\n    \"includeUnavailableVideos\": {\n      \"title\": \"Include Unavailable Videos\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Emit a placeholder row for each deleted, private, or hidden playlist entry, with its real position and thumbnail.\"\n    },\n    \"includeVideoDetails\": {\n      \"title\": \"Include Exact Video Details\",\n      \"type\": \"boolean\",\n      \"default\": true,\n      \"prefill\": true,\n      \"description\": \"Add exact views, likes, publish date, description, category, and tags for every available video. Turn off for a faster listing-only run.\"\n    }\n  }\n}",
    "readme": "# YouTube Playlist Contents & Channel Playlist Finder\n\nCollect every video in a YouTube playlist, discover all of a channel's public collections, and search YouTube for playlists by keyword. Every available video can carry exact views, likes, publish date, description, category, and tags, while deleted or private entries can be returned as clearly marked placeholders with their real positions.\n\n## What this actor does\n\n- **Playlist contents** — every public video in one or many playlists, including 1,000+ item playlists\n- **Hidden unavailable entries** — optional placeholder rows for deleted, private, or removed videos, preserving their true position\n- **Exact video details** — views, likes, ISO publish date, description, category, tags, live status, and all thumbnail sizes\n- **Channel collections** — playlists, shows, courses, podcasts, and albums with their real video/episode counts\n- **Playlist search** — keyword search across public playlists and courses, ranked per query\n- **Mixed runs** — combine playlist URLs, channel URLs, and search queries in one input\n- **Empty fields are omitted** from every record\n\n## Output: per video (`playlistUrls` mode)\n\n- `recordType` — `video`\n- `position` — the video's real position in the playlist, counting hidden entries\n- `videoId`, `title`, `url`, `thumbnailUrl`, `thumbnails[]`\n- `duration`, `durationSeconds`\n- `isAvailable` — `false` for placeholder rows\n- `viewCount`, `viewCountText` — exact views from the video page\n- `likeCount` — exact likes when YouTube exposes them\n- `publishedAt` — ISO 8601 date/time\n- `publishedTimeText` — the relative label shown in the playlist\n- `videoDescription`, `videoCategory`, `videoKeywords[]`, `isLiveContent`\n- `videoChannelName`, `videoChannelId`, `videoChannelHandle`, `videoChannelUrl` — the video's uploader\n- `playlistId`, `playlistTitle`, `playlistUrl`, `playlistType`\n- `playlistVideoCount` — the count YouTube declares for the playlist\n- `playlistAvailableVideoCount`, `playlistUnavailableVideoCount`\n- `playlistTotalDurationSeconds`, `playlistTotalDuration`\n- `playlistOwner`, `playlistOwnerChannelId`, `playlistOwnerHandle`, `playlistDescription`, `playlistViewCount`\n- `playlistThumbnailUrl`, `playlistVisibility`\n- `lastUpdated`, `lastUpdatedDate` — the latter only when the label contains an exact date\n- `scrapedAt`\n\nPlaceholder rows keep `recordType`, `videoId`, `position`, `thumbnailUrl`, playlist context, and `isAvailable: false`. YouTube does not reveal the title or channel of a hidden entry, so those fields are omitted.\n\n## Output: per playlist (`channelUrls` mode)\n\n- `recordType` — `playlist`\n- `playlistId`, `playlistUrl`, `title`, `playlistType` — `playlist`, `show`, `course`, `podcast`, `album`, `radio_mix`, or `uploads`\n- `videoCount`, `videoCountText` — for example `28` and `\"28 episodes\"`\n- `thumbnailUrl`\n- `firstVideoId`, `firstVideoUrl` — where the collection starts\n- `channelName`, `channelId`, `channelHandle`, `channelUrl`, `channelAvatarUrl`\n- `lastUpdated` — when the card shows an update label\n- `scrapedAt`\n\n## Output: per search result (`searchQueries` mode)\n\n- `recordType` — `playlist`\n- `searchQuery`, `searchRank`\n- `playlistId`, `playlistUrl`, `title`, `playlistType`\n- `channelName`, `channelId`, `channelHandle`, `channelUrl`\n- `thumbnailUrl`, `firstVideoId`, `firstVideoUrl`\n- `scrapedAt`\n\nSearch cards do not show a reliable video count, so `videoCount` is omitted. Pass a returned playlist ID to `playlistUrls` to collect its contents.\n\n## Output: status and error rows\n\nIf a playlist, channel, or query cannot be read, the dataset still receives a row with `recordType: \"status\"` or `\"error\"`, the relevant input, and a plain-language message, so an empty dataset never hides a failure.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `playlistUrls` | array | – | Playlist URLs, watch URLs with `list=`, or bare playlist IDs |\n| `channelUrls` | array | – | Channel handles, URLs, or channel IDs whose collections you want |\n| `searchQueries` | array | – | Playlist search terms, up to 20 per run |\n| `maxPlaylists` | integer | `100` | Maximum collections to list per channel |\n| `maxSearchResults` | integer | `20` | Maximum results per search query |\n| `maxVideos` | integer | `0` | Maximum rows per playlist; `0` returns everything |\n| `includeUnavailableVideos` | boolean | `false` | Emit placeholder rows for hidden playlist entries |\n| `includeVideoDetails` | boolean | `true` | Add exact per-video metrics, dates, descriptions, categories, and tags |\n\nSupported playlist formats include `youtube.com/playlist?list=...`, `youtube.com/watch?v=...&list=...`, `music.youtube.com/playlist?list=...`, `youtu.be/...?list=...`, and bare IDs such as `PL...`, `UU...`, `RD...`, or `OL...`.\n\n### Example: full playlist with exact video details\n\n```json\n{\n    \"playlistUrls\": [\"https://www.youtube.com/playlist?list=PL-osiE80TeTt2d9bfVyTiXJA-UTHn6WwU\"],\n    \"maxVideos\": 50,\n    \"includeVideoDetails\": true\n}\n```\n\n### Example: recover hidden entries from a damaged playlist\n\n```json\n{\n    \"playlistUrls\": [\"PLhMDlPcDRBKQsawQMVty_dNztC8QgppML\"],\n    \"includeUnavailableVideos\": true,\n    \"includeVideoDetails\": false\n}\n```\n\n### Example: discover every collection on a channel\n\n```json\n{\n    \"channelUrls\": [\"@kurzgesagt\"],\n    \"maxPlaylists\": 50\n}\n```\n\n### Example: search playlists and collect one result in the same run\n\n```json\n{\n    \"searchQueries\": [\"python course\", \"lofi study music\"],\n    \"maxSearchResults\": 10,\n    \"playlistUrls\": [\"PL-osiE80TeTt2d9bfVyTiXJA-UTHn6WwU\"],\n    \"maxVideos\": 20\n}\n```\n\n## Use cases\n\n- **Course catalogs** — export every lesson, its position, duration, and publish date from an educational playlist\n- **Playlist backups** — snapshot a playlist's contents and see which entries have disappeared\n- **Podcast and show indexing** — discover a channel's podcast, show, and course collections with episode counts\n- **Content research** — search a topic, compare playlist titles and owners, then pull the winners' full contents\n- **Channel audits** — inventory every public collection a creator has published\n- **Viewership analysis** — compare exact views and likes across videos in the same playlist\n\n## FAQ\n\n**How many videos can one playlist return?**\nYouTube allows up to 5,000 entries in a public playlist. The actor reads through the entire list and reports what the source actually exposes.\n\n**Why is `playlistVideoCount` larger than the number of rows?**\nThe declared count includes entries YouTube hides from the normal list. Set `includeUnavailableVideos` to `true` to receive a placeholder for each hidden entry. `playlistAvailableVideoCount` and `playlistUnavailableVideoCount` show the split.\n\n**Why do some exact fields appear on one video but not another?**\nYouTube hides like counts on some videos and does not publish a category or tags for every upload. Those fields are omitted rather than estimated; the rest of the record stays intact. `publishedAt` contains a full timestamp when YouTube exposes one and a calendar date when only the date is available.\n\n**Do I need a YouTube API key, login, or proxy?**\nNo. The actor reads public YouTube data with no account, key, cookie, or proxy setup.\n\n**Why is `playlistViewCount` missing on some playlists?**\nYouTube does not display an aggregate view count for every collection type, such as auto-generated radio mixes. When the source has no count, the field is omitted.\n\n**Can I scrape private or personal playlists?**\nNo. Playlists such as Watch Later, Liked Videos, and other account-only lists are not publicly readable and are out of scope.\n\n**Why do search results omit `videoCount`?**\nPlaylist search cards do not show a video count. The actor returns the result identity and ranking; use the returned playlist ID with `playlistUrls` to get the full contents and counts.\n\n**What does `playlistOwner` contain?**\nThe owner's display name without the interface prefix, for example `Timeline - World History Documentaries` rather than `by Timeline - World History Documentaries`.\n\n**Is this actor affiliated with YouTube?**\nNo. It is an independent tool that reads publicly visible YouTube pages and is not operated or endorsed by YouTube or Google.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "youtube-playlist-contents-and-channel-playlist",
      "title": "YouTube Playlist Contents & Channel Playlist Finder",
      "description": "Collect every video in YouTube playlists with exact views, likes and dates, discover a channel's playlists, shows, courses and podcasts, and search playlists by keyword.",
      "version": "1.0",
      "buildTag": "latest",
      "defaultMemoryMbytes": 1024,
      "minMemoryMbytes": 1024,
      "maxMemoryMbytes": 1024,
      "environmentVariables": {},
      "dockerfile": "../Dockerfile",
      "input": {
        "title": "YouTube Playlist Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "playlistUrls": {
            "title": "Playlist URLs",
            "type": "array",
            "description": "YouTube playlist URLs, watch URLs with a list parameter, or bare playlist IDs whose videos you want. Combine with Channel URLs or Search Queries in one run.",
            "editor": "stringList",
            "prefill": [
              "https://www.youtube.com/playlist?list=PLgzTt0k8mXzEk586ze4BjvDXR7c-TUSnx"
            ],
            "items": {
              "type": "string"
            }
          },
          "channelUrls": {
            "title": "Channel URLs (list their playlists)",
            "type": "array",
            "description": "Channel handles, URLs, or channel IDs. The actor lists every public playlist, show, course, podcast, and album on each channel.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Playlist Search Queries",
            "type": "array",
            "description": "Keywords to search for public playlists and courses, for example \"python course\" or \"lofi study\". Up to 20 queries per run.",
            "editor": "stringList",
            "items": {
              "type": "string"
            }
          },
          "maxPlaylists": {
            "title": "Max Playlists Per Channel",
            "type": "integer",
            "description": "Maximum number of collections to list per channel.",
            "default": 100,
            "minimum": 1,
            "maximum": 10000,
            "editor": "number"
          },
          "maxSearchResults": {
            "title": "Max Results Per Search",
            "type": "integer",
            "description": "Maximum number of playlist results to return for each search query.",
            "default": 20,
            "minimum": 1,
            "maximum": 100,
            "editor": "number"
          },
          "maxVideos": {
            "title": "Max Videos Per Playlist",
            "type": "integer",
            "description": "Maximum number of rows to return per playlist. Set to 0 for every video. Unavailable placeholders count toward the limit when enabled.",
            "default": 0,
            "prefill": 3,
            "minimum": 0,
            "maximum": 10000,
            "editor": "number"
          },
          "includeUnavailableVideos": {
            "title": "Include Unavailable Videos",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Emit a placeholder row for each deleted, private, or hidden playlist entry, with its real position and thumbnail."
          },
          "includeVideoDetails": {
            "title": "Include Exact Video Details",
            "type": "boolean",
            "default": true,
            "prefill": true,
            "description": "Add exact views, likes, publish date, description, category, and tags for every available video. Turn off for a faster listing-only run."
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "YouTube Playlist Contents & Channel Playlist Finder Output",
        "description": "Playlist video rows with exact views, likes, publish dates and unavailable placeholders, plus channel collection and playlist-search rows.",
        "properties": {
          "results": {
            "type": "string",
            "title": "YouTube Playlist Scraper dataset",
            "description": "Dataset containing playlist videos, channel collections, search results, and status rows.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "recordType",
                  "position",
                  "title",
                  "videoId",
                  "playlistTitle",
                  "playlistType",
                  "viewCount",
                  "duration",
                  "videoChannelName",
                  "videoCount",
                  "searchQuery",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "recordType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "position": {
                    "label": "#",
                    "format": "number"
                  },
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "videoId": {
                    "label": "Video ID",
                    "format": "text"
                  },
                  "playlistTitle": {
                    "label": "Playlist",
                    "format": "text"
                  },
                  "playlistType": {
                    "label": "Collection Type",
                    "format": "text"
                  },
                  "viewCount": {
                    "label": "Views",
                    "format": "number"
                  },
                  "duration": {
                    "label": "Duration",
                    "format": "text"
                  },
                  "videoChannelName": {
                    "label": "Channel",
                    "format": "text"
                  },
                  "videoCount": {
                    "label": "Videos",
                    "format": "number"
                  },
                  "searchQuery": {
                    "label": "Search Query",
                    "format": "text"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed",
              "transformation": {
                "fields": [
                  "recordType",
                  "position",
                  "videoId",
                  "title",
                  "url",
                  "duration",
                  "durationSeconds",
                  "isAvailable",
                  "isLiveContent",
                  "viewCount",
                  "viewCountText",
                  "likeCount",
                  "publishedAt",
                  "publishedTimeText",
                  "videoDescription",
                  "videoCategory",
                  "videoKeywords",
                  "videoChannelName",
                  "videoChannelId",
                  "videoChannelHandle",
                  "videoChannelUrl",
                  "playlistId",
                  "playlistTitle",
                  "playlistUrl",
                  "playlistType",
                  "playlistVideoCount",
                  "playlistAvailableVideoCount",
                  "playlistUnavailableVideoCount",
                  "playlistTotalDuration",
                  "playlistTotalDurationSeconds",
                  "playlistOwner",
                  "playlistOwnerChannelId",
                  "playlistOwnerHandle",
                  "playlistDescription",
                  "playlistViewCount",
                  "playlistVisibility",
                  "lastUpdated",
                  "lastUpdatedDate",
                  "channelName",
                  "channelId",
                  "channelHandle",
                  "channelUrl",
                  "videoCount",
                  "videoCountText",
                  "searchQuery",
                  "searchRank",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "recordType": {
                    "label": "Type",
                    "format": "text"
                  },
                  "position": {
                    "label": "#",
                    "format": "number"
                  },
                  "videoId": {
                    "label": "Video ID",
                    "format": "text"
                  },
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "duration": {
                    "label": "Duration",
                    "format": "text"
                  },
                  "isAvailable": {
                    "label": "Available",
                    "format": "boolean"
                  },
                  "viewCount": {
                    "label": "Views",
                    "format": "number"
                  },
                  "likeCount": {
                    "label": "Likes",
                    "format": "number"
                  },
                  "publishedAt": {
                    "label": "Published",
                    "format": "text"
                  },
                  "playlistTitle": {
                    "label": "Playlist",
                    "format": "text"
                  },
                  "playlistType": {
                    "label": "Collection Type",
                    "format": "text"
                  },
                  "playlistVideoCount": {
                    "label": "Playlist Videos",
                    "format": "number"
                  },
                  "playlistUnavailableVideoCount": {
                    "label": "Unavailable",
                    "format": "number"
                  },
                  "playlistOwner": {
                    "label": "Owner",
                    "format": "text"
                  },
                  "channelName": {
                    "label": "Channel",
                    "format": "text"
                  },
                  "videoCount": {
                    "label": "Collection Videos",
                    "format": "number"
                  },
                  "searchQuery": {
                    "label": "Search Query",
                    "format": "text"
                  },
                  "searchRank": {
                    "label": "Rank",
                    "format": "number"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# YouTube Playlist Contents & Channel Playlist Finder\n\nCollect every video in a YouTube playlist, discover all of a channel's public collections, and search YouTube for playlists by keyword. Every available video can carry exact views, likes, publish date, description, category, and tags, while deleted or private entries can be returned as clearly marked placeholders with their real positions.\n\n## What this actor does\n\n- **Playlist contents** — every public video in one or many playlists, including 1,000+ item playlists\n- **Hidden unavailable entries** — optional placeholder rows for deleted, private, or removed videos, preserving their true position\n- **Exact video details** — views, likes, ISO publish date, description, category, tags, live status, and all thumbnail sizes\n- **Channel collections** — playlists, shows, courses, podcasts, and albums with their real video/episode counts\n- **Playlist search** — keyword search across public playlists and courses, ranked per query\n- **Mixed runs** — combine playlist URLs, channel URLs, and search queries in one input\n- **Empty fields are omitted** from every record\n\n## Output: per video (`playlistUrls` mode)\n\n- `recordType` — `video`\n- `position` — the video's real position in the playlist, counting hidden entries\n- `videoId`, `title`, `url`, `thumbnailUrl`, `thumbnails[]`\n- `duration`, `durationSeconds`\n- `isAvailable` — `false` for placeholder rows\n- `viewCount`, `viewCountText` — exact views from the video page\n- `likeCount` — exact likes when YouTube exposes them\n- `publishedAt` — ISO 8601 date/time\n- `publishedTimeText` — the relative label shown in the playlist\n- `videoDescription`, `videoCategory`, `videoKeywords[]`, `isLiveContent`\n- `videoChannelName`, `videoChannelId`, `videoChannelHandle`, `videoChannelUrl` — the video's uploader\n- `playlistId`, `playlistTitle`, `playlistUrl`, `playlistType`\n- `playlistVideoCount` — the count YouTube declares for the playlist\n- `playlistAvailableVideoCount`, `playlistUnavailableVideoCount`\n- `playlistTotalDurationSeconds`, `playlistTotalDuration`\n- `playlistOwner`, `playlistOwnerChannelId`, `playlistOwnerHandle`, `playlistDescription`, `playlistViewCount`\n- `playlistThumbnailUrl`, `playlistVisibility`\n- `lastUpdated`, `lastUpdatedDate` — the latter only when the label contains an exact date\n- `scrapedAt`\n\nPlaceholder rows keep `recordType`, `videoId`, `position`, `thumbnailUrl`, playlist context, and `isAvailable: false`. YouTube does not reveal the title or channel of a hidden entry, so those fields are omitted.\n\n## Output: per playlist (`channelUrls` mode)\n\n- `recordType` — `playlist`\n- `playlistId`, `playlistUrl`, `title`, `playlistType` — `playlist`, `show`, `course`, `podcast`, `album`, `radio_mix`, or `uploads`\n- `videoCount`, `videoCountText` — for example `28` and `\"28 episodes\"`\n- `thumbnailUrl`\n- `firstVideoId`, `firstVideoUrl` — where the collection starts\n- `channelName`, `channelId`, `channelHandle`, `channelUrl`, `channelAvatarUrl`\n- `lastUpdated` — when the card shows an update label\n- `scrapedAt`\n\n## Output: per search result (`searchQueries` mode)\n\n- `recordType` — `playlist`\n- `searchQuery`, `searchRank`\n- `playlistId`, `playlistUrl`, `title`, `playlistType`\n- `channelName`, `channelId`, `channelHandle`, `channelUrl`\n- `thumbnailUrl`, `firstVideoId`, `firstVideoUrl`\n- `scrapedAt`\n\nSearch cards do not show a reliable video count, so `videoCount` is omitted. Pass a returned playlist ID to `playlistUrls` to collect its contents.\n\n## Output: status and error rows\n\nIf a playlist, channel, or query cannot be read, the dataset still receives a row with `recordType: \"status\"` or `\"error\"`, the relevant input, and a plain-language message, so an empty dataset never hides a failure.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `playlistUrls` | array | – | Playlist URLs, watch URLs with `list=`, or bare playlist IDs |\n| `channelUrls` | array | – | Channel handles, URLs, or channel IDs whose collections you want |\n| `searchQueries` | array | – | Playlist search terms, up to 20 per run |\n| `maxPlaylists` | integer | `100` | Maximum collections to list per channel |\n| `maxSearchResults` | integer | `20` | Maximum results per search query |\n| `maxVideos` | integer | `0` | Maximum rows per playlist; `0` returns everything |\n| `includeUnavailableVideos` | boolean | `false` | Emit placeholder rows for hidden playlist entries |\n| `includeVideoDetails` | boolean | `true` | Add exact per-video metrics, dates, descriptions, categories, and tags |\n\nSupported playlist formats include `youtube.com/playlist?list=...`, `youtube.com/watch?v=...&list=...`, `music.youtube.com/playlist?list=...`, `youtu.be/...?list=...`, and bare IDs such as `PL...`, `UU...`, `RD...`, or `OL...`.\n\n### Example: full playlist with exact video details\n\n```json\n{\n    \"playlistUrls\": [\"https://www.youtube.com/playlist?list=PL-osiE80TeTt2d9bfVyTiXJA-UTHn6WwU\"],\n    \"maxVideos\": 50,\n    \"includeVideoDetails\": true\n}\n```\n\n### Example: recover hidden entries from a damaged playlist\n\n```json\n{\n    \"playlistUrls\": [\"PLhMDlPcDRBKQsawQMVty_dNztC8QgppML\"],\n    \"includeUnavailableVideos\": true,\n    \"includeVideoDetails\": false\n}\n```\n\n### Example: discover every collection on a channel\n\n```json\n{\n    \"channelUrls\": [\"@kurzgesagt\"],\n    \"maxPlaylists\": 50\n}\n```\n\n### Example: search playlists and collect one result in the same run\n\n```json\n{\n    \"searchQueries\": [\"python course\", \"lofi study music\"],\n    \"maxSearchResults\": 10,\n    \"playlistUrls\": [\"PL-osiE80TeTt2d9bfVyTiXJA-UTHn6WwU\"],\n    \"maxVideos\": 20\n}\n```\n\n## Use cases\n\n- **Course catalogs** — export every lesson, its position, duration, and publish date from an educational playlist\n- **Playlist backups** — snapshot a playlist's contents and see which entries have disappeared\n- **Podcast and show indexing** — discover a channel's podcast, show, and course collections with episode counts\n- **Content research** — search a topic, compare playlist titles and owners, then pull the winners' full contents\n- **Channel audits** — inventory every public collection a creator has published\n- **Viewership analysis** — compare exact views and likes across videos in the same playlist\n\n## FAQ\n\n**How many videos can one playlist return?**\nYouTube allows up to 5,000 entries in a public playlist. The actor reads through the entire list and reports what the source actually exposes.\n\n**Why is `playlistVideoCount` larger than the number of rows?**\nThe declared count includes entries YouTube hides from the normal list. Set `includeUnavailableVideos` to `true` to receive a placeholder for each hidden entry. `playlistAvailableVideoCount` and `playlistUnavailableVideoCount` show the split.\n\n**Why do some exact fields appear on one video but not another?**\nYouTube hides like counts on some videos and does not publish a category or tags for every upload. Those fields are omitted rather than estimated; the rest of the record stays intact. `publishedAt` contains a full timestamp when YouTube exposes one and a calendar date when only the date is available.\n\n**Do I need a YouTube API key, login, or proxy?**\nNo. The actor reads public YouTube data with no account, key, cookie, or proxy setup.\n\n**Why is `playlistViewCount` missing on some playlists?**\nYouTube does not display an aggregate view count for every collection type, such as auto-generated radio mixes. When the source has no count, the field is omitted.\n\n**Can I scrape private or personal playlists?**\nNo. Playlists such as Watch Later, Liked Videos, and other account-only lists are not publicly readable and are out of scope.\n\n**Why do search results omit `videoCount`?**\nPlaylist search cards do not show a video count. The actor returns the result identity and ranking; use the returned playlist ID with `playlistUrls` to get the full contents and counts.\n\n**What does `playlistOwner` contain?**\nThe owner's display name without the interface prefix, for example `Timeline - World History Documentaries` rather than `by Timeline - World History Documentaries`.\n\n**Is this actor affiliated with YouTube?**\nNo. It is an independent tool that reads publicly visible YouTube pages and is not operated or endorsed by YouTube or Google.\n"
    },
    "buildNumber": "1.0.2",
    "imageDigest": "7cc9a64960cbb46dc0b7f97757175203181446d3a9e33a8555cabd28554ad631",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.012573333333333334
    }
  }
}