YouTube Channel Scraper - Subscribers, Views & Channel Stats avatar

YouTube Channel Scraper - Subscribers, Views & Channel Stats

Pricing

from $1.00 / 1,000 channel scrapeds

Go to Apify Store
YouTube Channel Scraper - Subscribers, Views & Channel Stats

YouTube Channel Scraper - Subscribers, Views & Channel Stats

Get YouTube channel statistics in bulk: subscriber count, total views, video count, join date, country, description and the external links from the About panel, one row per channel. Paste @handles, URLs or channel IDs; recent videos optional. No API key or quota. For influencer and rival research.

Pricing

from $1.00 / 1,000 channel scrapeds

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

21

Total users

16

Monthly active users

19 days ago

Last modified

Share

YouTube Channel Scraper: Subscriber Count, Views and Channel Stats

This YouTube channel scraper turns any list of channels into clean channel statistics for influencer vetting, competitor tracking and creator lead lists, as structured JSON with no API key and no quota. Subscriber count, total lifetime views, video count, channel creation date, country, description, external links, keywords, avatar, and banner all come back in one row per channel. Optionally attach the channel's recent videos as extra rows. Run it from the Apify Store with one click, or call it from your own service through the Apify API. Pay per channel, not per month.

If you've been looking for a YouTube channel scraper in Python that stays maintained, a YouTube channel statistics tool that works in bulk, or a channel data extractor that reads @handles, UC… IDs, and full URLs interchangeably, this Actor is the hosted alternative. It reads the same public data the youtube.com channel page and its About panel show, so there's no API key, no OAuth screen, and no daily quota to burn.

What the YouTube channel scraper returns

  • Subscriber count as both an integer (subscriber_count) and the localized display string (subscriber_count_text, for example "21.3M subscribers").
  • Total lifetime views for the whole channel (total_view_count plus total_view_count_text), the aggregate view figure from the About panel.
  • Video count (video_count), the number of public uploads.
  • Channel creation date (joined_date and the raw joined_date_text like "Joined Mar 21, 2008"), useful for age and credibility checks.
  • Country (country) and channel keywords (keywords) straight from the About metadata.
  • External links (links), the title-and-URL pairs a creator lists in their About panel, so you capture their website, Discord, merch store, and social profiles.
  • Identity and branding fields: channel_id, channel_name, handle, canonical channel_url, full description, avatar_url, banner_url, and the is_family_safe flag.
  • Recent videos on demand when include_videos is on: one extra row per video with video_id, url, title, view_count, published_text, and duration_text.
  • No YouTube Data API quota and no key to manage.

Why scrape YouTube channel statistics

The official YouTube Data API can return channel statistics, but getting there is friction-heavy. You register a Google Cloud project, enable the API, generate credentials, and then work inside a 10,000-units-per-day quota. Once you fan out across thousands of channels plus their video lists, you hit the ceiling fast. For anything involving user-owned data you also get pulled into the OAuth consent flow, token refresh, and Google's verification review. That is a lot of plumbing for what is, at heart, public profile data anyone can read in a browser.

This Actor skips all of it. It reads the public channel header and About panel, the same information anyone sees on youtube.com. No API key, no OAuth, no quota accounting. You pass channel URLs, @handles, or UC… IDs and get back a clean profile row for each one, with both the parsed integer and the original localized string for every count so you can verify the value matches the page.

Input

FieldTypeDefaultDescription
channelsarrayrequiredYouTube channel URLs, @handles, or channel IDs (UC…). One per line.
include_videosbooleanfalseAlso emit the channel's recent videos as separate rows (type=video).
max_videosinteger30Recent videos to collect per channel (1–1000). Only used when include_videos is on.
countrystringUSTwo-letter country code (gl).
languagestringenTwo-letter interface language code (hl).

Output

Results are pushed to the Apify dataset as JSON records. Every channel produces one row with type set to channel. When include_videos is on, each of that channel's recent videos follows as its own row with type set to video.

A real channel row fetched on 2 October 2026:

{
"type": "channel",
"channel_id": "UCBJycsmduvYEL83R_U4JriQ",
"channel_name": "Marques Brownlee",
"channel_url": "http://www.youtube.com/@mkbhd",
"description": "MKBHD: Quality Tech Videos | YouTuber | Geek | Consumer Electronics | Tech Head | Internet Personality!\n\nbusiness@MKBHD.com\n\nNYC",
"keywords": "MKBHD MarquesBrownlee Marques Brownlee",
"is_family_safe": true,
"input": "@mkbhd",
"avatar_url": "https://yt3.googleusercontent.com/qu4TmIaYUlS41-dJ9gZ7DUR3nilvmB5_11i6OKSdvNnBNiyOusZP1bMN6ICnuxtjFBb6ioKgRQ=s900-c-k-c0x00ffffff-no-rj",
"handle": "@mkbhd",
"subscriber_count": 21300000,
"subscriber_count_text": "21.3M subscribers",
"video_count": 1855,
"banner_url": "https://yt3.googleusercontent.com/zi_48HwHU4s0Hnb6tZuvRzTfCPHrLEnrtIMDLzMauDEyDmURh9JZ4wrNd3lKr7m9uVnT4YjYKw=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
"total_view_count": 5726706783,
"total_view_count_text": "5,726,706,783 views",
"joined_date_text": "Joined Mar 21, 2008",
"joined_date": "Mar 21, 2008",
"country": "United States",
"links": [
{
"title": "Twitter",
"url": "twitter.com/MKBHD"
},
{
"title": "Instagram",
"url": "instagram.com/MKBHD"
},
{
"title": "The Studio",
"url": "youtube.com/c/TheStudio"
},
{
"title": "Reddit",
"url": "reddit.com/r/MKBHD"
},
{
"title": "Discord",
"url": "discord.gg/MKBHD"
}
],
"profile_url": "http://www.youtube.com/@mkbhd",
"profile_id": "UCBJycsmduvYEL83R_U4JriQ",
"name": "Marques Brownlee",
"bio": "MKBHD: Quality Tech Videos | YouTuber | Geek | Consumer Electronics | Tech Head | Internet Personality!\n\nbusiness@MKBHD.com\n\nNYC",
"followers": 21300000,
"link_urls": [
"https://twitter.com/MKBHD",
"https://instagram.com/MKBHD",
"https://youtube.com/c/TheStudio",
"https://reddit.com/r/MKBHD",
"https://discord.gg/MKBHD"
],
"_type": "profile",
"source": "youtube-channel-scraper",
"platform": "youtube",
"fetched_at": "2026-10-02T12:50:54.237Z",
"channel_rows": 1,
"video_rows": 0,
"fetched_in_seconds": 6.08
}

A real video row fetched on 2 October 2026 (only when include_videos is on):

{
"video_id": "e1q-TuHdc4Y",
"url": "https://www.youtube.com/watch?v=e1q-TuHdc4Y",
"title": "Dear YouTube!",
"description_snippet": "",
"channel_name": "Marques Brownlee",
"channel_id": "UCBJycsmduvYEL83R_U4JriQ",
"channel_url": "https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ",
"published_text": "1 day ago",
"view_count": 4500000,
"view_count_text": "4.5M views",
"duration_text": "12:23",
"thumbnail_url": "https://i.ytimg.com/vi/e1q-TuHdc4Y/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCnYqMyXN44UJE6gtLRMRZt75Hxww",
"is_live": false,
"type": "video",
"input": "@mkbhd",
"channel_handle": "@mkbhd",
"post_url": "https://www.youtube.com/watch?v=e1q-TuHdc4Y",
"post_id": "e1q-TuHdc4Y",
"author_id": "UCBJycsmduvYEL83R_U4JriQ",
"author_handle": "@mkbhd",
"text": "Dear YouTube!",
"views": 4500000,
"_type": "post",
"source": "youtube-channel-scraper",
"platform": "youtube",
"fetched_at": "2026-10-02T12:51:47.208Z",
"channel_rows": 0,
"video_rows": 1,
"fetched_in_seconds": 19.63
}

Download the dataset as JSON, JSONL, CSV, or Excel from the Apify console, stream it through the Apify API, or pipe it to webhooks, S3, BigQuery, or any of Apify's integrations.

Use cases

Influencer discovery and vetting. Feed a list of @handles and get subscriber counts, upload cadence signals (video count against join date), country, and the creator's own external links in one pass. Join date plus lifetime views tells you fast whether a channel is a steady long-term creator or a recently inflated account.

Competitor benchmarking. Track a set of rival channels on a schedule and diff each run against the last. Subscriber growth, view accumulation, and new-upload counts over time turn into a competitive scoreboard, no YouTube Studio login required.

Sponsorship and media-kit research. Before a deal, pull the hard numbers a creator would otherwise send in a media kit: subscribers, total views, upload volume, and country reach. Both the integer and the localized string come back for each count, so you can cross-check against the live page.

Creator databases and lead lists. Build or enrich a directory of channels in a niche. The external links field is the standout here, surfacing the website, store, and social handles creators publish on their About tab, giving you contact and cross-platform paths straight out of the profile.

How it compares

This Actorstreamers/youtube-channel-scraper
Primary outputFull channel profile (subscribers, lifetime views, video count, join date, country, external links)Channel-to-video list
Subscriber countYes (integer + text)Not the focus
Total lifetime viewsYesNo
Video count and join dateYesNo
External links from AboutYesNo
Recent videosOptional, billed only when enabledCore output, every row billed
API key or quotaNoneNone
Price$0.001 per channel row, $0.001 per video row, on every plan$0.0013 per video row on the free plan, lower on higher Apify plans

The other Actor is really a "channel to video list": its job is to turn a channel into its uploads, and it bills every video row. This Actor emits a richer channel profile first and only charges for video rows when you explicitly turn include_videos on. If you need channel statistics rather than every upload, you pay for one row per channel instead of dozens of video rows.

Pricing

Pay-per-event, so your bill scales linearly with usage and there's no monthly subscription.

  • $0.001 per channel row (type=channel)
  • $0.001 per video row (type=video), charged only when include_videos is on
  • $0.002 actor-start fee per GB of memory, with a minimum of one event

Scraping 1,000 channels with videos off costs $1.00 plus the $0.002 start fee. Turn videos on and each returned video adds another $0.001.

Limits and gotchas

  • Two row types share one dataset. Channel rows carry the profile fields; video rows carry video_id, url, title, view_count, published_text, and duration_text. Filter on the type field to separate them.
  • Video rows appear only when include_videos is on. With the default off, you get exactly one row per channel and pay only channel-row prices.
  • max_videos is capped at 1,000 and is ignored entirely when include_videos is off.
  • Two billing events. A run charges the $0.002 start fee once, then $0.001 per channel row and $0.001 per video row. Budget both.
  • Free-tier runs are capped at 10 results per run. Upgrade to a paid Apify plan to lift the cap; paying users are never limited.
  • Counts come back as both integer and text. subscriber_count and total_view_count are parsed integers; the _text variants preserve YouTube's localized display string so you can verify against the page.
  • Country and language shape the output. country (gl) and language (hl) affect localized strings and the join-date wording. Set them to match the market you're reporting on.

FAQ

How do I get a YouTube channel's subscriber count?

Pass the channel's URL, @handle, or UC… ID in channels and read subscriber_count (an integer like 21300000) plus subscriber_count_text (the localized "21.3M subscribers" string) on the returned channel row. No API key needed.

Can I scrape a channel's total view count?

Yes. Every channel row includes total_view_count as an integer and total_view_count_text as the localized string. This is the lifetime aggregate view figure from the About panel, not a per-video number.

How do I find when a YouTube channel was created?

The joined_date field gives the creation date, and joined_date_text preserves the raw "Joined …" string. Combined with video_count, it's a quick way to gauge how established and active a channel is.

Yes. The links field returns the title-and-URL pairs from the About panel, so you capture the creator's website, merch store, Discord, and social profiles in one shot. That makes it the go-to field for outreach and creator-database lead lists.

Do I need to enable the videos option to get channel stats?

No. Channel statistics come back on the channel row whether or not include_videos is on. Turn videos on only when you also want the channel's recent uploads as separate rows, which adds $0.001 per video.

Is this a YouTube scraper for videos or for channels?

For channels. The core output is one statistics row per channel. Recent uploads are an optional extra with basic video fields; for full video, search or comment data use a dedicated YouTube video scraper such as the related Actors below.

Can I track YouTube channel statistics over time?

Yes. Schedule the Actor in Apify with the same channel list (daily or weekly) and compare subscriber_count, total_view_count and video_count between runs. Each row carries fetched_at, so every dataset is a dated snapshot.

The original channel and video fields remain available. Additional profile and post fields let you join the results across datasets. Unavailable channels produce no row and are recorded in the run errors. A free-plan run delivers at most ten rows in total, counting channels and videos together, and charges only for those delivered rows.