ViewStats Scraper - YouTube Channel Analytics & Growth Data avatar

ViewStats Scraper - YouTube Channel Analytics & Growth Data

Pricing

from $1.00 / 1,000 channel results

Go to Apify Store
ViewStats Scraper - YouTube Channel Analytics & Growth Data

ViewStats Scraper - YouTube Channel Analytics & Growth Data

Scrape YouTube channel analytics from ViewStats. Look up channels by handle, URL, or keyword search. Returns subscribers, views, rankings, growth from weekly to all-time, revenue estimates, historical time series, longs vs shorts, featured video, and similar channels.

Pricing

from $1.00 / 1,000 channel results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

26

Total users

8

Monthly active users

7 days ago

Last modified

Share

ViewStats Scraper: YouTube Channel Analytics, Growth & Revenue Estimates

ViewStats Scraper turns ViewStats into a clean YouTube channel analytics API. Get subscriber and view counts, global, country and category rankings, week to all time growth with revenue estimates, daily and monthly averages, upload frequency, longs vs shorts splits, the featured video, similar channels, and a full historical time series for any channel. Search by keyword or paste a list of handles or URLs, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.

Why This Scraper?

  • Two ways to find channels. Paste a list of handles or URLs, or search by keyword and let the actor resolve the matching channels for you.
  • A full analytics profile per channel. Subscriber and view counts, global, country and category rankings, week to all time growth with revenue estimates, daily and monthly averages, and upload frequency.
  • Historical time series. Daily or monthly data points over a 28 day, 90 day, 365 day or all time window, covering subscribers, views, revenue estimates and upload events.
  • Content and format context. The longs vs shorts split and the current featured video, so you can see what format is working for a channel right now.
  • Similar channels on demand. Pull related channels with their own subscriber, view and video counts plus a similarity score.
  • One flat surcharge, not three. Profile details, similar channels and the time series are independent toggles, but turning on more than one adds only a single detail enrichment charge per channel, never a multiple.
  • Built for schedules. Incremental mode returns only new, changed and reappeared channels on recurring runs, and Resume continues one interrupted pull without paying twice.

Use Cases

  • Creator and MCN research: benchmark subscriber growth, revenue ranges and upload cadence across a list of competitor channels.
  • Sponsorship and influencer marketing: check a channel's real reach, country ranking and audience size before pitching or paying for a placement.
  • Market and niche discovery: search a keyword to resolve a fresh list of active channels in that niche, then rank them by subscribers or views.
  • Growth tracking and reporting: schedule the actor daily or weekly and get a feed of only the channels that changed.
  • Content and competitive analysis: pull each channel's featured video and longs vs shorts split to see what format is working for them right now.

Data You Get

Sample shape: values are illustrative placeholders, not from a live channel.

FieldExample
channelId"UC00000000000000000000"
handle"samplecreator"
displayName"Sample Creator"
url"https://www.viewstats.com/@samplecreator/channelytics"
youtubeUrl"https://www.youtube.com/@samplecreator"
verifiedtrue
country"US"
subscriberCount / viewCount / videoCount1000000 / 500000000 / 250
totalFollowing12
globalSubscribersRanking / globalViewsRanking1500 / 1800
countrySubscriberRanking / categorySubscriberRanking300 / 120
vpv902500000
avatarUrl / bannerUrlchannel avatar and banner image URLs
description / dateCreated / viewstatsRankingprofile detail fields (when Include profile details is on)
growthperiod growth object: week, month, quarter, year and all time, with revenue estimates (when enabled)
estimatedRevenueLowUsdMonthly / estimatedRevenueHighUsdMonthly10000 / 30000 (when enabled)
averages / uploadFrequencyPerMonthdaily, weekly and monthly averages object, and 8 (when enabled)
longsAndShortslongs vs shorts split object (when enabled)
featuredVideofeatured video object: title, views, likes, duration (when enabled)
similarChannelsarray of related channels with their own counts and a similarity score (when enabled)
statsTimeSeriesarray of dated data points: subscribers, views, revenue estimates, upload events (when enabled)
scrapedAt"2026-01-01T00:00:00.000Z"
changeType / changedFields / firstSeenAt / lastSeenAt"UPDATED" / ["subscriberCount"] / timestamps, incremental mode only

Every record also carries two auxiliary counters not shown above, recentTests and totalTests (the channel's recent and lifetime thumbnail/title test counts as reported by ViewStats). They come from the core channel lookup, so they appear whatever the detail toggles are set to, and can be null.

How to Use

  1. Pick a mode: channels (paste handles or URLs) or search (resolve channels from keywords).
  2. Fill in the channels or search terms for that mode, and switch on the detail toggles you need: profile details, similar channels, or the time series.
  3. Set Max channels to output to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

One channel, everything on:

{
"mode": "channels",
"channels": ["@MrBeast"],
"includeProfileDetails": true,
"includeSimilarChannels": true,
"includeStatsTimeSeries": true,
"statsRange": "365",
"statsGroupBy": "daily"
}

Several channels by handle and URL, core fields only (cheapest):

{
"mode": "channels",
"channels": ["@MrBeast", "https://www.youtube.com/@mkbhd", "tseries"],
"includeProfileDetails": false,
"maxItems": 3
}

Keyword search, resolve the top matches:

{
"mode": "search",
"searchTerms": ["tech reviews", "mrbeast"],
"maxChannelsPerSearch": 10
}

Daily monitoring of the same channel list, only what changed:

{
"mode": "channels",
"channels": ["@MrBeast", "@mkbhd"],
"includeProfileDetails": true,
"incrementalMode": true
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/viewstats-channel-analytics").call(run_input={"mode": "channels", "channels": ["@MrBeast"]})
for channel in client.dataset(run["defaultDatasetId"]).iterate_items():
print(channel["displayName"], channel["subscriberCount"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/viewstats-channel-analytics').call({ mode: 'channels', channels: ['@MrBeast'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

How the detail-enrichment surcharge works

Profile details, similar channels and the time series each fetch their own extra endpoints, but they share one charge: any channel that has at least one of the three toggles on is billed exactly one flat detail-enrichment surcharge, whether one toggle is on or all three are. A channel suppressed by incremental mode (see below) is never charged for enrichment either, even though its detail endpoints still had to be fetched to classify it.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips every channel it already collected there, so you don't pay twice. The skip happens before the Max channels cap is applied, so resume frees the budget for genuinely new work.
  • Incremental mode (incrementalMode) is for scheduled runs over the same channel list or search. State is kept per scope (mode, channel list or search terms, the three detail toggles, and the time series range and granularity), never keyed on maxItems or maxChannelsPerSearch, so tuning the output size alone never resets tracking. Each channel is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED, or EXPIRED (only after a run that scanned the whole tracked scope, and only with emitExpired on). A field flipping to or from missing or null, or any change inside similarChannels (the whole list is excluded from change detection), or a featured video's view, like and comment counters ticking, never counts as a change by itself; only a genuine value to value change elsewhere, or the featured video itself changing (a different video, or an edit to its title or description), does. stateKey names or shares the stored state; leave it empty to let the actor derive one automatically.
  • Turning on incremental mode together with resumeFromRunId, when no incremental baseline exists yet for that scope, bootstraps the new baseline from the resume dataset, so those channels are not reported as NEW again. On the next scheduled run they come back once as UPDATED while their full snapshot is recorded, and after that only real changes are returned.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringchannelsPick how to find channels: channels for a list of handles or URLs, search for keywords.
channelsarraynone (prefill: ["@MrBeast"])Channels mode. One per line: a @handle, a bare handle, a ViewStats URL, or a YouTube URL (/@handle or /channel/UC...).
searchTermsarraynone (prefill: ["mrbeast"])Search mode. Keywords to resolve into channels.
maxChannelsPerSearchinteger10Search mode. Max channels resolved per keyword.
includeProfileDetailsbooleantrueAdds description, creation date, rankings, period growth with revenue estimates, averages, upload frequency, longs vs shorts, and the featured video.
includeSimilarChannelsbooleanfalseAdds related channels with counts and a similarity score.
includeStatsTimeSeriesbooleanfalseAdds the historical data point series.
statsRangestring365Time series window: 28, 90, 365, or alltime. Used only when the time series is on.
statsGroupBystringmonthlyTime series granularity: daily or monthly. Used only when the time series is on.
maxItemsinteger50Hard cap on the number of channel records written. 0 means unlimited.
proxyobject{ "useApifyProxy": true }Connection settings.
residentialCountriesarray["US", "GB", "DE", "CA", "FR"]Countries rotated through when residential proxy is used as a fallback.
maxResidentialRequestsinteger200Cap on residential requests per run, to control cost. 0 disables residential entirely.
backupProxyUrlstringnoneOptional last-resort connection gateway URL, used when Apify proxy is unavailable or after the other connection tiers keep failing. Leave blank to use the built-in default.
resumeFromRunIdstringnonePaste a previous run ID or dataset ID to continue a large channel or search crawl without re-fetching (or re-charging for) channels already collected there.
incrementalModebooleanfalseTurn on for daily or recurring monitoring of the same channels or search. Later runs return only NEW, UPDATED, and REAPPEARED channels.
stateKeystringnoneOptional. Names an incremental-mode monitoring campaign, or leave empty to derive one automatically from the channel list or search and the detail toggles.
emitUnchangedbooleanfalseIncremental mode only. Also return (and bill for) channels with no change since the last run, marked UNCHANGED.
emitExpiredbooleanfalseIncremental mode only. Also return (and bill for) channels that disappeared since the last run, marked EXPIRED. Only produced after a complete, uncapped, non-resumed scan.
mcpConnectorsarraynoneOptional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstringnoneNotion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live channel.

{
"channelId": "UC00000000000000000000",
"handle": "samplecreator",
"displayName": "Sample Creator",
"url": "https://www.viewstats.com/@samplecreator/channelytics",
"youtubeUrl": "https://www.youtube.com/@samplecreator",
"verified": true,
"country": "US",
"subscriberCount": 1000000,
"viewCount": 500000000,
"videoCount": 250,
"totalFollowing": 12,
"globalSubscribersRanking": 1500,
"globalViewsRanking": 1800,
"countrySubscriberRanking": 300,
"categorySubscriberRanking": 120,
"viewstatsRanking": 2000,
"vpv90": 2500000,
"recentTests": 3,
"totalTests": 40,
"avatarUrl": "https://yt3.ggpht.com/0000000000000000=s800-c-k-c0x00ffffff-no-rj",
"bannerUrl": "https://yt3.googleusercontent.com/00000000000000000000",
"description": "Sample channel description text appears here.",
"dateCreated": "2015-01-01T00:00:00.000Z",
"estimatedRevenueLowUsdMonthly": 10000,
"estimatedRevenueHighUsdMonthly": 30000,
"uploadFrequencyPerMonth": 8,
"growth": {
"weekly": { "views": 20000000, "subscribers": 50000, "estimatedRevenueLowUsd": 2000, "estimatedRevenueHighUsd": 6000 },
"monthly": { "views": 90000000, "subscribers": 200000, "estimatedRevenueLowUsd": 10000, "estimatedRevenueHighUsd": 30000 }
},
"averages": {
"daily": { "viewsAverage": 3000000, "subsAverage": 7000, "estimatedRevenueLowUsd": 1000, "estimatedRevenueHighUsd": 3000 }
},
"similarChannels": [
{ "channel": { "handle": "anothercreator", "displayName": "Another Creator" }, "subscriberCount": 900000, "viewCount": 400000000, "videoCount": 200, "similarity": 0.82 }
],
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Plan Requirement

The default proxy setting works out of the box on the plan you already have. Residential proxy is supported as an optional fallback for extra resilience, and it is bounded by the residential request budget so you stay in control of cost. For the lowest cost, keep Include profile details off when you only need the core counts, and turn on the time series only when you need history.

FAQ

How much does it cost?

You pay per channel record returned, plus one flat detail-enrichment surcharge per channel when any of the three detail toggles (profile details, similar channels, time series) is on. Turning on more than one of those toggles does not multiply the surcharge. The Pricing tab shows the current rates. Use Max channels to output to cap the cost of any run.

This actor collects only publicly available channel analytics that ViewStats itself computes from YouTube's public data. You are responsible for how you use it: follow ViewStats' and YouTube's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution.

Can I get only new or changed channels on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared channels, and unchanged ones are not billed unless you also turn on Emit unchanged.

What's the difference between Resume and Incremental mode?

Resume continues one specific interrupted run: paste its run or dataset ID and this run skips every channel it already collected there. Incremental mode is for scheduling this same channel list or search again and again; the actor keeps its own baseline and classifies every channel as NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED. Combining both, with no existing incremental baseline yet, bootstraps the monitoring baseline from the resume dataset instead of collecting everything from scratch.

Why did my run fail instead of returning an empty dataset?

A run stops with a clear message, rather than quietly returning nothing, if the resumeFromRunId you provided cannot be read, or if incremental mode already has saved state for this scope while resumeFromRunId is also set (remove one of the two, or set a different State key, to bootstrap a separate campaign). If the data source cannot be reached for a channel, that channel is skipped with a warning, so check the run log if the dataset is smaller than expected. An individual channel reference the actor cannot recognize is skipped the same way instead of failing the whole run.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of each channel into Notion, Linear or Airtable.

🔗 Want more social media data?

Pair this actor with these related scrapers from the same team:

📱 TikTok Profile, Hashtag, Search, Video & Trending Scraper
Scrape TikTok without login. Extract profiles, bios, follower stats and videos; search by...
🎬 Twitch ALL IN ONE URL
From $1/1K. Scrape Twitch data at scale, including channels, live streams, clips, VODs...
🎬 YouTube Transcript & Subtitle Scraper
Extract transcripts and subtitles from YouTube videos in bulk using video, playlist...
📱 Universal Media Extractor
Extract videos, audio, and metadata from 1000+ websites including YouTube, TikTok...
📱 Tiktok Live Recorder
Record TikTok live streams to MP4 with full metadata, all stream quality URLs, and...
🤖 Suno Scraper
Collect public Suno music data: songs with lyrics, style tags, model version, play and...

👉 Browse all abotapi scrapers

💬 Support & custom scrapers

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.