Vexaloom Labs

YouTube Channel Video Catalog & Profile Scraper

Get a YouTube channel's profile details (subscribers, description, links, verification) together with its video, Shorts, playlist or live-stream catalog, for one channel or many at once.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
channelUrlsarrayrequiredYouTube channel URLs, handles (@username), or channel IDs (UCxxx). Accepts any format.
maxVideosintegeroptionalMaximum number of videos to scrape per channel. Set to 0 to get only channel info without videos.
sortVideosBystringoptionalHow to sort the channel's video listings. If YouTube does not offer the chosen sort for a channel, newest-first is used.
Show all input fields
FieldTypeRequiredDescription
channelUrlsarrayrequiredYouTube channel URLs, handles (@username), or channel IDs (UCxxx). Accepts any format.
maxVideosintegeroptionalMaximum number of videos to scrape per channel. Set to 0 to get only channel info without videos.
sortVideosBystringoptionalHow to sort the channel's video listings. If YouTube does not offer the chosen sort for a channel, newest-first is used.
sortShortsBystringoptionalHow to sort the channel's Shorts listing (when includeShorts is enabled). Falls back to newest-first when the channel offers no Shorts sort.
includeAboutbooleanoptionalExtract total views, join date, location, country, and external links from the channel About page.
includeShortsbooleanoptionalScrape the channel Shorts tab and include Shorts in the output.
maxShortsintegeroptionalMaximum number of Shorts to return (when includeShorts is enabled).
includeLiveVideosbooleanoptionalScrape the channel Live/Streams tab and include live, upcoming, and past streams.
maxLiveVideosintegeroptionalMaximum live/stream videos to return (when includeLiveVideos is enabled).
includePlaylistsbooleanoptionalScrape the channel Playlists tab and include playlist metadata in the output.
maxPlaylistsintegeroptionalMaximum number of playlists to scrape (when includePlaylists is enabled).
includePodcastsbooleanoptionalScrape the channel Podcasts tab and include podcast shows (when the channel has one).
maxPodcastsintegeroptionalMaximum number of podcast shows to return (when includePodcasts is enabled).
includeCoursesbooleanoptionalScrape the channel Courses tab and include course playlists (when the channel has one).
maxCoursesintegeroptionalMaximum number of courses to return (when includeCourses is enabled).
includeReleasesbooleanoptionalScrape the channel Releases tab and include release playlists (when the channel has one).
maxReleasesintegeroptionalMaximum number of releases to return (when includeReleases is enabled).
includeMembersOnlybooleanoptionalAlso 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.
includeExactMetricsbooleanoptionalAlso 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.
marketstringoptionalCountry used for regional content availability and localized results (YouTube gl parameter).
languagestringoptionalLanguage for YouTube's interface text (relative dates like "2 days ago"). Titles and descriptions stay in the creator's own language.

Download the published input schema

View complete JSON
{
  "properties": {
    "channelUrls": {
      "description": "YouTube channel URLs, handles (@username), or channel IDs (UCxxx). Accepts any format.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "prefill": [
        "https://www.youtube.com/@Apify"
      ],
      "title": "Channel URLs",
      "type": "array"
    },
    "includeAbout": {
      "default": true,
      "description": "Extract total views, join date, location, country, and external links from the channel About page.",
      "prefill": true,
      "title": "Include About Page Data",
      "type": "boolean"
    },
    "includeCourses": {
      "default": false,
      "description": "Scrape the channel Courses tab and include course playlists (when the channel has one).",
      "prefill": false,
      "title": "Include Courses",
      "type": "boolean"
    },
    "includeExactMetrics": {
      "default": 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.",
      "prefill": true,
      "title": "Fetch Exact Video Metrics",
      "type": "boolean"
    },
    "includeLiveVideos": {
      "default": false,
      "description": "Scrape the channel Live/Streams tab and include live, upcoming, and past streams.",
      "prefill": false,
      "title": "Include Live/Stream Videos",
      "type": "boolean"
    },
    "includeMembersOnly": {
      "default": 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.",
      "prefill": false,
      "title": "Include Members-Only Videos",
      "type": "boolean"
    },
    "includePlaylists": {
      "default": false,
      "description": "Scrape the channel Playlists tab and include playlist metadata in the output.",
      "prefill": false,
      "title": "Include Channel Playlists",
      "type": "boolean"
    },
    "includePodcasts": {
      "default": false,
      "description": "Scrape the channel Podcasts tab and include podcast shows (when the channel has one).",
      "prefill": false,
      "title": "Include Podcast Shows",
      "type": "boolean"
    },
    "includeReleases": {
      "default": false,
      "description": "Scrape the channel Releases tab and include release playlists (when the channel has one).",
      "prefill": false,
      "title": "Include Music Releases",
      "type": "boolean"
    },
    "includeShorts": {
      "default": false,
      "description": "Scrape the channel Shorts tab and include Shorts in the output.",
      "prefill": false,
      "title": "Include Channel Shorts",
      "type": "boolean"
    },
    "language": {
      "default": "en",
      "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",
      "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"
      ],
      "title": "Language",
      "type": "string"
    },
    "market": {
      "default": "US",
      "description": "Country used for regional content availability and localized results (YouTube gl parameter).",
      "editor": "select",
      "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"
      ],
      "title": "Market / Region",
      "type": "string"
    },
    "maxCourses": {
      "default": 50,
      "description": "Maximum number of courses to return (when includeCourses is enabled).",
      "maximum": 500,
      "minimum": 1,
      "title": "Max Courses",
      "type": "integer"
    },
    "maxLiveVideos": {
      "default": 20,
      "description": "Maximum live/stream videos to return (when includeLiveVideos is enabled).",
      "maximum": 500,
      "minimum": 1,
      "title": "Max Live Videos",
      "type": "integer"
    },
    "maxPlaylists": {
      "default": 20,
      "description": "Maximum number of playlists to scrape (when includePlaylists is enabled).",
      "maximum": 500,
      "minimum": 1,
      "title": "Max Playlists",
      "type": "integer"
    },
    "maxPodcasts": {
      "default": 50,
      "description": "Maximum number of podcast shows to return (when includePodcasts is enabled).",
      "maximum": 500,
      "minimum": 1,
      "title": "Max Podcast Shows",
      "type": "integer"
    },
    "maxReleases": {
      "default": 50,
      "description": "Maximum number of releases to return (when includeReleases is enabled).",
      "maximum": 500,
      "minimum": 1,
      "title": "Max Releases",
      "type": "integer"
    },
    "maxShorts": {
      "default": 20,
      "description": "Maximum number of Shorts to return (when includeShorts is enabled).",
      "maximum": 2000,
      "minimum": 1,
      "title": "Max Shorts",
      "type": "integer"
    },
    "maxVideos": {
      "default": 50,
      "description": "Maximum number of videos to scrape per channel. Set to 0 to get only channel info without videos.",
      "editor": "number",
      "maximum": 10000,
      "minimum": 0,
      "prefill": 3,
      "title": "Max Videos Per Channel",
      "type": "integer"
    },
    "sortShortsBy": {
      "default": "newest",
      "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.",
      "editor": "select",
      "enum": [
        "newest",
        "popular",
        "oldest"
      ],
      "enumTitles": [
        "Newest first",
        "Most popular",
        "Oldest first"
      ],
      "title": "Sort Shorts By",
      "type": "string"
    },
    "sortVideosBy": {
      "default": "newest",
      "description": "How to sort the channel's video listings. If YouTube does not offer the chosen sort for a channel, newest-first is used.",
      "editor": "select",
      "enum": [
        "newest",
        "popular",
        "oldest"
      ],
      "enumTitles": [
        "Newest first",
        "Most popular",
        "Oldest first"
      ],
      "title": "Sort Videos By",
      "type": "string"
    }
  },
  "required": [
    "channelUrls"
  ],
  "schemaVersion": 1,
  "title": "YouTube Channel Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
videosstringoptionalDataset containing all scraped channel info, author metadata, and video rows.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "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": {
      "description": "Dataset containing all scraped channel info, author metadata, and video rows.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "YouTube Channel Video Catalog & Profile Scraper dataset",
      "type": "string"
    }
  },
  "title": "YouTube Channel Video Catalog & Profile Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "detailed": {
      "display": {
        "component": "table",
        "properties": {
          "authorMetadata.aboutDescription": {
            "format": "text",
            "label": "About Description"
          },
          "authorMetadata.avatarUrl": {
            "format": "link",
            "label": "Avatar URL"
          },
          "authorMetadata.bannerUrl": {
            "format": "link",
            "label": "Banner URL"
          },
          "authorMetadata.channelId": {
            "format": "text",
            "label": "Channel ID"
          },
          "authorMetadata.channelLinks": {
            "format": "text",
            "label": "Channel Links"
          },
          "authorMetadata.channelName": {
            "format": "text",
            "label": "Channel"
          },
          "authorMetadata.channelUrl": {
            "format": "link",
            "label": "Channel URL"
          },
          "authorMetadata.country": {
            "format": "text",
            "label": "Country"
          },
          "authorMetadata.description": {
            "format": "text",
            "label": "Description"
          },
          "authorMetadata.externalLinks": {
            "format": "text",
            "label": "External Links"
          },
          "authorMetadata.handle": {
            "format": "text",
            "label": "Handle"
          },
          "authorMetadata.isFamilySafe": {
            "format": "boolean",
            "label": "Family Safe"
          },
          "authorMetadata.isVerified": {
            "format": "boolean",
            "label": "Verified"
          },
          "authorMetadata.joinedDateText": {
            "format": "text",
            "label": "Joined Date"
          },
          "authorMetadata.keywords": {
            "format": "text",
            "label": "Keywords"
          },
          "authorMetadata.location": {
            "format": "text",
            "label": "Location"
          },
          "authorMetadata.rssUrl": {
            "format": "link",
            "label": "RSS URL"
          },
          "authorMetadata.subscriberCount": {
            "format": "number",
            "label": "Subscribers"
          },
          "authorMetadata.subscriberCountText": {
            "format": "text",
            "label": "Subscribers Text"
          },
          "authorMetadata.totalViews": {
            "format": "number",
            "label": "Total Views"
          },
          "authorMetadata.totalViewsText": {
            "format": "text",
            "label": "Total Views Text"
          },
          "authorMetadata.videoCount": {
            "format": "number",
            "label": "Video Count"
          },
          "authorMetadata.videoCountText": {
            "format": "text",
            "label": "Videos Text"
          },
          "badges": {
            "format": "text",
            "label": "Badges"
          },
          "category": {
            "format": "text",
            "label": "Category"
          },
          "concurrentViewersText": {
            "format": "text",
            "label": "Watching Now"
          },
          "courses": {
            "format": "text",
            "label": "Courses"
          },
          "description": {
            "format": "text",
            "label": "Description"
          },
          "duration": {
            "format": "text",
            "label": "Duration"
          },
          "durationSeconds": {
            "format": "number",
            "label": "Duration (s)"
          },
          "isLive": {
            "format": "boolean",
            "label": "Live"
          },
          "isMembersOnly": {
            "format": "boolean",
            "label": "Members Only"
          },
          "isShort": {
            "format": "boolean",
            "label": "Short"
          },
          "isUpcoming": {
            "format": "boolean",
            "label": "Upcoming"
          },
          "likeCount": {
            "format": "number",
            "label": "Likes"
          },
          "liveVideos": {
            "format": "text",
            "label": "Live Videos"
          },
          "playlists": {
            "format": "text",
            "label": "Playlists"
          },
          "podcasts": {
            "format": "text",
            "label": "Podcasts"
          },
          "publishedAt": {
            "format": "text",
            "label": "Published At"
          },
          "publishedTimeText": {
            "format": "text",
            "label": "Published"
          },
          "releases": {
            "format": "text",
            "label": "Releases"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped At"
          },
          "shorts": {
            "format": "text",
            "label": "Shorts"
          },
          "thumbnailUrl": {
            "format": "link",
            "label": "Thumbnail"
          },
          "title": {
            "format": "text",
            "label": "Title"
          },
          "url": {
            "format": "link",
            "label": "URL"
          },
          "videoId": {
            "format": "text",
            "label": "Video ID"
          },
          "viewCount": {
            "format": "number",
            "label": "Views"
          },
          "viewCountText": {
            "format": "text",
            "label": "Views Text"
          }
        }
      },
      "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"
        ]
      }
    },
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "authorMetadata.channelName": {
            "format": "text",
            "label": "Channel"
          },
          "authorMetadata.subscriberCount": {
            "format": "number",
            "label": "Subscribers"
          },
          "duration": {
            "format": "text",
            "label": "Duration"
          },
          "publishedTimeText": {
            "format": "text",
            "label": "Published"
          },
          "title": {
            "format": "text",
            "label": "Title"
          },
          "url": {
            "format": "link",
            "label": "URL"
          },
          "videoId": {
            "format": "text",
            "label": "Video ID"
          },
          "viewCount": {
            "format": "number",
            "label": "Views"
          }
        }
      },
      "title": "Overview",
      "transformation": {
        "fields": [
          "title",
          "videoId",
          "viewCount",
          "duration",
          "publishedTimeText",
          "url",
          "authorMetadata.channelName",
          "authorMetadata.subscriberCount"
        ],
        "flatten": [
          "authorMetadata"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

YouTube Channel Video Catalog & Profile Scraper

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

What this actor does

  • Complete video catalog: newest, most popular or oldest first, paged through the channel's entire upload list
  • Exact per-video metrics: exact view count, exact like count, publish date, exact duration, description and category (when YouTube makes it publicly visible)
  • Every public surface: Shorts (with its own sort), live/upcoming/past streams, playlists, podcast shows, courses and music releases
  • Channel profile: subscribers, video count, handle, description, avatar, banner, country, join date, total views, external links, verification, keywords
  • Members-only listings: optionally list members-only videos (titles and public metadata) when YouTube offers that filter for the channel
  • Bulk channels: paste URLs, handles (@name) or channel IDs, one per line
  • Empty fields are omitted — empty text and missing numbers are left out instead of emitted as null

Output per video row

Each long-form video is one row. Optional scalar fields are omitted when YouTube does not expose a value.

Field Type Example
videoId string "0e3GPea1Tyg"
title string "$456,000 Squid Game In Real Life!"
url string "https://www.youtube.com/watch?v=0e3GPea1Tyg"
viewCount integer (optional; exact only) 905688793
viewCountText string (optional) "905,688,793 views"
likeCount integer (optional; exact only) 2009889
publishedAt string (optional) "2026-10-03" or "2026-10-03T09:00:01-07:00"
category string (optional) "Entertainment"
publishedTimeText string (optional) "2 days ago"
duration string (optional; may be "LIVE") "25:42"
durationSeconds integer (optional) 1542
thumbnailUrl string (optional) Video thumbnail URL
description string (optional) Video description
isLive boolean false
isShort boolean false
isUpcoming boolean (only when true) true
isMembersOnly boolean (only when true) true
concurrentViewersText string (live only) "2K watching"
badges array (optional) Card badges such as "New" or "4K"
authorMetadata object Channel details (see below)
scrapedAt string "2026-10-18T12:00:00+00:00"

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

Surface arrays

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.

  • shorts[] — videoId, title, viewCountText, url, thumbnailUrl, type: "short"; exact metrics are added when includeExactMetrics is on
  • playlists[] — playlistId, title, url, thumbnailUrl, videoCountText, videoCount, lastUpdatedText
  • liveVideos[] — the same video fields as a normal row, including isLive, isUpcoming and concurrentViewersText
  • podcasts[] — podcastShowId, title, url, thumbnailUrl, episodeCountText, episodeCount, lastUpdatedText
  • courses[] / releases[] — playlistId, title, url, thumbnailUrl, videoCountText, videoCount

authorMetadata fields

Field Type Example
channelId string "UCX6OQ3DkcsbYNE6H8uQQuVA"
channelName string "MrBeast"
handle string "@MrBeast"
channelUrl string "https://www.youtube.com/@MrBeast"
description string Channel description
subscriberCountText string "466M subscribers"
subscriberCount integer (optional; exact text only) 8390
videoCount / videoCountText integer / string 948 / "948 videos"
country string (optional, ISO code) "CZ"
location string (optional) "Czechia"
joinedDateText string (optional) "Joined Feb 20, 2012"
totalViews / totalViewsText integer / string (optional) 2424926 / "2,424,926 views"
externalLinks[] array (optional) [{"title": "Website", "url": "https://..."}]
aboutDescription string (optional) Description as shown on the About panel
avatarUrl, bannerUrl string Image URLs
isVerified, isFamilySafe boolean true
isOfficialArtistChannel boolean (only when true) true
keywords array (optional) Owner-set channel keywords
channelLinks[] array (optional) Header links: [{"title": "...", "url": "..."}]
rssUrl string (optional) The channel's upstream RSS URL (YouTube's feed availability varies)

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

If a channel page cannot be fetched or parsed at all, a row with channelUrl, error, success: false and scrapedAt is returned instead.

Input

Field Type Required Default Description
channelUrls string[] Yes – Channel URLs, @handles or channel IDs
maxVideos integer No 50 Max long-form videos per channel (0–10000). 0 returns profile only
sortVideosBy string No "newest" newest, popular, oldest (falls back to newest when unavailable)
sortShortsBy string No "newest" Shorts sort: newest, popular, oldest
includeAbout boolean No true About-panel fields: total views, join date, location, country, links
includeShorts boolean No false Include the Shorts tab
maxShorts integer No 20 Cap for Shorts (1–2000)
includeLiveVideos boolean No false Include live, upcoming and past streams
maxLiveVideos integer No 20 Cap for streams (1–500)
includePlaylists boolean No false Include playlists
maxPlaylists integer No 20 Cap for playlists (1–500)
includePodcasts boolean No false Include podcast shows
maxPodcasts integer No 50 Cap for podcast shows (1–500)
includeCourses boolean No false Include courses
maxCourses integer No 50 Cap for courses (1–500)
includeReleases boolean No false Include music releases
maxReleases integer No 50 Cap for releases (1–500)
includeMembersOnly boolean No false Also list members-only videos when YouTube offers that filter
includeExactMetrics boolean No true Also fetch each video's exact counts, dates and descriptions (slower; turn off for listing-page values only)
market string No "US" Market/region for content availability (31 countries)
language string No "en" Language for YouTube's interface text (relative dates)

Supported channel formats

  • @MrBeast — handle
  • https://www.youtube.com/@MrBeast — full URL
  • https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA — channel ID URL
  • UCX6OQ3DkcsbYNE6H8uQQuVA — raw channel ID
  • MrBeast — plain name (treated as a handle)

Example: catalog with every surface

{
  "channelUrls": ["@MrBeast"],
  "maxVideos": 100,
  "sortVideosBy": "popular",
  "includeShorts": true,
  "maxShorts": 50,
  "includeLiveVideos": true,
  "includePlaylists": true
}

Example: profile-only enrichment for a lead list

{
  "channelUrls": ["@MrBeast", "@mkbhd", "@kurzgesagt"],
  "maxVideos": 0,
  "includeAbout": true
}

Example: podcast and course discovery

{
  "channelUrls": ["@LofiGirl", "@Fireship"],
  "maxVideos": 10,
  "includePodcasts": true,
  "includeCourses": true,
  "includeReleases": true
}

Example: members-only backlog

{
  "channelUrls": ["@LinusTechTips"],
  "maxVideos": 50,
  "includeMembersOnly": true
}

Use cases

  • Channel research — map a creator's complete output, posting cadence and growth metrics
  • Competitor analysis — compare catalogs, view/like counts and publishing frequency across a niche
  • Content auditing — inventory every video on a channel to find gaps and evergreen performers
  • Influencer vetting — subscriber counts, verification, country and engagement signals in one run
  • Media monitoring — track news and live channels, including upcoming broadcasts
  • ML datasets — exact counts, ISO dates and descriptions ready for analysis

FAQ

Do I need a YouTube API key? No. The actor reads public YouTube pages and YouTube's own web endpoints; no API key, login or cookie is required.

Which sort orders are available? Newest, 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.

Why are some counts exact and others text only? YouTube 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.

What does includeExactMetrics do? It 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.

How far back does the catalog go? The 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.

What can I learn about members-only or age-restricted videos? Titles, 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.

Are live streams included? Yes, with includeLiveVideos: active streams include isLive and a concurrentViewersText (for example "2K watching"), scheduled premieres carry isUpcoming, and past streams come back with durations.

How fresh is the data? Data 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.

Do I need to set up a proxy? No. The actor uses a working public connection to YouTube automatically. Just fill in the input and run it.

Is this affiliated with YouTube? No. This is an independent tool and is not affiliated with, endorsed by, or sponsored by YouTube or Google.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build 6GWCnW79ucQmuV0Ao. Documentation is regenerated from the default published build; private drafts are not included.