{
  "data": {
    "id": "6GWCnW79ucQmuV0Ao",
    "actId": "fNm0e9I6ncv8nf6jt",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-18T14:38:10.653Z",
    "finishedAt": "2026-10-18T14:38:26.009Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 15253,
      "runTimeSecs": 15.253,
      "computeUnits": 0.016947777777777777,
      "imageSizeBytes": 318184448
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"YouTube Channel Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"required\": [\n    \"channelUrls\"\n  ],\n  \"properties\": {\n    \"channelUrls\": {\n      \"title\": \"Channel URLs\",\n      \"type\": \"array\",\n      \"description\": \"YouTube channel URLs, handles (@username), or channel IDs (UCxxx). Accepts any format.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.youtube.com/@Apify\"\n      ],\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"minItems\": 1\n    },\n    \"maxVideos\": {\n      \"title\": \"Max Videos Per Channel\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of videos to scrape per channel. Set to 0 to get only channel info without videos.\",\n      \"default\": 50,\n      \"minimum\": 0,\n      \"maximum\": 10000,\n      \"editor\": \"number\",\n      \"prefill\": 3\n    },\n    \"sortVideosBy\": {\n      \"title\": \"Sort Videos By\",\n      \"type\": \"string\",\n      \"description\": \"How to sort the channel's video listings. If YouTube does not offer the chosen sort for a channel, newest-first is used.\",\n      \"default\": \"newest\",\n      \"enum\": [\n        \"newest\",\n        \"popular\",\n        \"oldest\"\n      ],\n      \"enumTitles\": [\n        \"Newest first\",\n        \"Most popular\",\n        \"Oldest first\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"sortShortsBy\": {\n      \"title\": \"Sort Shorts By\",\n      \"type\": \"string\",\n      \"description\": \"How to sort the channel's Shorts listing (when includeShorts is enabled). Falls back to newest-first when the channel offers no Shorts sort.\",\n      \"default\": \"newest\",\n      \"enum\": [\n        \"newest\",\n        \"popular\",\n        \"oldest\"\n      ],\n      \"enumTitles\": [\n        \"Newest first\",\n        \"Most popular\",\n        \"Oldest first\"\n      ],\n      \"editor\": \"select\"\n    },\n    \"includeAbout\": {\n      \"title\": \"Include About Page Data\",\n      \"type\": \"boolean\",\n      \"default\": true,\n      \"prefill\": true,\n      \"description\": \"Extract total views, join date, location, country, and external links from the channel About page.\"\n    },\n    \"includeShorts\": {\n      \"title\": \"Include Channel Shorts\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Scrape the channel Shorts tab and include Shorts in the output.\"\n    },\n    \"maxShorts\": {\n      \"title\": \"Max Shorts\",\n      \"type\": \"integer\",\n      \"default\": 20,\n      \"minimum\": 1,\n      \"maximum\": 2000,\n      \"description\": \"Maximum number of Shorts to return (when includeShorts is enabled).\"\n    },\n    \"includeLiveVideos\": {\n      \"title\": \"Include Live/Stream Videos\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Scrape the channel Live/Streams tab and include live, upcoming, and past streams.\"\n    },\n    \"maxLiveVideos\": {\n      \"title\": \"Max Live Videos\",\n      \"type\": \"integer\",\n      \"default\": 20,\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"description\": \"Maximum live/stream videos to return (when includeLiveVideos is enabled).\"\n    },\n    \"includePlaylists\": {\n      \"title\": \"Include Channel Playlists\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Scrape the channel Playlists tab and include playlist metadata in the output.\"\n    },\n    \"maxPlaylists\": {\n      \"title\": \"Max Playlists\",\n      \"type\": \"integer\",\n      \"default\": 20,\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"description\": \"Maximum number of playlists to scrape (when includePlaylists is enabled).\"\n    },\n    \"includePodcasts\": {\n      \"title\": \"Include Podcast Shows\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Scrape the channel Podcasts tab and include podcast shows (when the channel has one).\"\n    },\n    \"maxPodcasts\": {\n      \"title\": \"Max Podcast Shows\",\n      \"type\": \"integer\",\n      \"default\": 50,\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"description\": \"Maximum number of podcast shows to return (when includePodcasts is enabled).\"\n    },\n    \"includeCourses\": {\n      \"title\": \"Include Courses\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Scrape the channel Courses tab and include course playlists (when the channel has one).\"\n    },\n    \"maxCourses\": {\n      \"title\": \"Max Courses\",\n      \"type\": \"integer\",\n      \"default\": 50,\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"description\": \"Maximum number of courses to return (when includeCourses is enabled).\"\n    },\n    \"includeReleases\": {\n      \"title\": \"Include Music Releases\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Scrape the channel Releases tab and include release playlists (when the channel has one).\"\n    },\n    \"maxReleases\": {\n      \"title\": \"Max Releases\",\n      \"type\": \"integer\",\n      \"default\": 50,\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"description\": \"Maximum number of releases to return (when includeReleases is enabled).\"\n    },\n    \"includeMembersOnly\": {\n      \"title\": \"Include Members-Only Videos\",\n      \"type\": \"boolean\",\n      \"default\": false,\n      \"prefill\": false,\n      \"description\": \"Also list members-only videos (titles and public metadata) when YouTube offers the Members-only filter for this channel. Rows carry isMembersOnly and are added in addition to maxVideos. Playback still requires the membership.\"\n    },\n    \"includeExactMetrics\": {\n      \"title\": \"Fetch Exact Video Metrics\",\n      \"type\": \"boolean\",\n      \"default\": true,\n      \"prefill\": true,\n      \"description\": \"Also fetch each video's exact view and like counts, duration, publish date, category, and description. Turn off for faster, cheaper runs with listing-page values only.\"\n    },\n    \"market\": {\n      \"title\": \"Market / Region\",\n      \"type\": \"string\",\n      \"default\": \"US\",\n      \"enum\": [\n        \"US\",\n        \"GB\",\n        \"CA\",\n        \"AU\",\n        \"DE\",\n        \"FR\",\n        \"JP\",\n        \"KR\",\n        \"BR\",\n        \"IN\",\n        \"MX\",\n        \"IT\",\n        \"ES\",\n        \"NL\",\n        \"PL\",\n        \"RU\",\n        \"SE\",\n        \"NO\",\n        \"DK\",\n        \"FI\",\n        \"ZA\",\n        \"SG\",\n        \"HK\",\n        \"TW\",\n        \"ID\",\n        \"MY\",\n        \"TH\",\n        \"PH\",\n        \"AR\",\n        \"CO\",\n        \"CL\"\n      ],\n      \"enumTitles\": [\n        \"United States\",\n        \"United Kingdom\",\n        \"Canada\",\n        \"Australia\",\n        \"Germany\",\n        \"France\",\n        \"Japan\",\n        \"South Korea\",\n        \"Brazil\",\n        \"India\",\n        \"Mexico\",\n        \"Italy\",\n        \"Spain\",\n        \"Netherlands\",\n        \"Poland\",\n        \"Russia\",\n        \"Sweden\",\n        \"Norway\",\n        \"Denmark\",\n        \"Finland\",\n        \"South Africa\",\n        \"Singapore\",\n        \"Hong Kong\",\n        \"Taiwan\",\n        \"Indonesia\",\n        \"Malaysia\",\n        \"Thailand\",\n        \"Philippines\",\n        \"Argentina\",\n        \"Colombia\",\n        \"Chile\"\n      ],\n      \"description\": \"Country used for regional content availability and localized results (YouTube gl parameter).\",\n      \"editor\": \"select\"\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"default\": \"en\",\n      \"enum\": [\n        \"en\",\n        \"ar\",\n        \"de\",\n        \"es\",\n        \"fr\",\n        \"hi\",\n        \"id\",\n        \"it\",\n        \"ja\",\n        \"ko\",\n        \"nl\",\n        \"pl\",\n        \"pt\",\n        \"ru\",\n        \"th\",\n        \"tr\",\n        \"vi\"\n      ],\n      \"enumTitles\": [\n        \"English\",\n        \"Arabic\",\n        \"German\",\n        \"Spanish\",\n        \"French\",\n        \"Hindi\",\n        \"Indonesian\",\n        \"Italian\",\n        \"Japanese\",\n        \"Korean\",\n        \"Dutch\",\n        \"Polish\",\n        \"Portuguese\",\n        \"Russian\",\n        \"Thai\",\n        \"Turkish\",\n        \"Vietnamese\"\n      ],\n      \"description\": \"Language for YouTube's interface text (relative dates like \\\"2 days ago\\\"). Titles and descriptions stay in the creator's own language.\",\n      \"editor\": \"select\"\n    }\n  }\n}",
    "readme": "# YouTube Channel Video Catalog & Profile Scraper\n\nPoint this actor at a YouTube channel and get its full public catalog back — the latest uploads, the complete back-catalog, Shorts, live and upcoming streams, playlists, podcast shows and channel courses — with exact view and like counts, publish dates, durations and descriptions, plus the channel profile: subscribers, description, links, country, join date, total views and verification.\n\n## What this actor does\n\n- **Complete video catalog:** newest, most popular or oldest first, paged through the channel's entire upload list\n- **Exact per-video metrics:** exact view count, exact like count, publish date, exact duration, description and category (when YouTube makes it publicly visible)\n- **Every public surface:** Shorts (with its own sort), live/upcoming/past streams, playlists, podcast shows, courses and music releases\n- **Channel profile:** subscribers, video count, handle, description, avatar, banner, country, join date, total views, external links, verification, keywords\n- **Members-only listings:** optionally list members-only videos (titles and public metadata) when YouTube offers that filter for the channel\n- **Bulk channels:** paste URLs, handles (`@name`) or channel IDs, one per line\n- **Empty fields are omitted** — empty text and missing numbers are left out instead of emitted as `null`\n\n## Output per video row\n\nEach long-form video is one row. Optional scalar fields are omitted when YouTube does not expose a value.\n\n| Field | Type | Example |\n|-------|------|---------|\n| `videoId` | string | `\"0e3GPea1Tyg\"` |\n| `title` | string | `\"$456,000 Squid Game In Real Life!\"` |\n| `url` | string | `\"https://www.youtube.com/watch?v=0e3GPea1Tyg\"` |\n| `viewCount` | integer (optional; exact only) | `905688793` |\n| `viewCountText` | string (optional) | `\"905,688,793 views\"` |\n| `likeCount` | integer (optional; exact only) | `2009889` |\n| `publishedAt` | string (optional) | `\"2026-10-03\"` or `\"2026-10-03T09:00:01-07:00\"` |\n| `category` | string (optional) | `\"Entertainment\"` |\n| `publishedTimeText` | string (optional) | `\"2 days ago\"` |\n| `duration` | string (optional; may be `\"LIVE\"`) | `\"25:42\"` |\n| `durationSeconds` | integer (optional) | `1542` |\n| `thumbnailUrl` | string (optional) | Video thumbnail URL |\n| `description` | string (optional) | Video description |\n| `isLive` | boolean | `false` |\n| `isShort` | boolean | `false` |\n| `isUpcoming` | boolean (only when true) | `true` |\n| `isMembersOnly` | boolean (only when true) | `true` |\n| `concurrentViewersText` | string (live only) | `\"2K watching\"` |\n| `badges` | array (optional) | Card badges such as `\"New\"` or `\"4K\"` |\n| `authorMetadata` | object | Channel details (see below) |\n| `scrapedAt` | string | `\"2026-10-18T12:00:00+00:00\"` |\n\nIf `includeExactMetrics` is off, `viewCount`/`likeCount`/`publishedAt`/`category` are omitted and the listing-page values (`viewCountText`, `publishedTimeText`) are returned instead. `category` and exact like counts are omitted when YouTube does not make them publicly visible.\n\n### Surface arrays\n\n`shorts`, `playlists`, `liveVideos`, `podcasts`, `courses` and `releases` are attached to the first video row of each channel (or to the channel-only row when `maxVideos` is 0) and are never repeated on every row.\n\n- `shorts[]` — `videoId`, `title`, `viewCountText`, `url`, `thumbnailUrl`, `type: \"short\"`; exact metrics are added when `includeExactMetrics` is on\n- `playlists[]` — `playlistId`, `title`, `url`, `thumbnailUrl`, `videoCountText`, `videoCount`, `lastUpdatedText`\n- `liveVideos[]` — the same video fields as a normal row, including `isLive`, `isUpcoming` and `concurrentViewersText`\n- `podcasts[]` — `podcastShowId`, `title`, `url`, `thumbnailUrl`, `episodeCountText`, `episodeCount`, `lastUpdatedText`\n- `courses[]` / `releases[]` — `playlistId`, `title`, `url`, `thumbnailUrl`, `videoCountText`, `videoCount`\n\n### `authorMetadata` fields\n\n| Field | Type | Example |\n|-------|------|---------|\n| `channelId` | string | `\"UCX6OQ3DkcsbYNE6H8uQQuVA\"` |\n| `channelName` | string | `\"MrBeast\"` |\n| `handle` | string | `\"@MrBeast\"` |\n| `channelUrl` | string | `\"https://www.youtube.com/@MrBeast\"` |\n| `description` | string | Channel description |\n| `subscriberCountText` | string | `\"466M subscribers\"` |\n| `subscriberCount` | integer (optional; exact text only) | `8390` |\n| `videoCount` / `videoCountText` | integer / string | `948` / `\"948 videos\"` |\n| `country` | string (optional, ISO code) | `\"CZ\"` |\n| `location` | string (optional) | `\"Czechia\"` |\n| `joinedDateText` | string (optional) | `\"Joined Feb 20, 2012\"` |\n| `totalViews` / `totalViewsText` | integer / string (optional) | `2424926` / `\"2,424,926 views\"` |\n| `externalLinks[]` | array (optional) | `[{\"title\": \"Website\", \"url\": \"https://...\"}]` |\n| `aboutDescription` | string (optional) | Description as shown on the About panel |\n| `avatarUrl`, `bannerUrl` | string | Image URLs |\n| `isVerified`, `isFamilySafe` | boolean | `true` |\n| `isOfficialArtistChannel` | boolean (only when true) | `true` |\n| `keywords` | array (optional) | Owner-set channel keywords |\n| `channelLinks[]` | array (optional) | Header links: `[{\"title\": \"...\", \"url\": \"...\"}]` |\n| `rssUrl` | string (optional) | The channel's upstream RSS URL (YouTube's feed availability varies) |\n\nNumeric profile counts are emitted only when YouTube supplies an unabridged integer (for example `1,234 subscribers`). Rounded labels such as `466M subscribers` stay in the matching `*Text` field; an approximate value is never presented as an exact count.\n\nIf a channel page cannot be fetched or parsed at all, a row with `channelUrl`, `error`, `success: false` and `scrapedAt` is returned instead.\n\n## Input\n\n| Field | Type | Required | Default | Description |\n|-------|------|----------|---------|-------------|\n| `channelUrls` | string[] | Yes | – | Channel URLs, `@handles` or channel IDs |\n| `maxVideos` | integer | No | 50 | Max long-form videos per channel (0–10000). 0 returns profile only |\n| `sortVideosBy` | string | No | `\"newest\"` | `newest`, `popular`, `oldest` (falls back to newest when unavailable) |\n| `sortShortsBy` | string | No | `\"newest\"` | Shorts sort: `newest`, `popular`, `oldest` |\n| `includeAbout` | boolean | No | true | About-panel fields: total views, join date, location, country, links |\n| `includeShorts` | boolean | No | false | Include the Shorts tab |\n| `maxShorts` | integer | No | 20 | Cap for Shorts (1–2000) |\n| `includeLiveVideos` | boolean | No | false | Include live, upcoming and past streams |\n| `maxLiveVideos` | integer | No | 20 | Cap for streams (1–500) |\n| `includePlaylists` | boolean | No | false | Include playlists |\n| `maxPlaylists` | integer | No | 20 | Cap for playlists (1–500) |\n| `includePodcasts` | boolean | No | false | Include podcast shows |\n| `maxPodcasts` | integer | No | 50 | Cap for podcast shows (1–500) |\n| `includeCourses` | boolean | No | false | Include courses |\n| `maxCourses` | integer | No | 50 | Cap for courses (1–500) |\n| `includeReleases` | boolean | No | false | Include music releases |\n| `maxReleases` | integer | No | 50 | Cap for releases (1–500) |\n| `includeMembersOnly` | boolean | No | false | Also list members-only videos when YouTube offers that filter |\n| `includeExactMetrics` | boolean | No | true | Also fetch each video's exact counts, dates and descriptions (slower; turn off for listing-page values only) |\n| `market` | string | No | `\"US\"` | Market/region for content availability (31 countries) |\n| `language` | string | No | `\"en\"` | Language for YouTube's interface text (relative dates) |\n\n### Supported channel formats\n\n- `@MrBeast` — handle\n- `https://www.youtube.com/@MrBeast` — full URL\n- `https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA` — channel ID URL\n- `UCX6OQ3DkcsbYNE6H8uQQuVA` — raw channel ID\n- `MrBeast` — plain name (treated as a handle)\n\n### Example: catalog with every surface\n\n```json\n{\n  \"channelUrls\": [\"@MrBeast\"],\n  \"maxVideos\": 100,\n  \"sortVideosBy\": \"popular\",\n  \"includeShorts\": true,\n  \"maxShorts\": 50,\n  \"includeLiveVideos\": true,\n  \"includePlaylists\": true\n}\n```\n\n### Example: profile-only enrichment for a lead list\n\n```json\n{\n  \"channelUrls\": [\"@MrBeast\", \"@mkbhd\", \"@kurzgesagt\"],\n  \"maxVideos\": 0,\n  \"includeAbout\": true\n}\n```\n\n### Example: podcast and course discovery\n\n```json\n{\n  \"channelUrls\": [\"@LofiGirl\", \"@Fireship\"],\n  \"maxVideos\": 10,\n  \"includePodcasts\": true,\n  \"includeCourses\": true,\n  \"includeReleases\": true\n}\n```\n\n### Example: members-only backlog\n\n```json\n{\n  \"channelUrls\": [\"@LinusTechTips\"],\n  \"maxVideos\": 50,\n  \"includeMembersOnly\": true\n}\n```\n\n## Use cases\n\n- **Channel research** — map a creator's complete output, posting cadence and growth metrics\n- **Competitor analysis** — compare catalogs, view/like counts and publishing frequency across a niche\n- **Content auditing** — inventory every video on a channel to find gaps and evergreen performers\n- **Influencer vetting** — subscriber counts, verification, country and engagement signals in one run\n- **Media monitoring** — track news and live channels, including upcoming broadcasts\n- **ML datasets** — exact counts, ISO dates and descriptions ready for analysis\n\n## FAQ\n\n**Do I need a YouTube API key?**\nNo. The actor reads public YouTube pages and YouTube's own web endpoints; no API key, login or cookie is required.\n\n**Which sort orders are available?**\nNewest, most popular and oldest — for both long-form videos and Shorts. If a channel does not offer a chosen order, newest-first is used and the run log says so.\n\n**Why are some counts exact and others text only?**\nYouTube shows rounded labels like `466M subscribers` on channel pages. The actor keeps that label in its `*Text` field and never expands it into a fake exact number. Exact `viewCount` and `likeCount` come from each video's own metadata.\n\n**What does `includeExactMetrics` do?**\nIt fetches each video's exact views, likes, publish date, category and description. Turning it off makes runs faster and cheaper but returns listing-page values only.\n\n**How far back does the catalog go?**\nThe actor pages through the channel's entire upload list, up to your `maxVideos` setting (maximum 10,000 per channel). Channels with tens of thousands of uploads are limited only by that cap.\n\n**What can I learn about members-only or age-restricted videos?**\nTitles, publish dates, durations and like counts are public for members-only videos when the channel shows them in its Members-only filter — those rows carry `isMembersOnly: true` and are added in addition to your `maxVideos` setting. Age-restricted videos are listed like any other video, with their public title, views, likes and duration; only *playback* is age-gated. Members-only and age-gated playback still requires a logged-in session; the actor never logs in.\n\n**Are live streams included?**\nYes, with `includeLiveVideos`: active streams include `isLive` and a `concurrentViewersText` (for example `\"2K watching\"`), scheduled premieres carry `isUpcoming`, and past streams come back with durations.\n\n**How fresh is the data?**\nData is fetched live at run time — there is no cache. Every run reflects the channel's current state. If a channel's catalog page cannot be fetched at all, the actor falls back to YouTube's public channel feed and returns that channel's latest 15 uploads instead of an empty result.\n\n**Do I need to set up a proxy?**\nNo. The actor uses a working public connection to YouTube automatically. Just fill in the input and run it.\n\n**Is this affiliated with YouTube?**\nNo. This is an independent tool and is not affiliated with, endorsed by, or sponsored by YouTube or Google.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "youtube-channel-video-catalog-and-profile-scraper",
      "title": "YouTube Channel Video Catalog & Profile Scraper",
      "description": "Get a YouTube channel's profile details (subscribers, description, links, verification) together with its full video, Shorts, playlist, podcast or live-stream catalog — exact views, likes, and publish dates, for one channel or many at once.",
      "version": "1.0",
      "buildTag": "latest",
      "defaultMemoryMbytes": 1024,
      "minMemoryMbytes": 1024,
      "environmentVariables": {},
      "dockerfile": "../Dockerfile",
      "input": {
        "title": "YouTube Channel Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "required": [
          "channelUrls"
        ],
        "properties": {
          "channelUrls": {
            "title": "Channel URLs",
            "type": "array",
            "description": "YouTube channel URLs, handles (@username), or channel IDs (UCxxx). Accepts any format.",
            "editor": "stringList",
            "prefill": [
              "https://www.youtube.com/@Apify"
            ],
            "items": {
              "type": "string"
            },
            "minItems": 1
          },
          "maxVideos": {
            "title": "Max Videos Per Channel",
            "type": "integer",
            "description": "Maximum number of videos to scrape per channel. Set to 0 to get only channel info without videos.",
            "default": 50,
            "minimum": 0,
            "maximum": 10000,
            "editor": "number",
            "prefill": 3
          },
          "sortVideosBy": {
            "title": "Sort Videos By",
            "type": "string",
            "description": "How to sort the channel's video listings. If YouTube does not offer the chosen sort for a channel, newest-first is used.",
            "default": "newest",
            "enum": [
              "newest",
              "popular",
              "oldest"
            ],
            "enumTitles": [
              "Newest first",
              "Most popular",
              "Oldest first"
            ],
            "editor": "select"
          },
          "sortShortsBy": {
            "title": "Sort Shorts By",
            "type": "string",
            "description": "How to sort the channel's Shorts listing (when includeShorts is enabled). Falls back to newest-first when the channel offers no Shorts sort.",
            "default": "newest",
            "enum": [
              "newest",
              "popular",
              "oldest"
            ],
            "enumTitles": [
              "Newest first",
              "Most popular",
              "Oldest first"
            ],
            "editor": "select"
          },
          "includeAbout": {
            "title": "Include About Page Data",
            "type": "boolean",
            "default": true,
            "prefill": true,
            "description": "Extract total views, join date, location, country, and external links from the channel About page."
          },
          "includeShorts": {
            "title": "Include Channel Shorts",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Scrape the channel Shorts tab and include Shorts in the output."
          },
          "maxShorts": {
            "title": "Max Shorts",
            "type": "integer",
            "default": 20,
            "minimum": 1,
            "maximum": 2000,
            "description": "Maximum number of Shorts to return (when includeShorts is enabled)."
          },
          "includeLiveVideos": {
            "title": "Include Live/Stream Videos",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Scrape the channel Live/Streams tab and include live, upcoming, and past streams."
          },
          "maxLiveVideos": {
            "title": "Max Live Videos",
            "type": "integer",
            "default": 20,
            "minimum": 1,
            "maximum": 500,
            "description": "Maximum live/stream videos to return (when includeLiveVideos is enabled)."
          },
          "includePlaylists": {
            "title": "Include Channel Playlists",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Scrape the channel Playlists tab and include playlist metadata in the output."
          },
          "maxPlaylists": {
            "title": "Max Playlists",
            "type": "integer",
            "default": 20,
            "minimum": 1,
            "maximum": 500,
            "description": "Maximum number of playlists to scrape (when includePlaylists is enabled)."
          },
          "includePodcasts": {
            "title": "Include Podcast Shows",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Scrape the channel Podcasts tab and include podcast shows (when the channel has one)."
          },
          "maxPodcasts": {
            "title": "Max Podcast Shows",
            "type": "integer",
            "default": 50,
            "minimum": 1,
            "maximum": 500,
            "description": "Maximum number of podcast shows to return (when includePodcasts is enabled)."
          },
          "includeCourses": {
            "title": "Include Courses",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Scrape the channel Courses tab and include course playlists (when the channel has one)."
          },
          "maxCourses": {
            "title": "Max Courses",
            "type": "integer",
            "default": 50,
            "minimum": 1,
            "maximum": 500,
            "description": "Maximum number of courses to return (when includeCourses is enabled)."
          },
          "includeReleases": {
            "title": "Include Music Releases",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Scrape the channel Releases tab and include release playlists (when the channel has one)."
          },
          "maxReleases": {
            "title": "Max Releases",
            "type": "integer",
            "default": 50,
            "minimum": 1,
            "maximum": 500,
            "description": "Maximum number of releases to return (when includeReleases is enabled)."
          },
          "includeMembersOnly": {
            "title": "Include Members-Only Videos",
            "type": "boolean",
            "default": false,
            "prefill": false,
            "description": "Also list members-only videos (titles and public metadata) when YouTube offers the Members-only filter for this channel. Rows carry isMembersOnly and are added in addition to maxVideos. Playback still requires the membership."
          },
          "includeExactMetrics": {
            "title": "Fetch Exact Video Metrics",
            "type": "boolean",
            "default": true,
            "prefill": true,
            "description": "Also fetch each video's exact view and like counts, duration, publish date, category, and description. Turn off for faster, cheaper runs with listing-page values only."
          },
          "market": {
            "title": "Market / Region",
            "type": "string",
            "default": "US",
            "enum": [
              "US",
              "GB",
              "CA",
              "AU",
              "DE",
              "FR",
              "JP",
              "KR",
              "BR",
              "IN",
              "MX",
              "IT",
              "ES",
              "NL",
              "PL",
              "RU",
              "SE",
              "NO",
              "DK",
              "FI",
              "ZA",
              "SG",
              "HK",
              "TW",
              "ID",
              "MY",
              "TH",
              "PH",
              "AR",
              "CO",
              "CL"
            ],
            "enumTitles": [
              "United States",
              "United Kingdom",
              "Canada",
              "Australia",
              "Germany",
              "France",
              "Japan",
              "South Korea",
              "Brazil",
              "India",
              "Mexico",
              "Italy",
              "Spain",
              "Netherlands",
              "Poland",
              "Russia",
              "Sweden",
              "Norway",
              "Denmark",
              "Finland",
              "South Africa",
              "Singapore",
              "Hong Kong",
              "Taiwan",
              "Indonesia",
              "Malaysia",
              "Thailand",
              "Philippines",
              "Argentina",
              "Colombia",
              "Chile"
            ],
            "description": "Country used for regional content availability and localized results (YouTube gl parameter).",
            "editor": "select"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "default": "en",
            "enum": [
              "en",
              "ar",
              "de",
              "es",
              "fr",
              "hi",
              "id",
              "it",
              "ja",
              "ko",
              "nl",
              "pl",
              "pt",
              "ru",
              "th",
              "tr",
              "vi"
            ],
            "enumTitles": [
              "English",
              "Arabic",
              "German",
              "Spanish",
              "French",
              "Hindi",
              "Indonesian",
              "Italian",
              "Japanese",
              "Korean",
              "Dutch",
              "Polish",
              "Portuguese",
              "Russian",
              "Thai",
              "Turkish",
              "Vietnamese"
            ],
            "description": "Language for YouTube's interface text (relative dates like \"2 days ago\"). Titles and descriptions stay in the creator's own language.",
            "editor": "select"
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "YouTube Channel Video Catalog & Profile Scraper Output",
        "description": "YouTube channel profile metadata and video, Shorts, playlist, podcast, course, release, and live-stream rows with exact views, likes, and publish dates.",
        "properties": {
          "videos": {
            "type": "string",
            "title": "YouTube Channel Video Catalog & Profile Scraper dataset",
            "description": "Dataset containing all scraped channel info, author metadata, and video rows.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "title",
                  "videoId",
                  "viewCount",
                  "duration",
                  "publishedTimeText",
                  "url",
                  "authorMetadata.channelName",
                  "authorMetadata.subscriberCount"
                ],
                "flatten": [
                  "authorMetadata"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "videoId": {
                    "label": "Video ID",
                    "format": "text"
                  },
                  "viewCount": {
                    "label": "Views",
                    "format": "number"
                  },
                  "duration": {
                    "label": "Duration",
                    "format": "text"
                  },
                  "publishedTimeText": {
                    "label": "Published",
                    "format": "text"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "authorMetadata.channelName": {
                    "label": "Channel",
                    "format": "text"
                  },
                  "authorMetadata.subscriberCount": {
                    "label": "Subscribers",
                    "format": "number"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed",
              "transformation": {
                "fields": [
                  "videoId",
                  "title",
                  "url",
                  "viewCount",
                  "viewCountText",
                  "publishedTimeText",
                  "duration",
                  "durationSeconds",
                  "thumbnailUrl",
                  "description",
                  "isLive",
                  "isShort",
                  "isUpcoming",
                  "isMembersOnly",
                  "concurrentViewersText",
                  "likeCount",
                  "publishedAt",
                  "category",
                  "badges",
                  "authorMetadata.channelId",
                  "authorMetadata.channelName",
                  "authorMetadata.handle",
                  "authorMetadata.channelUrl",
                  "authorMetadata.subscriberCount",
                  "authorMetadata.subscriberCountText",
                  "authorMetadata.videoCount",
                  "authorMetadata.videoCountText",
                  "authorMetadata.country",
                  "authorMetadata.isVerified",
                  "authorMetadata.avatarUrl",
                  "authorMetadata.bannerUrl",
                  "authorMetadata.rssUrl",
                  "authorMetadata.isFamilySafe",
                  "authorMetadata.keywords",
                  "authorMetadata.description",
                  "authorMetadata.aboutDescription",
                  "authorMetadata.channelLinks",
                  "authorMetadata.joinedDateText",
                  "authorMetadata.totalViewsText",
                  "authorMetadata.totalViews",
                  "authorMetadata.location",
                  "authorMetadata.externalLinks",
                  "shorts",
                  "playlists",
                  "liveVideos",
                  "podcasts",
                  "courses",
                  "releases",
                  "scrapedAt"
                ],
                "flatten": [
                  "authorMetadata"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "videoId": {
                    "label": "Video ID",
                    "format": "text"
                  },
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "viewCount": {
                    "label": "Views",
                    "format": "number"
                  },
                  "viewCountText": {
                    "label": "Views Text",
                    "format": "text"
                  },
                  "publishedTimeText": {
                    "label": "Published",
                    "format": "text"
                  },
                  "duration": {
                    "label": "Duration",
                    "format": "text"
                  },
                  "durationSeconds": {
                    "label": "Duration (s)",
                    "format": "number"
                  },
                  "thumbnailUrl": {
                    "label": "Thumbnail",
                    "format": "link"
                  },
                  "description": {
                    "label": "Description",
                    "format": "text"
                  },
                  "isLive": {
                    "label": "Live",
                    "format": "boolean"
                  },
                  "isShort": {
                    "label": "Short",
                    "format": "boolean"
                  },
                  "isUpcoming": {
                    "label": "Upcoming",
                    "format": "boolean"
                  },
                  "isMembersOnly": {
                    "label": "Members Only",
                    "format": "boolean"
                  },
                  "concurrentViewersText": {
                    "label": "Watching Now",
                    "format": "text"
                  },
                  "likeCount": {
                    "label": "Likes",
                    "format": "number"
                  },
                  "publishedAt": {
                    "label": "Published At",
                    "format": "text"
                  },
                  "category": {
                    "label": "Category",
                    "format": "text"
                  },
                  "badges": {
                    "label": "Badges",
                    "format": "text"
                  },
                  "authorMetadata.channelId": {
                    "label": "Channel ID",
                    "format": "text"
                  },
                  "authorMetadata.channelName": {
                    "label": "Channel",
                    "format": "text"
                  },
                  "authorMetadata.handle": {
                    "label": "Handle",
                    "format": "text"
                  },
                  "authorMetadata.channelUrl": {
                    "label": "Channel URL",
                    "format": "link"
                  },
                  "authorMetadata.subscriberCount": {
                    "label": "Subscribers",
                    "format": "number"
                  },
                  "authorMetadata.subscriberCountText": {
                    "label": "Subscribers Text",
                    "format": "text"
                  },
                  "authorMetadata.videoCount": {
                    "label": "Video Count",
                    "format": "number"
                  },
                  "authorMetadata.videoCountText": {
                    "label": "Videos Text",
                    "format": "text"
                  },
                  "authorMetadata.country": {
                    "label": "Country",
                    "format": "text"
                  },
                  "authorMetadata.isVerified": {
                    "label": "Verified",
                    "format": "boolean"
                  },
                  "authorMetadata.avatarUrl": {
                    "label": "Avatar URL",
                    "format": "link"
                  },
                  "authorMetadata.bannerUrl": {
                    "label": "Banner URL",
                    "format": "link"
                  },
                  "authorMetadata.rssUrl": {
                    "label": "RSS URL",
                    "format": "link"
                  },
                  "authorMetadata.isFamilySafe": {
                    "label": "Family Safe",
                    "format": "boolean"
                  },
                  "authorMetadata.keywords": {
                    "label": "Keywords",
                    "format": "text"
                  },
                  "authorMetadata.description": {
                    "label": "Description",
                    "format": "text"
                  },
                  "authorMetadata.aboutDescription": {
                    "label": "About Description",
                    "format": "text"
                  },
                  "authorMetadata.channelLinks": {
                    "label": "Channel Links",
                    "format": "text"
                  },
                  "authorMetadata.joinedDateText": {
                    "label": "Joined Date",
                    "format": "text"
                  },
                  "authorMetadata.totalViewsText": {
                    "label": "Total Views Text",
                    "format": "text"
                  },
                  "authorMetadata.totalViews": {
                    "label": "Total Views",
                    "format": "number"
                  },
                  "authorMetadata.location": {
                    "label": "Location",
                    "format": "text"
                  },
                  "authorMetadata.externalLinks": {
                    "label": "External Links",
                    "format": "text"
                  },
                  "shorts": {
                    "label": "Shorts",
                    "format": "text"
                  },
                  "playlists": {
                    "label": "Playlists",
                    "format": "text"
                  },
                  "liveVideos": {
                    "label": "Live Videos",
                    "format": "text"
                  },
                  "podcasts": {
                    "label": "Podcasts",
                    "format": "text"
                  },
                  "courses": {
                    "label": "Courses",
                    "format": "text"
                  },
                  "releases": {
                    "label": "Releases",
                    "format": "text"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# YouTube Channel Video Catalog & Profile Scraper\n\nPoint this actor at a YouTube channel and get its full public catalog back — the latest uploads, the complete back-catalog, Shorts, live and upcoming streams, playlists, podcast shows and channel courses — with exact view and like counts, publish dates, durations and descriptions, plus the channel profile: subscribers, description, links, country, join date, total views and verification.\n\n## What this actor does\n\n- **Complete video catalog:** newest, most popular or oldest first, paged through the channel's entire upload list\n- **Exact per-video metrics:** exact view count, exact like count, publish date, exact duration, description and category (when YouTube makes it publicly visible)\n- **Every public surface:** Shorts (with its own sort), live/upcoming/past streams, playlists, podcast shows, courses and music releases\n- **Channel profile:** subscribers, video count, handle, description, avatar, banner, country, join date, total views, external links, verification, keywords\n- **Members-only listings:** optionally list members-only videos (titles and public metadata) when YouTube offers that filter for the channel\n- **Bulk channels:** paste URLs, handles (`@name`) or channel IDs, one per line\n- **Empty fields are omitted** — empty text and missing numbers are left out instead of emitted as `null`\n\n## Output per video row\n\nEach long-form video is one row. Optional scalar fields are omitted when YouTube does not expose a value.\n\n| Field | Type | Example |\n|-------|------|---------|\n| `videoId` | string | `\"0e3GPea1Tyg\"` |\n| `title` | string | `\"$456,000 Squid Game In Real Life!\"` |\n| `url` | string | `\"https://www.youtube.com/watch?v=0e3GPea1Tyg\"` |\n| `viewCount` | integer (optional; exact only) | `905688793` |\n| `viewCountText` | string (optional) | `\"905,688,793 views\"` |\n| `likeCount` | integer (optional; exact only) | `2009889` |\n| `publishedAt` | string (optional) | `\"2026-10-03\"` or `\"2026-10-03T09:00:01-07:00\"` |\n| `category` | string (optional) | `\"Entertainment\"` |\n| `publishedTimeText` | string (optional) | `\"2 days ago\"` |\n| `duration` | string (optional; may be `\"LIVE\"`) | `\"25:42\"` |\n| `durationSeconds` | integer (optional) | `1542` |\n| `thumbnailUrl` | string (optional) | Video thumbnail URL |\n| `description` | string (optional) | Video description |\n| `isLive` | boolean | `false` |\n| `isShort` | boolean | `false` |\n| `isUpcoming` | boolean (only when true) | `true` |\n| `isMembersOnly` | boolean (only when true) | `true` |\n| `concurrentViewersText` | string (live only) | `\"2K watching\"` |\n| `badges` | array (optional) | Card badges such as `\"New\"` or `\"4K\"` |\n| `authorMetadata` | object | Channel details (see below) |\n| `scrapedAt` | string | `\"2026-10-18T12:00:00+00:00\"` |\n\nIf `includeExactMetrics` is off, `viewCount`/`likeCount`/`publishedAt`/`category` are omitted and the listing-page values (`viewCountText`, `publishedTimeText`) are returned instead. `category` and exact like counts are omitted when YouTube does not make them publicly visible.\n\n### Surface arrays\n\n`shorts`, `playlists`, `liveVideos`, `podcasts`, `courses` and `releases` are attached to the first video row of each channel (or to the channel-only row when `maxVideos` is 0) and are never repeated on every row.\n\n- `shorts[]` — `videoId`, `title`, `viewCountText`, `url`, `thumbnailUrl`, `type: \"short\"`; exact metrics are added when `includeExactMetrics` is on\n- `playlists[]` — `playlistId`, `title`, `url`, `thumbnailUrl`, `videoCountText`, `videoCount`, `lastUpdatedText`\n- `liveVideos[]` — the same video fields as a normal row, including `isLive`, `isUpcoming` and `concurrentViewersText`\n- `podcasts[]` — `podcastShowId`, `title`, `url`, `thumbnailUrl`, `episodeCountText`, `episodeCount`, `lastUpdatedText`\n- `courses[]` / `releases[]` — `playlistId`, `title`, `url`, `thumbnailUrl`, `videoCountText`, `videoCount`\n\n### `authorMetadata` fields\n\n| Field | Type | Example |\n|-------|------|---------|\n| `channelId` | string | `\"UCX6OQ3DkcsbYNE6H8uQQuVA\"` |\n| `channelName` | string | `\"MrBeast\"` |\n| `handle` | string | `\"@MrBeast\"` |\n| `channelUrl` | string | `\"https://www.youtube.com/@MrBeast\"` |\n| `description` | string | Channel description |\n| `subscriberCountText` | string | `\"466M subscribers\"` |\n| `subscriberCount` | integer (optional; exact text only) | `8390` |\n| `videoCount` / `videoCountText` | integer / string | `948` / `\"948 videos\"` |\n| `country` | string (optional, ISO code) | `\"CZ\"` |\n| `location` | string (optional) | `\"Czechia\"` |\n| `joinedDateText` | string (optional) | `\"Joined Feb 20, 2012\"` |\n| `totalViews` / `totalViewsText` | integer / string (optional) | `2424926` / `\"2,424,926 views\"` |\n| `externalLinks[]` | array (optional) | `[{\"title\": \"Website\", \"url\": \"https://...\"}]` |\n| `aboutDescription` | string (optional) | Description as shown on the About panel |\n| `avatarUrl`, `bannerUrl` | string | Image URLs |\n| `isVerified`, `isFamilySafe` | boolean | `true` |\n| `isOfficialArtistChannel` | boolean (only when true) | `true` |\n| `keywords` | array (optional) | Owner-set channel keywords |\n| `channelLinks[]` | array (optional) | Header links: `[{\"title\": \"...\", \"url\": \"...\"}]` |\n| `rssUrl` | string (optional) | The channel's upstream RSS URL (YouTube's feed availability varies) |\n\nNumeric profile counts are emitted only when YouTube supplies an unabridged integer (for example `1,234 subscribers`). Rounded labels such as `466M subscribers` stay in the matching `*Text` field; an approximate value is never presented as an exact count.\n\nIf a channel page cannot be fetched or parsed at all, a row with `channelUrl`, `error`, `success: false` and `scrapedAt` is returned instead.\n\n## Input\n\n| Field | Type | Required | Default | Description |\n|-------|------|----------|---------|-------------|\n| `channelUrls` | string[] | Yes | – | Channel URLs, `@handles` or channel IDs |\n| `maxVideos` | integer | No | 50 | Max long-form videos per channel (0–10000). 0 returns profile only |\n| `sortVideosBy` | string | No | `\"newest\"` | `newest`, `popular`, `oldest` (falls back to newest when unavailable) |\n| `sortShortsBy` | string | No | `\"newest\"` | Shorts sort: `newest`, `popular`, `oldest` |\n| `includeAbout` | boolean | No | true | About-panel fields: total views, join date, location, country, links |\n| `includeShorts` | boolean | No | false | Include the Shorts tab |\n| `maxShorts` | integer | No | 20 | Cap for Shorts (1–2000) |\n| `includeLiveVideos` | boolean | No | false | Include live, upcoming and past streams |\n| `maxLiveVideos` | integer | No | 20 | Cap for streams (1–500) |\n| `includePlaylists` | boolean | No | false | Include playlists |\n| `maxPlaylists` | integer | No | 20 | Cap for playlists (1–500) |\n| `includePodcasts` | boolean | No | false | Include podcast shows |\n| `maxPodcasts` | integer | No | 50 | Cap for podcast shows (1–500) |\n| `includeCourses` | boolean | No | false | Include courses |\n| `maxCourses` | integer | No | 50 | Cap for courses (1–500) |\n| `includeReleases` | boolean | No | false | Include music releases |\n| `maxReleases` | integer | No | 50 | Cap for releases (1–500) |\n| `includeMembersOnly` | boolean | No | false | Also list members-only videos when YouTube offers that filter |\n| `includeExactMetrics` | boolean | No | true | Also fetch each video's exact counts, dates and descriptions (slower; turn off for listing-page values only) |\n| `market` | string | No | `\"US\"` | Market/region for content availability (31 countries) |\n| `language` | string | No | `\"en\"` | Language for YouTube's interface text (relative dates) |\n\n### Supported channel formats\n\n- `@MrBeast` — handle\n- `https://www.youtube.com/@MrBeast` — full URL\n- `https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA` — channel ID URL\n- `UCX6OQ3DkcsbYNE6H8uQQuVA` — raw channel ID\n- `MrBeast` — plain name (treated as a handle)\n\n### Example: catalog with every surface\n\n```json\n{\n  \"channelUrls\": [\"@MrBeast\"],\n  \"maxVideos\": 100,\n  \"sortVideosBy\": \"popular\",\n  \"includeShorts\": true,\n  \"maxShorts\": 50,\n  \"includeLiveVideos\": true,\n  \"includePlaylists\": true\n}\n```\n\n### Example: profile-only enrichment for a lead list\n\n```json\n{\n  \"channelUrls\": [\"@MrBeast\", \"@mkbhd\", \"@kurzgesagt\"],\n  \"maxVideos\": 0,\n  \"includeAbout\": true\n}\n```\n\n### Example: podcast and course discovery\n\n```json\n{\n  \"channelUrls\": [\"@LofiGirl\", \"@Fireship\"],\n  \"maxVideos\": 10,\n  \"includePodcasts\": true,\n  \"includeCourses\": true,\n  \"includeReleases\": true\n}\n```\n\n### Example: members-only backlog\n\n```json\n{\n  \"channelUrls\": [\"@LinusTechTips\"],\n  \"maxVideos\": 50,\n  \"includeMembersOnly\": true\n}\n```\n\n## Use cases\n\n- **Channel research** — map a creator's complete output, posting cadence and growth metrics\n- **Competitor analysis** — compare catalogs, view/like counts and publishing frequency across a niche\n- **Content auditing** — inventory every video on a channel to find gaps and evergreen performers\n- **Influencer vetting** — subscriber counts, verification, country and engagement signals in one run\n- **Media monitoring** — track news and live channels, including upcoming broadcasts\n- **ML datasets** — exact counts, ISO dates and descriptions ready for analysis\n\n## FAQ\n\n**Do I need a YouTube API key?**\nNo. The actor reads public YouTube pages and YouTube's own web endpoints; no API key, login or cookie is required.\n\n**Which sort orders are available?**\nNewest, most popular and oldest — for both long-form videos and Shorts. If a channel does not offer a chosen order, newest-first is used and the run log says so.\n\n**Why are some counts exact and others text only?**\nYouTube shows rounded labels like `466M subscribers` on channel pages. The actor keeps that label in its `*Text` field and never expands it into a fake exact number. Exact `viewCount` and `likeCount` come from each video's own metadata.\n\n**What does `includeExactMetrics` do?**\nIt fetches each video's exact views, likes, publish date, category and description. Turning it off makes runs faster and cheaper but returns listing-page values only.\n\n**How far back does the catalog go?**\nThe actor pages through the channel's entire upload list, up to your `maxVideos` setting (maximum 10,000 per channel). Channels with tens of thousands of uploads are limited only by that cap.\n\n**What can I learn about members-only or age-restricted videos?**\nTitles, publish dates, durations and like counts are public for members-only videos when the channel shows them in its Members-only filter — those rows carry `isMembersOnly: true` and are added in addition to your `maxVideos` setting. Age-restricted videos are listed like any other video, with their public title, views, likes and duration; only *playback* is age-gated. Members-only and age-gated playback still requires a logged-in session; the actor never logs in.\n\n**Are live streams included?**\nYes, with `includeLiveVideos`: active streams include `isLive` and a `concurrentViewersText` (for example `\"2K watching\"`), scheduled premieres carry `isUpcoming`, and past streams come back with durations.\n\n**How fresh is the data?**\nData is fetched live at run time — there is no cache. Every run reflects the channel's current state. If a channel's catalog page cannot be fetched at all, the actor falls back to YouTube's public channel feed and returns that channel's latest 15 uploads instead of an empty result.\n\n**Do I need to set up a proxy?**\nNo. The actor uses a working public connection to YouTube automatically. Just fill in the input and run it.\n\n**Is this affiliated with YouTube?**\nNo. This is an independent tool and is not affiliated with, endorsed by, or sponsored by YouTube or Google.\n"
    },
    "buildNumber": "1.0.2",
    "imageDigest": "bef71bdfa91d2ee74f8b81c2f893a3efdbfdfa51dfacd08c4a75b19fd03328f7",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.016947777777777777
    }
  }
}