ViewStats Scraper at a glance
ViewStats Scraper is a ready-to-run Apify actor from abotapi for collecting social media data. Its documented output includes channel, handle, channel id, change type (incremental mode) and url, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.70 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Social Media, Videos, Developer Tools
- Pricing
- $1.70 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 20 options
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.
What ViewStats Scraper can do
- 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.
Choose what to collect
These inputs let you configure ViewStats Scraper - YouTube Channel Analytics & Growth Data. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Pick how to find channels. 'channels' takes a list of @handles or channel URLs. 'search' takes keywords and resolves matching channels. |
channelsarray | Channels mode only. One per line: a @handle (e.g. @MrBeast), a bare handle (MrBeast), a ViewStats URL (https://www.viewstats.com/@MrBeast), or a YouTube URL (https://youtube.com/@MrBeast or https://youtube.com/channel/UC...). |
startUrlsarray | Channels mode only. Alias of 'Channels': accepts the same @handles, bare handles, ViewStats URLs and YouTube URLs. Entries are merged with 'Channels' and de-duplicated. |
searchTermsarray | Search mode only. Keywords to look up. Each term resolves up to 'Max channels per search term' matching channels. |
maxChannelsPerSearchinteger | Search mode only. Cap on how many channels each keyword resolves. |
includeProfileDetailsboolean | Adds description, account creation date, channel-wide rankings, period growth (week/month/quarter/year/all-time) with revenue estimates, daily/weekly/monthly averages, upload frequency, longs-vs-shorts split, the featured video, and the recent short and long videos (shortVideos, longVideos). Costs a few extra requests per channel (including one for the recent videos). |
includeSimilarChannelsboolean | Adds the list of similar/related channels with their subscriber, view and video counts plus a similarity score. One extra request per channel. |
Show 13 more inputs
| Input | What it controls |
|---|---|
includeStatsTimeSeriesboolean | Adds the historical stats series (subscribers, views, videos, revenue estimates per data point, plus upload events), a 7-day daily window (stats7) and a flattened upload events list (events). Two extra requests per channel. |
statsRangestring | Window for the time-series (only used when the time-series is enabled). |
statsGroupBystring | Bucket size for the time-series (only used when the time-series is enabled). |
maxItemsinteger | Hard cap on the number of channel records written. 0 means unlimited. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large channel/search crawl without returning or charging for channels already collected there. Use this after an interrupted run, or when continuing a large channel list pull in another run. For recurring daily monitoring of the same channels/search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching channels as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED channels. Turn on "Emit unchanged" or "Emit expired" only when you also want those channels returned (and billed). State is kept separately for each channel list/search and detail-toggle setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the channel list/search and detail settings, different campaigns then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return channels that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return channels that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked channels/search, not when Max channels output cap or the search cap limited it, or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Optional. Top-level field names to exclude from UPDATED change detection and from changedFields, in addition to the built-in handling (scrapedAt, the similarChannels list and the live view, like and comment counters of the featured video, the recent short and long videos and the upload events, including those nested inside stats7 and statsTimeSeries, already never trigger a false UPDATED). Use it when another field, e.g. subscriberCount, is too noisy for your schedule. Ignored fields are still returned in every row. Changing this list never causes a one-time wave of UPDATED rows. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
displayNameChannelhandleHandlechannelIdChannel IDchangeTypeChange type (incremental mode) (text)urlURL (link)verifiedVerifiedcountryCountrysubscriberCountSubscribersviewCountViewsvideoCountVideosglobalSubscribersRankingGlobal subs rankglobalViewsRankingGlobal views rankShow 15 more fields
countrySubscriberRankingCountry subs rankviewstatsRankingViewStats rankestimatedRevenueLowUsdMonthlyEst. revenue low (mo)estimatedRevenueHighUsdMonthlyEst. revenue high (mo)uploadFrequencyPerMonthUploads / moavatarUrlAvatar (image)changedFieldsChanged fields (incremental mode) (array)firstSeenAtFirst seen (incremental mode) (date)lastSeenAtLast seen (incremental mode) (date)growthGrowthaveragesAverageslongsAndShortsLongs & shortsfeaturedVideoFeatured videocategorySubscriberRankingCategory subs rankvpv90VPV (90d)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"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"
}Ways to use this data
- 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.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does ViewStats Scraper return?
The documented output for ViewStats Scraper includes channel, handle, channel id, change type (incremental mode), url, verified, country and subscribers. Availability of each field depends on the source page and the selected mode.
How much does ViewStats Scraper cost?
It costs $1.70 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
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.
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.
