ViewStats YouTube Channel Stats Scraper avatar

ViewStats YouTube Channel Stats Scraper

Pricing

from $5.00 / 1,000 successfully scraped channels

Go to Apify Store
ViewStats YouTube Channel Stats Scraper

ViewStats YouTube Channel Stats Scraper

Ultra-fast, browserless YouTube channel analytics scraper powered by ViewStats. Resolve channels by name, @handle, UC channel ID, or URL to extract 28-day views, Longs vs. Shorts split, monthly/weekly/daily view history, subscriber deltas, rankings, and estimated revenue.

Pricing

from $5.00 / 1,000 successfully scraped channels

Rating

0.0

(0)

Developer

Tomáš G

Tomáš G

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Categories

Share

ViewStats icon

ViewStats YouTube Channel Stats Scraper

Ultra-fast, browserless Apify Actor for extracting YouTube channel statistics and historical view analytics from ViewStats.

Instead of spinning up Playwright or Chromium, this Actor communicates directly with ViewStats' binary API over native HTTP and decodes AES-256-GCM payloads via WebCrypto (crypto.subtle) — scraping 30+ YouTube channels in seconds while running comfortably inside 128–256 MB RAM.

Flexible Channel Inputs

Pass channels in any format — the Actor resolves them automatically:

  • Channel Name — Marques Brownlee (resolved via ViewStats channel search)
  • Channel Handle — @mkbhd
  • Immutable YouTube Channel ID — UCBJycsmduvYEL83R_U4JriQ
  • YouTube or ViewStats URL — https://www.youtube.com/@mkbhd or https://www.viewstats.com/@mkbhd/channelytics

All four formats above identify Marques Brownlee's channel.

Pricing

$5 per 1,000 successfully scraped channels ($0.005 per channel), including the selected historical time series and standard platform usage during the run. One successful channel record triggers one channel-scraped event. History points are not charged individually. Error and not-found records do not trigger this event. Identical trimmed inputs are deduplicated; different inputs resolving to the same channel produce separate results.

A small automatic startup fee of $0.00005 per run also applies. For example, 100 successful channels cost $0.50005. The Actor stops scheduling new channels when its spending limit is reached; results already in flight may be omitted to respect the limit. Check the Store Pricing tab for the current prices. Reading or storing datasets after a run may incur Apify's standard storage charges.

Data Availability and Limitations

  • Only channels tracked by ViewStats can be returned. Name searches select the best available match; use an exact YouTube channel ID or handle when identity matters.
  • Historical coverage and metric availability depend on ViewStats. Missing fields can be null; revenue figures are estimates, not actual creator earnings.
  • Each input produces an ok, not_found, or error record unless the run budget is exhausted or the run is interrupted. Inspect status and error in your integration.
  • Standard Apify Proxy is enabled by default on Apify. Custom or residential proxy configurations can increase operating costs and are not needed for the default workflow.
  • This is an independent Actor and is not affiliated with ViewStats or YouTube. Use the data in accordance with applicable terms and laws.

Extracted Data Per Channel

  • Channel Identity & Metadata: channelId (UC...), handle (@...), displayName, verified, country, avatarUrl, bannerUrl, youtubeUrl, viewstatsUrl
  • Totals & Rankings: subscriberCount, viewCount, videoCount, vpv90 (90-day views per video), globalViewsRanking, globalSubscribersRanking, countrySubscriberRanking, categorySubscriberRanking
  • 28-Day & Monthly Metrics: views28d, views28dDelta, longViews28d, shortViews28d, monthlyAverageViews, estimatedMonthlyRevenueLowUsd, estimatedMonthlyRevenueHighUsd, uploadFrequency
  • Multi-Period Breakdowns:
    • infoCards (weekly, monthly, quarterly, yearly, allTime)
    • averages (daily, weekly, monthly, yearly, uploadFrequency)
    • longsAndShorts (weekly, monthly, ninetyDays, yearly, allTime long-form vs. Shorts views and upload counts)
  • Historical Time Series (statsHistory): Configurable range (7, 28, 90, 365, alltime) and groupBy (monthly, weekly, daily) with viewCount, viewCountDelta, subscriberCount, subscriberCountDelta, videoCount, videoCountDelta, and estimated USD revenue per bucket.

Example Input

{
"channels": [
"Marques Brownlee",
"@mkbhd",
"UCBJycsmduvYEL83R_U4JriQ",
"https://www.youtube.com/@mkbhd"
],
"range": "365",
"groupBy": "monthly",
"includeHistory": true,
"includeEvents": false,
"concurrency": 5
}

These four entries demonstrate alternative formats for the same channel. Use just one for a single result; submitting all four produces four separately charged results.

Or scrape a single channel directly:

{
"channel": "Marques Brownlee"
}

Example Dataset Output Item

Illustrative output (values are examples):

{
"input": "Marques Brownlee",
"resolvedBy": "search",
"status": "ok",
"error": null,
"channelId": "UCBJycsmduvYEL83R_U4JriQ",
"handle": "@mkbhd",
"displayName": "Marques Brownlee",
"verified": true,
"country": "US",
"subscriberCount": 20800000,
"viewCount": 4912345678,
"videoCount": 1765,
"views28d": 107686373,
"views28dDelta": 14231090,
"longViews28d": 92604035,
"shortViews28d": 25917682,
"monthlyAverageViews": 118521717,
"estimatedMonthlyRevenueLowUsd": 52100,
"estimatedMonthlyRevenueHighUsd": 144500,
"uploadFrequency": 5,
"vpv90": 2410000,
"globalViewsRanking": 1420,
"globalSubscribersRanking": 412,
"countrySubscriberRanking": 158,
"categorySubscriberRanking": 14,
"avatarUrl": "https://yt3.ggpht.com/...",
"bannerUrl": "https://yt3.googleusercontent.com/...",
"youtubeUrl": "https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ",
"viewstatsUrl": "https://www.viewstats.com/@mkbhd/channelytics",
"infoCards": { "weekly": {}, "monthly": {}, "quarterly": {}, "yearly": {}, "allTime": {} },
"averages": { "daily": {}, "weekly": {}, "monthly": {}, "yearly": {}, "uploadFrequency": 5 },
"longsAndShorts": { "weekly": {}, "monthly": {}, "ninetyDays": {}, "yearly": {}, "allTime": {} },
"statsRange": "365",
"statsGroupBy": "monthly",
"statsHistory": [
{
"date": "2026-10-01",
"viewCount": 4912345678,
"viewCountDelta": 107686373,
"subscriberCount": 20800000,
"subscriberCountDelta": 100000,
"videoCount": 1765,
"videoCountDelta": 14,
"estimatedLowRevenueUsd": 52100,
"estimatedHighRevenueUsd": 144500,
"estimatedRevenueUsd": 98300,
"dayOfWeek": "THURSDAY",
"isToday": false
}
],
"scrapedAt": "2026-10-29T18:10:00.000Z"
}

Local Development

npm install
npm test
npm run typecheck
npm run build
# Validate Apify schemas and run locally
apify validate-schema
apify run