YouTube Channel Videos Scraper

Export recent public videos from YouTube channels with video IDs, URLs, titles, descriptions, published dates, thumbnails, Shorts flags, and view counts.

Data fields

FieldTypeDescription
channelIdstringStable public YouTube channel identifier.
channelNamestring | nullPublic channel name from the feed.
channelUrlstringPublic channel URL from the feed.
videoIdstringStable public YouTube video identifier.
videoUrlstringPublic video URL from the feed.
titlestringPublic video title.
descriptionstring | nullPublic video description when provided by the feed.
publishedAtstring | nullPublic publication timestamp when available.

Input preview

channelUrlsOrIdsChannel URLs, handles, or IDs *
maxVideosPerChannelMaximum videos per channel
includeShortsInclude Shorts
resumeFromCheckpointResume pending channels after migration
proxyConfigurationProxy configuration for feed fallback

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Export recent public videos from YouTube channels by channel URL, @handle, or channel ID.

Use this actor to turn YouTube channel inputs into clean video metadata rows for competitor monitoring, creator research, content operations, trend tracking, and agent workflows. Results can be downloaded as CSV, JSON, Excel, XML, RSS, or used through the Apify Dataset API.

At a glance

  • Recent channel videos: Save video IDs, canonical URLs, titles, descriptions, published dates, thumbnails, durations, Shorts flags, and view counts.
  • Flexible channel inputs: Use full channel URLs, @handles, or stable UC... channel IDs.
  • Shorts control: Keep Shorts in the output or filter them out with includeShorts.
  • Per-channel caps: Limit saved videos per channel for cost control and repeatable monitoring.
  • Resilient batch handling: Invalid inputs fail before the start charge; transient public-feed responses use bounded retries, while one failed channel does not discard successful channel rows.
  • Agent-ready output: Feed stable video URLs and IDs into transcript, comment, enrichment, alerting, or reporting workflows.

What can it do?

YouTube Channel Videos Scraper saves one dataset row per recent public video found for each submitted channel.

  • Resolve channels: Accept channel URLs, @handles, and UC... IDs.
  • Export video metadata: Save video ID, URL, title, description, publish date, thumbnail, duration, view count, and source channel data.
  • Separate Shorts workflows: Keep Shorts by default or set includeShorts to false for long-form-only exports.
  • Control volume: Use maxVideosPerChannel to cap saved rows per channel.
  • Chain workflows: Send videoUrl or videoId into transcript, comment, summarization, or monitoring actors.

Common workflows

  • Competitor monitoring: Schedule a list of competitor channels and compare recent uploads over time.
  • Creator discovery: Export recent videos from target creators before analyzing topics, cadence, or engagement.
  • Content operations: Feed new video URLs into transcript, clipping, tagging, or editorial workflows.
  • Research datasets: Build bounded datasets for channel-level or niche-level video analysis.
  • Shorts inventory: Keep includeShorts enabled to capture short-form uploads when they appear in channel feeds.

Example input

{
  "channelUrlsOrIds": [
    "https://www.youtube.com/@GoogleDevelopers",
    "UC_x5XG1OV2P6uZZ5FSM9Ttw"
  ],
  "maxVideosPerChannel": 10,
  "includeShorts": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}

Example output

{
  "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
  "channelName": "Google for Developers",
  "channelUrl": "https://www.youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw",
  "videoId": "eaUd3iYkj_w",
  "videoUrl": "https://www.youtube.com/shorts/eaUd3iYkj_w",
  "title": "In production, which file actually gets loaded?",
  "description": "A package import can look simple on the surface.",
  "publishedAt": "2026-06-15T13:00:09+00:00",
  "thumbnailUrl": "https://i2.ytimg.com/vi/eaUd3iYkj_w/hqdefault.jpg",
  "duration": null,
  "isShort": true,
  "viewCount": 1315,
  "sourceUrl": "https://www.youtube.com/@GoogleDevelopers",
  "scrapedAt": "2026-06-15T20:00:00.000Z"
}

Tips for best results

  • Prefer channel IDs for automation: IDs are more stable than handles.
  • Use handles for quick setup: Handles such as @GoogleDevelopers are easy to paste into the UI.
  • Set a per-channel cap: Keep maxVideosPerChannel low for tests and monitoring tasks.
  • Decide on Shorts early: Set includeShorts to false if your downstream workflow expects only regular video pages.
  • Chain by video ID: Use videoId or videoUrl for transcript, comment, or video-detail enrichment.

API and integrations

  • Run the actor from the Apify Console, API, SDKs, webhooks, schedules, or MCP-compatible agents.
  • Export datasets as CSV, JSON, Excel, XML, RSS, or stream rows through the Dataset API.
  • Schedule recurring runs to monitor upload cadence.
  • Feed video URLs into transcript, comment, summarization, classification, or alerting workflows.

Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/youtube-channel-videos-scraper').call({
  channelUrlsOrIds: ['https://www.youtube.com/@GoogleDevelopers'],
  maxVideosPerChannel: 10,
  includeShorts: true,
});
console.log(`Dataset: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);

Python

from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/youtube-channel-videos-scraper').call(run_input={
    'channelUrlsOrIds': ['https://www.youtube.com/@GoogleDevelopers'],
    'maxVideosPerChannel': 10,
    'includeShorts': True,
})
print(f"Dataset: https://console.apify.com/storage/datasets/{run['defaultDatasetId']}")

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~youtube-channel-videos-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"channelUrlsOrIds":["https://www.youtube.com/@GoogleDevelopers"],"maxVideosPerChannel":10,"includeShorts":true}'

MCP and AI agents

Use the official Apify MCP server when you want Claude, ChatGPT, or another MCP-compatible client to run this Actor.

claude mcp add apify --transport http "https://mcp.apify.com?tools=fetch_cat/youtube-channel-videos-scraper"
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/youtube-channel-videos-scraper"
    }
  }
}

Example prompt: "Export the latest videos from these YouTube channels, skip Shorts, and return titles, video URLs, publish dates, thumbnails, and view counts."

Limits and responsible use

  • The actor extracts public recent-video metadata. It does not download video files or access private analytics.
  • YouTube public channel feeds may expose only a recent batch of videos, not a complete historical archive.
  • Some fields, such as duration or view count, may be unavailable for some videos.
  • A run keeps successful channel rows when another channel is unavailable. Review the RUN_SUMMARY key-value record for failed channels, retries, pending channels, and deadline-related partial completion. Runs with zero saved videos fail rather than producing a misleading empty success.
  • The actor uses public YouTube pages and feeds only; it does not collect cookies, use account credentials, or attempt PO-token or account-access circumvention.
  • Review your use of exported data against YouTube terms, Apify terms, and applicable privacy rules.

Support

If a public channel input fails, try a stable channel ID first. If the issue continues, open an issue or report a bug from the actor page with the run ID or run URL, input JSON, expected output, actual output, and a reproducible public URL such as a channel page.

Privacy and data handling

This Actor only requests the permissions needed to run the input you provide. It uses your input (such as URLs, search terms, identifiers, filters, and limits) only to fetch the requested public data from the relevant source site or API for this Actor, then writes results to your Apify dataset/key-value store.

Data may pass through Apify platform services and Apify Proxy during the run, and requests are sent only to the target site or public data provider required for this Actor's results. FetchCat does not send your inputs or outputs to advertising networks, data brokers, or model-training services, and does not retain run data outside Apify storage after the run except when you explicitly share run details for transient support debugging.

You are responsible for using this Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs. Review the output before storing, sharing, or combining it with other data.

Common questions

Questions and answers reused from the canonical actor README.

Can I scrape multiple channels in one run?

Yes. Add multiple values to channelUrlsOrIds; the actor saves up to maxVideosPerChannel videos for each channel.

Can I use channel IDs instead of URLs?

Yes. Channel IDs are supported and are the most stable input format.

Does this actor download videos?

No. It extracts public metadata and URLs, not media files.

Does it include Shorts?

Yes, by default. Set includeShorts to false to skip Shorts when they appear.

Can I run it from code?

Yes. Use the Apify API, SDKs, webhooks, schedules, or MCP-compatible agents.