YouTube Channel Scraper: Subscribers, About, Videos, $0.8/1K avatar

YouTube Channel Scraper: Subscribers, About, Videos, $0.8/1K

Pricing

from $0.20 / 1,000 result rows

Go to Apify Store
YouTube Channel Scraper: Subscribers, About, Videos, $0.8/1K

YouTube Channel Scraper: Subscribers, About, Videos, $0.8/1K

Scrape YouTube channels: subscribers, total views, video count, country, joined date, links, avatar and banner, plus newest, popular or oldest videos, Shorts and streams. Accepts @handles, channel or video URLs. No login, no API key. $0.80 per 1,000 rows.

Pricing

from $0.20 / 1,000 result rows

Rating

0.0

(0)

Developer

Detroit Web Agent - Open Data

Detroit Web Agent - Open Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

YouTube Channel Scraper: Subscribers, About Info, Links and Videos

YouTube Channel Scraper: features, price and a real output row

Run it free on Apify

Price per 1,000 result rowsFree planStarterScaleBusiness
This Actor$0.80$0.60$0.50$0.20
Most-used alternative$1.30$1.00$0.80$0.50

YouTube Channel Scraper sample output table from a real run

Scrape YouTube channel profiles and their videos. For every channel you get the subscriber count, total views, video count, country, joined date, description, external links (Instagram, X/Twitter, website and others), avatar, banner and verified badge. Add the newest, most popular or oldest videos, Shorts and live streams, each with views, duration and date. Works with @handles, channel URLs, /c/ and /user/ URLs, or any video URL. No login, no API key.

  • In short: YouTube Channel Scraper (Apify actor transparent_meteorite/youtube-channel-scraper) reads public YouTube channel pages: the header, the About panel and the Videos, Shorts and Live tabs. Each run returns one profile row per channel, plus one row per video. Every video row also carries the channel fields.
  • Who it is for:
    • influencer marketing and creator outreach teams
    • agencies benchmarking competitors' channels
    • lead generation from creators' external links
    • analysts tracking subscriber growth on a schedule
    • AI agents that need YouTube channel data as a tool
  • Input:
    • channels: @handle, channel URL or UC id, or a video URL to get its uploader's channel
    • separate limits for videos, Shorts and streams
    • sort: newest, popular or oldest
    • "only newer than" date
    • About panel on or off
    • full video details on or off
    • monitor mode
  • Output:
    • channel profile: channelId, channelName, channelHandle, channelUrl, numberOfSubscribers, channelTotalViews, channelTotalVideos, channelCountry, channelJoinedDate, channelDescription, channelLinks, channelAvatarUrl, channelBannerUrl, channelVerified, channelKeywords, rssUrl
    • video rows: id, url, title, type, viewCount, date, duration, thumbnail
    • likes, commentsCount and tags when full video details are on
  • Pricing: pay per event. $0.80 per 1,000 rows on the Free plan, down to $0.20 per 1,000 on Gold and above, plus a $0.00005 start event.
  • Limits: public data only. YouTube rounds subscriber counts (for example 4.55M). Business emails are behind a captcha on YouTube and are not collected.

Key facts

  • Data source: public YouTube channel pages
  • Output formats: JSON, CSV, Excel, XML, HTML table (Apify dataset)
  • Access: Apify Console, REST API, JavaScript/Python clients, schedules, webhooks, Apify MCP server
  • Login, cookies or YouTube API key needed: no
  • Also known as: YouTube channel data scraper, YouTube subscriber count API, YouTube channel info extractor, YouTube about page scraper

Run in 30 seconds

  1. Open YouTube Channel Scraper and press Try for free.
  2. Keep the prefilled channel or paste your own (@handle or URL), then press Start. One channel with 10 videos takes about 3 seconds.
  3. Open the Output tab, or download the results as CSV, Excel or JSON.
{
"startUrls": [{ "url": "https://www.youtube.com/@MrBeast" }],
"maxResults": 10
}

Input

FieldTypeDefaultDescription
startUrlsarray@MrBeast (prefill)Channel URLs (/@handle, /channel/UC..., /c/..., /user/...), bare @handles or UC ids. A video URL scrapes its uploader's channel
maxResultsinteger10Videos per channel from the Videos tab. Use 0 for profile rows only
maxResultsShortsinteger0Shorts per channel
maxResultStreamsinteger0Items per channel from the Live tab
sortVideosBystringNEWESTNEWEST, POPULAR or OLDEST (the chips on the channel page)
oldestPostDatestringSkip videos older than a date (2025-01-31) or a period (30 days)
includeAboutbooleantrueAdd country, joined date, total views, video count and links
includeChannelRowbooleantrueOutput one profile row per channel
scrapeVideoDetailsbooleanfalseOpen each video for likes, comment count, exact date, description and tags
monitorModebooleanfalseOnly return and charge for videos that earlier runs did not deliver
proxyConfiguration / autoProxyFallbackoff / trueOptional proxy. The run switches to residential proxy only if YouTube blocks it

Output

The channel profile row (shortened):

{
"type": "channel",
"channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"channelName": "MrBeast",
"channelHandle": "@MrBeast",
"channelUrl": "https://www.youtube.com/@MrBeast",
"numberOfSubscribers": 521000000,
"channelTotalViews": 142646308668,
"channelTotalVideos": 1006,
"channelCountry": "United States",
"channelJoinedDate": "Feb 19, 2012",
"channelVerified": true,
"channelLinks": [
{ "title": "Follow", "url": "https://www.instagram.com/mrbeast/" },
{ "title": "Twitter", "url": "https://twitter.com/MrBeast" }
],
"channelAvatarUrl": "https://yt3.googleusercontent.com/...",
"channelBannerUrl": "https://yt3.googleusercontent.com/...",
"rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCX6OQ3DkcsbYNE6H8uQQuVA"
}

A video row has type (video, shorts or stream), id, url, title, viewCount, date, dateIsApproximate, publishedTimeText, duration, durationSeconds, thumbnailUrl, tab, position and all of the channel fields above. With scrapeVideoDetails on, it also has likes, commentsCount, description, tags, hashtags and category.

FieldDescription
numberOfSubscribers, subscriberCountTextSubscriber count as a number and as YouTube shows it
channelTotalViews, channelTotalVideosFrom the About panel
channelCountry, channelJoinedDateFrom the About panel (country only if the creator set one)
channelLinksExternal links with their titles, with YouTube's redirect wrapper removed
date, dateIsApproximateVideo date. On channel tabs YouTube only shows "3 days ago", so the date is approximate unless full details are on

Pricing

Apify planThis actor, per 1,000 rowsMost-used YouTube channel scraper on the Store, per 1,000
Free$0.80$1.30
Bronze$0.60$1.00
Silver$0.50$0.80
Gold$0.20$0.50
Platinum$0.20$0.30
Diamond$0.20$0.20

The run stops at the maximum cost you set on the run.

Use it from code, schedules or AI agents

  • API: POST https://api.apify.com/v2/acts/transparent_meteorite~youtube-channel-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN with the input JSON as the body.
  • Subscriber tracking: schedule a daily run with maxResults: 0 and store the profile rows to chart growth.
  • MCP / AI agents: add https://mcp.apify.com?actors=transparent_meteorite/youtube-channel-scraper to Claude, Cursor or any MCP client.

Who uses it and why

  • Influencer marketing teams build a shortlist of creators in a niche and compare subscriber counts, total views, video counts, country and join date in one table. The external links on each profile (Instagram, X, websites) give a starting point for outreach through the channels the creator chose to publish.
  • Agencies and brand analysts audit a client's channel against three or four competitors: how often each posts, which videos get the most views, and how Shorts compare with long videos.
  • Growth and reporting teams schedule a daily run with maxResults set to 0 and store the profile rows, which builds a subscriber and total-views history that YouTube itself does not export.
  • Investors, journalists and researchers check a channel's size, age and verified status, or list everything a channel has published in a period.
  • Dataset builders and AI agents use channel IDs from this actor as the input for the video, comments and transcript actors in the same family.

How the input fields work together

Give one or more channels in startUrls. The actor accepts https://www.youtube.com/@handle, /channel/UC..., /c/name and /user/name URLs, a bare @handle or a bare UC... channel ID. If you paste a video URL, the actor scrapes the channel that uploaded that video.

Three limits decide how many rows you get per channel: maxResults for the Videos tab (default 10, up to 10,000, and 0 for no video rows), maxResultsShorts for the Shorts tab and maxResultStreams for the Live tab. Shorts and streams default to 0, so they are skipped until you set a number. sortVideosBy picks newest, popular or oldest, matching the chips on the channel page.

oldestPostDate drops videos older than a calendar date such as 2025-01-31 or a relative period such as 30 days, 2 weeks, 3 months or 1 year. It works best with newest-first order, because the list can then stop early. Videos skipped by the date are not delivered and not charged.

includeAbout adds the About panel data (country, joined date, total views, video count and links) at the cost of one extra request per channel. includeChannelRow controls whether a separate profile row is written for each channel, in addition to the video rows. Every video row also carries the channel fields, so you can turn the profile row off if you only want videos in one flat table.

scrapeVideoDetails opens every video page to add likes, comment count, exact publish time, description, tags and category. It is slower, so leave it off for quick listings. maxConcurrency (1 to 20, default 5) applies only when details are on. monitorMode remembers delivered videos in a named store (stateStoreName) and returns only new ones. The channel profile row is sent once per day in that mode.

Worked examples

Creator profile only: one row per channel for a shortlist

{
"startUrls": [
{ "url": "https://www.youtube.com/@freecodecamp" },
{ "url": "https://www.youtube.com/@MrBeast" }
],
"maxResults": 0,
"includeAbout": true
}

Competitor content audit: most popular videos and Shorts with full details

{
"startUrls": [{ "url": "https://www.youtube.com/@freecodecamp" }],
"maxResults": 10,
"maxResultsShorts": 5,
"sortVideosBy": "POPULAR",
"scrapeVideoDetails": true
}

Recent uploads only, for a weekly report

{
"startUrls": [{ "url": "https://www.youtube.com/@freecodecamp" }],
"maxResults": 50,
"sortVideosBy": "NEWEST",
"oldestPostDate": "7 days",
"monitorMode": true,
"stateStoreName": "weekly-report"
}

Sample video row

A video row with details on looks like this. Field names are the ones the actor writes; values are shortened.

{
"type": "video",
"id": "XVv6mJpFOb0",
"url": "https://www.youtube.com/watch?v=XVv6mJpFOb0",
"title": "Web Scraping with Python - Beautiful Soup Crash Course",
"viewCount": 1826157,
"date": "2020-11-18T08:05:43-08:00",
"dateIsApproximate": false,
"duration": "1:08:23",
"durationSeconds": 4103,
"tab": "videos",
"position": 1,
"likes": 39427,
"commentsCount": 1100,
"channelName": "freeCodeCamp.org",
"channelHandle": "@freecodecamp"
}

Choosing between rows and columns

Because every video row repeats the channel fields, you can load the dataset into a spreadsheet and pivot by channelName without joining a second table. Use the type column to separate profile rows (channel) from video rows (video, shorts or stream). Use tab to see which channel tab a row came from. When you track growth over time, keep the channelId as the key, because handles can change while the ID stays the same.

Tips to keep runs fast and cheap

  • For subscriber tracking, use maxResults: 0 and keep includeAbout on. Each channel then costs one row.
  • Keep scrapeVideoDetails off when views, titles, duration and relative dates are enough. Turn it on only when you need likes, comments, exact dates or descriptions.
  • Add oldestPostDate to every scheduled run so it does not walk deep into old uploads.
  • Set a maximum cost on the run in Apify. The actor stops cleanly when it is reached.
  • Avoid a proxy unless you scrape hundreds of channels in one run. The automatic fallback handles blocking when it appears.

Limits and honest caveats

  • Only public data is returned. The actor does not log in and does not collect business emails, which YouTube places behind a captcha.
  • channelCountry is empty when the creator has not set one. Subscriber counts follow YouTube's own rounding, so large channels show a rounded figure rather than an exact one.
  • On channel tabs YouTube shows only relative dates such as "3 days ago". Those rows have dateIsApproximate set to true unless scrapeVideoDetails is on.
  • Total views and video counts come from the About panel and can lag behind the live numbers shown on the channel page.
  • Channels with no public uploads in a tab simply return no rows for that tab.
  • Some links in the About panel are wrapped by YouTube in a redirect. The actor removes the wrapper, but the target site is not checked.

More questions

How do I get a YouTube channel's subscriber count without the API? Run the actor on the channel URL with maxResults set to 0 and read numberOfSubscribers on the channel row.

Can I scrape many channels at once? Yes. Add several URLs or handles to startUrls. Each channel gets its own limits.

What is the difference between this and the video scraper? This actor starts from channels and adds profile data such as total views, country and links. The video scraper starts from searches, playlists, hashtags and URLs, and offers YouTube's search filters.

Can I find a channel's RSS feed? Yes. The profile row has an rssUrl field that points to the channel's public video feed.

Can I call it from Python?

from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("transparent_meteorite/youtube-channel-scraper").call(
run_input={
"startUrls": [{"url": "https://www.youtube.com/@freecodecamp"}],
"maxResults": 0,
}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["channelName"], row["numberOfSubscribers"])

FAQ

Do I need the YouTube Data API? No. There is no API key and no quota.

Can I get the channel's email? No. YouTube hides business emails behind a captcha and a login, and this actor does not bypass them. External links are included.

How many videos can I get per channel? The full Videos, Shorts and Live tabs. Use maxResults to set how many.

Is it legal? The actor collects public information only. You are responsible for using the data in line with YouTube's terms and privacy laws such as GDPR.

Something missing? Open an issue on the Issues tab with the run URL.

More resources

New to Apify? Create a free account and run this Actor in under a minute. Some links are affiliate links.