YouTube Channel Scraper – Videos, Shorts & Subscribers avatar

YouTube Channel Scraper – Videos, Shorts & Subscribers

Pricing

from $0.50 / 1,000 results

Go to Apify Store
YouTube Channel Scraper – Videos, Shorts & Subscribers

YouTube Channel Scraper – Videos, Shorts & Subscribers

Scrape YouTube channels by URL, @handle or ID: subscribers, total views, joined date, country, links + videos, Shorts & streams with views, dates, duration. No API key.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

ninhothedev

ninhothedev

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

20 hours ago

Last modified

Share

YouTube Channel Scraper pulls public data from supported public YouTube channels without an API key. You get the channel profile (subscribers, total views, video count, joined date, country, description, external links, avatar, banner) and the channel's videos, Shorts and live streams with views, publish dates, duration and thumbnails. You can paste channel URLs, @handles, channel IDs or playlist links, sort by newest, most popular or oldest, and export to JSON, CSV, Excel or Google Sheets. There are no Google Cloud projects, quotas or OAuth to set up.

It reads YouTube's own internal JSON (the same data the website loads) instead of fragile HTML selectors, and supports a 512 MB runtime. Availability, speed and proxy costs vary by source response and input.

What data can you extract?

Channel profile (one row per channel, type = "channel"):

FieldExample
channelMrBeast
channel_handle@MrBeast
channel_idUCX6OQ3DkcsbYNE6H8uQQuVA
subscribers521000000
total_views142830800258
video_count1006
joined_date2012-02-19
countryUnited States
descriptionSUBSCRIBE FOR A COOKIE! …
links[{"title": "Twitter", "url": "https://twitter.com/MrBeast"}, …]
avatar, bannerimage URLs
keywords, is_verified, rss_urlchannel tags, verified badge, RSS feed

Videos / Shorts / streams (one row per video, type = "video"):

FieldExample
video_idplN7JMbadRg
titleEat Everything In A Grocery Store, Win $1,000,000
urlhttps://www.youtube.com/watch?v=plN7JMbadRg
content_typevideo / short / stream
views261244854
likes4023626
comments150000 (with exact video details)
published2026-10-03T16:00:01+00:00 (exact, when available)
published_time_text12 days ago
published_date2026-10-03 (published_date_estimated = true if computed from "x days ago")
duration / duration_seconds57:59 / 3479
thumbnailhttps://i.ytimg.com/vi/plN7JMbadRg/hq720.jpg…
descriptionavailable description; may be missing or shortened
channel, channel_url, channel_subscriberschannel context when available
position, sort_by, inputrank on the channel tab, sort used, which input produced it

How to use

  1. Add channels. Paste one or more channel URLs (https://www.youtube.com/@MrBeast, /channel/UC…, /c/…, /user/…), @handles, UC… channel IDs or playlist links. A URL ending in /shorts or /streams scrapes only that tab.
  2. Choose what to scrape. Pick content types (Videos, Shorts, Live streams), the sort order (Newest, Popular, Oldest) and Max videos per channel (applied separately to each selected content tab). For channel inputs, set it to 0 to get only profiles; playlists instead retain their default video limit. Turn on Include exact video details to request additional view, like, comment and date metadata. Missing or unavailable fields remain null; enrichment is best effort.
  3. Run and export. Click Start, then download the dataset as JSON, CSV, Excel or HTML, or fetch it through the API.
{
"channels": ["https://www.youtube.com/@MrBeast", "@veritasium", "UC_x5XG1OV2P6uZZ5FSM9Ttw"],
"contentTypes": ["videos", "shorts"],
"sortBy": "popular",
"maxVideos": 50,
"includeChannelInfo": true,
"includeVideoDetails": false,
"maxItems": 1000
}

Individual videos: set "mode": "videos" and list video IDs or URLs in videoUrls. The Actor attempts video details, then falls back to basic oEmbed metadata if needed. Counts, dates or descriptions may be missing.

Output example

Real output from a verification run on the Apify platform (descriptions shortened):

[
{
"type": "channel",
"title": "MrBeast",
"channel": "MrBeast",
"channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"views": 142830800258,
"description": "SUBSCRIBE FOR A COOKIE!\nNew MrBeast or MrBeast Gaming video every single Saturday at noon eastern time! …",
"url": "https://www.youtube.com/@MrBeast",
"content_type": "channel",
"channel_handle": "@MrBeast",
"subscribers": 521000000,
"subscribers_text": "521M subscribers",
"video_count": 1006,
"total_views": 142830800258,
"joined_date": "2012-02-19",
"country": "United States",
"links": [
{"title": "$1,000,000 Contest", "url": "https://www.themostdangerousgames.com/"},
{"title": "Twitter", "url": "https://twitter.com/MrBeast"}
],
"is_verified": true
},
{
"type": "video",
"video_id": "plN7JMbadRg",
"title": "Eat Everything In A Grocery Store, Win $1,000,000",
"channel": "MrBeast",
"channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"author_url": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA",
"published": "2026-10-03T16:00:01+00:00",
"views": 261244854,
"likes": 4023626,
"description": "I trapped 4 strangers in an entire supermarket and the only way out is eating everything inside …",
"thumbnail": "https://i.ytimg.com/vi/plN7JMbadRg/hq720.jpg",
"url": "https://www.youtube.com/watch?v=plN7JMbadRg",
"scraped_at": "2026-10-15T18:04:15.227770+00:00",
"content_type": "video",
"published_time_text": "12 days ago",
"published_date": "2026-10-03",
"published_date_estimated": false,
"duration": "57:59",
"duration_seconds": 3479,
"views_text": "261M views",
"comments": 150000,
"channel_url": "https://www.youtube.com/@MrBeast",
"channel_handle": "@MrBeast",
"channel_subscribers": 521000000,
"position": 1,
"sort_by": "newest",
"input": "@MrBeast"
}
]

Without exact video details, video-list views come from YouTube's rounded labels (for example "227M views" becomes 227000000). For newest sorting, RSS enrichment is attempted for recent uploads when a feed is available. It does not guarantee a fixed number of enriched rows.

Pricing

This Actor uses pay per result: you pay for each dataset item (each channel profile or video), plus a tiny start fee. Check the Pricing tab for the current rate. At $0.50 per 1,000 results, 1,000 videos cost about $0.50. A typical run of 20 channel profiles with 50 videos each (1,020 items) costs about $0.51. These are result-event examples, not measured costs or profit. Proxy fallback can add platform usage.

Use cases

  • Influencer marketing & agency prospecting: collect subscribers, country, contact links and upload frequency for lists of creators.
  • Competitor and brand monitoring: track what competitor channels publish, how fast videos gain views and which topics perform best (sort by Popular).
  • Content strategy: find a channel's top videos and Shorts, best durations and title patterns.
  • Lead generation: build creator databases with external links (Instagram, X/Twitter, websites) for outreach.
  • Market research & media analytics: feed BI dashboards with channel growth snapshots on a schedule.
  • AI & data science: build labeled datasets of titles, descriptions and engagement metrics.

Integrations

Use the scraper from the Apify API, the Apify CLI, or connect it to Make, Zapier, n8n, Google Sheets, Slack, Airbyte and webhooks. Schedule it daily or weekly to track channel growth.

Python

Install apify-client==3.2.0, set APIFY_TOKEN in your environment and save this as export_channel.py. Each execution starts a paid run capped at six rows and $0.05 in Actor events; platform charges can differ. Files are written to the current folder.

"""Requires apify-client==3.2.0 and APIFY_TOKEN in the environment."""
import json
import os
from datetime import timedelta
from decimal import Decimal
from pathlib import Path
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('ninhothedev/youtube-channel-scraper').call(
run_input={'channels': ['@veritasium'], 'contentTypes': ['videos'],
'maxVideos': 5, 'maxItems': 6, 'includeChannelInfo': True,
'includeVideoDetails': False},
build=os.environ.get('APIFY_BUILD', 'latest'), memory_mbytes=512,
run_timeout=timedelta(seconds=180), max_total_charge_usd=Decimal('0.05'))
if run is None or run.status != 'SUCCEEDED':
raise RuntimeError('Run failed. Inspect its log before using the results.')
summary = client.key_value_store(run.default_key_value_store_id).get_record('RUN_SUMMARY')
if not summary:
raise RuntimeError('RUN_SUMMARY is missing.')
rows = list(client.dataset(run.default_dataset_id).iterate_items())
if summary['value']['items'] != len(rows):
raise RuntimeError('Summary count differs from the exported dataset.')
Path('youtube-channel-results.json').write_text(json.dumps(rows, indent=2), encoding='utf-8')
Path('youtube-channel-summary.json').write_text(json.dumps(summary['value'], indent=2), encoding='utf-8')
print(f'Run {run.id}: saved {len(rows)} rows. Review youtube-channel-summary.json for limits and issues.')

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('ninhothedev/youtube-channel-scraper').call({
channels: ['https://www.youtube.com/@MrBeast'],
sortBy: 'popular',
maxVideos: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

FAQ

Is it legal to scrape YouTube? The scraper only collects publicly available data that anyone can see without logging in. It doesn't access private videos, emails or personal accounts. Make sure your use complies with GDPR and other regulations, and with YouTube's terms where they apply.

Do I need a YouTube API key or proxies? No. The scraper works without a key and usually without a proxy. If YouTube rate-limits a run, it automatically retries through Apify Proxy when your account has access, or you can set a proxy in Proxy configuration.

How many videos can I get per channel? Pagination attempts more results up to the configured limits; blocks, missing tabs, repeated pages or unavailable continuations can stop it early. Use Max videos per channel and Max total results to control cost.

Are dates exact? published can be an RSS timestamp or a date-only value from successful detail enrichment. Do not assume timestamp precision for every row. Otherwise published_date is estimated from YouTube's "x days ago" label, and published_date_estimated is set to true.

What happens with an invalid or deleted channel? It is skipped and logged in the RUN_SUMMARY record in the key-value store. Other channels still get scraped. A run fails only if nothing at all could be scraped because of a YouTube error.

Can I schedule it? Yes. Use Apify Schedules (for example, daily) and connect the dataset to Google Sheets or a webhook.

Support: open an issue on the Issues tab with your run ID and input, without credentials or private data.

Result counts and coverage

maxVideos applies per selected content tab (and per playlist), while maxItems caps all dataset rows, including channel profiles. Videos are deduplicated globally by ID; if two inputs overlap, the first saved occurrence retains its input attribution. Target items counts only newly saved rows and sums to the delivered total in a fresh run.

Read RUN_SUMMARY alongside the dataset: targets, maxItemsReached, chargeLimitReached, proxyUsed and retry counts explain several reasons for limited output. A successful run can contain partial results or basic fallback metadata. The summary is not a field-completeness guarantee: missing About, RSS or detail metadata can remain null without a failed target. Check required fields before using rows in downstream reports. On restart, existing dataset rows are loaded before source work. Their IDs prevent repeat delivery and all stored rows count toward maxItems. previousItems records restored rows; newItems and target items describe this invocation. Keep input unchanged when resurrecting a run; use a fresh run for each monitoring snapshot. Rows without legacy IDs still count toward the cap but cannot be deduplicated by ID. A crash between platform storage and billing is not an application-level transactional guarantee.