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

30

Total users

4

Monthly active users

9 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 / id"UC00000000000000000000" (id is an alias with the same value)
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)
stats7 / eventslast 7 daily data points with revenue estimates, and flattened upload events (id, date, type, viewCount, title) (when time-series is enabled)
shortVideos / longVideosrecent shorts and long-form videos (id, title, views, likes, comments, duration, outlierScore, averageViews, uploadDate) (when profile details are 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. If you leave Channels empty in channels mode, the actor scrapes its default list (a change from earlier versions, where an empty field returned nothing useful; set your own channels to avoid it): four ViewStats channels, one per accepted URL shape: channel page (https://www.viewstats.com/@MrBeast), analytics page (https://www.viewstats.com/@mkbhd/channelytics), non-www host (https://viewstats.com/@PewDiePie) and videos tab (https://www.viewstats.com/@veritasium/videos), each a different channel and one result. Handles (@MrBeast, MrBeast) and YouTube channel URLs work too. Then 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 the live view, like and comment counters (and outlier score and average views) of the featured video, the recent short and long videos and the upload events (including the upload events nested inside stats7 and statsTimeSeries) ticking, never counts as a change by itself; only a genuine value to value change elsewhere, or the videos themselves changing (a new, removed or different video, or an edit to a title or description), does. ignoreFieldsForChanges lists extra top-level fields to leave out of change detection (they are still returned); it applies to the stored baseline too, so editing it causes no one-time wave of UPDATED rows. 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.
channelsarraythe 4 sample URLs (prefill: the same 4)Channels mode. One per line: a @handle, a bare handle, a ViewStats URL, or a YouTube URL (/@handle or /channel/UC...).
startUrlsarraythe 4 sample URLs (same as channels)Alias of channels (same accepted shapes), merged with it. An untouched sample list in either field is dropped when the other holds your own entries. Sending only searchTerms (with the untouched samples) runs search mode on your terms.
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, the featured video, and the recent short and long videos (shortVideos, longVideos).
includeSimilarChannelsbooleanfalseAdds related channels with counts and a similarity score.
includeStatsTimeSeriesbooleanfalseAdds the historical data point series (subscribers, views, videos and revenue estimates per point, plus upload events), the 7-day daily window (stats7) and the flattened upload events list (events).
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 only as an escalation when the Apify connections are unavailable (for example on a plan without proxy access) or keep failing. Not used when you supply your own proxy URLs. 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.
ignoreFieldsForChangesarraynone (prefill: [])Incremental mode only. Top-level field names (for example subscriberCount) that never count as a change and are left out of changedFields; they are still returned in every row. On top of this, the live counters of the featured video, the recent short and long videos and the upload events (including those nested inside stats7 and statsTimeSeries) never count as a change.
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

No residential proxy and no paid proxy add-on is required. In testing, ViewStats channel pages loaded the same real content through both the standard (datacenter) Apify connection and residential connections, and no blocking was observed, so the default connection is used first. Residential proxy is an automatic, bounded fallback (maxResidentialRequests, default 200), and a backup connection is the last resort. A page that does not exist is answered by the site with a normal "Page Not Found" page, which the actor treats as an unrecognized channel, not as a connection problem. 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.

On an Apify plan without proxy access, the run log shows this notice and continues on the backup connection when it can:

The selected connection is unavailable to this run. Apify free plans do not include residential proxies. Continuing on a backup connection; some pages may still be unavailable. For residential access, upgrade at https://apify.com/pricing or supply your own proxy URLs.

When pages are then served over the backup connection, the log says "Served over the backup connection (the default connection was unavailable)."

Requests start on the standard Apify connection, then escalate to residential (within maxResidentialRequests), then to the backup connection.

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 that could not load a single page ends as FAILED with one of three messages, rather than quietly returning nothing:

  • "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required: https://apify.com/pricing. If you entered your own proxy URLs, check that their credentials are valid."
  • "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested ViewStats pages. Upgrade at https://apify.com/pricing or supply your own proxy URLs, then try again."
  • "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later."

A run also stops with a clear message 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 an individual channel, that channel is skipped with a warning, so check the run log if the dataset is smaller than expected. A channel reference the actor cannot recognize is skipped the same way.

Which output views are there?

The dataset has three views: Channel overview (core counts and rankings), Channel detail (growth, averages, rankings and the detail fields) and Changes (incremental mode: changeType, changedFields, first and last seen).

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:

📱 Universal Media Extractor
Extract videos, audio, and metadata from 1000+ websites including YouTube, TikTok...
📱 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...
🧩 Dzen.ru Scraper
Scrape Dzen.ru (ex Yandex.Zen): articles, videos and channels. Full article text with...
🎬 YouTube Transcript & Subtitle Scraper
Extract transcripts and subtitles from YouTube videos in bulk using video, playlist...
📱 Tiktok Live Recorder
Record TikTok live streams to MP4 with full metadata, all stream quality URLs, and...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 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 contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.