ViewStats Scraper icon

ViewStats Scraper

Scrape YouTube channel analytics from ViewStats. Look up channels by handle, URL, or keyword search. Returns subscribers, views, rankings, growth from…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

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.

Supported input fields
InputWhat it controls
modestring · requiredPick how to find channels. 'channels' takes a list of @handles or channel URLs. 'search' takes keywords and resolves matching channels.

Choices: channels, search

channelsarrayChannels 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...).
startUrlsarrayChannels mode only. Alias of 'Channels': accepts the same @handles, bare handles, ViewStats URLs and YouTube URLs. Entries are merged with 'Channels' and de-duplicated.
searchTermsarraySearch mode only. Keywords to look up. Each term resolves up to 'Max channels per search term' matching channels.
maxChannelsPerSearchintegerSearch mode only. Cap on how many channels each keyword resolves.
includeProfileDetailsbooleanAdds 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).
includeSimilarChannelsbooleanAdds 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
More input fields
InputWhat it controls
includeStatsTimeSeriesbooleanAdds 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.
statsRangestringWindow for the time-series (only used when the time-series is enabled).

Choices: 28, 90, 365, alltime

statsGroupBystringBucket size for the time-series (only used when the time-series is enabled).

Choices: daily, monthly

maxItemsintegerHard cap on the number of channel records written. 0 means unlimited.
resumeFromRunIdstringPaste 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.
incrementalModebooleanTurn 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.
stateKeystringOptional. 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.
emitUnchangedbooleanOff 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.
emitExpiredbooleanOff 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.
ignoreFieldsForChangesarrayOptional. 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.
mcpConnectorsarrayOptionally 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).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap 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.

displayNameChannel
handleHandle
channelIdChannel ID
changeTypeChange type (incremental mode) (text)
urlURL (link)
verifiedVerified
countryCountry
subscriberCountSubscribers
viewCountViews
videoCountVideos
globalSubscribersRankingGlobal subs rank
globalViewsRankingGlobal views rank
Show 15 more fields
countrySubscriberRankingCountry subs rank
viewstatsRankingViewStats rank
estimatedRevenueLowUsdMonthlyEst. revenue low (mo)
estimatedRevenueHighUsdMonthlyEst. revenue high (mo)
uploadFrequencyPerMonthUploads / mo
avatarUrlAvatar (image)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
growthGrowth
averagesAverages
longsAndShortsLongs & shorts
featuredVideoFeatured video
categorySubscriberRankingCategory subs rank
vpv90VPV (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.

Ready to collect with ViewStats Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.