# SocialBlade Stats Scraper (`devilscrapes/socialblade-stats-scraper`) Actor

Scrape SocialBlade creator/channel stats across YouTube, Twitch, Instagram, and TikTok — subscriber/follower counts, view counts, SocialBlade's letter grade, platform + category ranks, and 15-day daily growth history, normalized per handle.

- **URL**: https://apify.com/devilscrapes/socialblade-stats-scraper.md
- **Developed by:** [DevilScrapes](https://apify.com/devilscrapes) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

<div align="center">
  <img src=".actor/icon.svg" width="160" alt="Devil Scrapes mark" />

## SocialBlade Stats Scraper

**💰 $1.02 / 1 000 results**  ·  pay only for results  ·  no credit card to try

*We do the dirty work so your dataset stays clean.* 😈

Scrape SocialBlade creator/channel stats across YouTube, Twitch, Instagram, and TikTok — subscriber/follower counts, view counts, SocialBlade's letter grade, platform + category ranks, and 15-day daily growth history, normalized per handle.

</div>

***

### 🎯 What this scrapes

SocialBlade tracks creator/channel growth across YouTube, Twitch, Instagram, and TikTok, but its own UI only shows one profile at a time with no export. This Actor fetches SocialBlade's own profile data for a list of handles or channel IDs across all four platforms in one run, returning subscriber/follower counts, view counts, content counts, SocialBlade's letter grade, platform/category/country ranks, and a 15-day daily growth history — one normalized row per creator. It does not scrape SocialBlade's Estimated Monthly/Yearly Earnings figures — those numbers load client-side after the page hydrates and aren't present in the data we parse, so we don't fabricate them. What you get instead is broader multi-platform coverage and growth history in one pass, not a single earnings guess.

### 🔥 What we handle for you

- 🛡️ **Browser fingerprint rotation** — `curl-cffi` impersonates real Chrome / Firefox / Safari TLS handshakes so SocialBlade sees a browser, not Python.
- 🌐 **Residential proxy rotation** via Apify Proxy — fresh session and exit IP on every block.
- 🔁 **Retries with exponential backoff** on `408 / 429 / 5xx` — up to 5 attempts per page, `Retry-After` honoured.
- 🧱 **Rate-limit-aware pacing and per-target fault isolation** — a bad handle or missing profile is skipped and logged, and we back off instead of hammering SocialBlade, so one bad target never fails the whole run.
- 🧊 **Clean, typed dataset rows** — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 **Pay-Per-Event pricing** — you only pay for results that land in your dataset. No data, no charge.

### 💡 Use cases

- **Cross-platform creator benchmarking** — compare a creator's YouTube, Twitch, Instagram, and TikTok stats side by side, something SocialBlade's own UI can't do in one pass.
- **Influencer-marketing agency shortlists** — pull follower counts, SocialBlade grades, and ranks for a batch of candidate creators before outreach.
- **Growth tracking** — snapshot the 15-day daily history to spot creators trending up or down.
- **Competitive research** — monitor a competitor's or client's channel stats over time.

### ⚙️ How to use it

1. Click **Try for free** at the top of the page.
2. Fill in the input form — most fields have sensible defaults.
3. Click **Start**. Output streams into the run's dataset.
4. Export from **Storage → Dataset** as JSON, CSV, or Excel — or fetch via the API.

### 📥 Input

| Field | Type | Required | Default | Notes |
|---|---|:--:|---|---|
| `targets` | `array` | **yes** | \[{'platform': 'youtube', 'handle': 'mrbeast6000'}] | Channels/creators to scrape, one row per target. Each item is either <code>{"platform":… |
| `includeHistory` | `boolean` | no | True | Include the 15-day daily growth history array in each row. |
| `maxItems` | `integer` | no | 100 | Cap on number of targets processed in one run. |
| `proxyConfiguration` | `object` | no | {'useApifyProxy': True, 'apifyProxyGroups': \['RESIDENTIAL']} | Apify Proxy config; residential group recommended at scale. |

#### Example input

```json
{
  "targets": [
    {
      "platform": "youtube",
      "handle": "mrbeast6000"
    },
    {
      "platform": "twitch",
      "handle": "pokimane"
    },
    {
      "platform": "instagram",
      "handle": "cristiano"
    },
    {
      "platform": "tiktok",
      "handle": "khaby.lame"
    }
  ],
  "includeHistory": true,
  "maxItems": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

### 📤 Output

Every row is one dataset item.

| Field | Type | Notes |
|---|---|---|
| `platform` | `string` | Platform this row was scraped from: youtube, twitch, instagram, or tiktok. |
| `handle` | `string` | Username/handle as supplied or resolved. |
| `channel_id` | `['string', 'null']` | SocialBlade's internal channel/user id. |
| `display_name` | `['string', 'null']` | Display name, where SocialBlade exposes it. |
| `avatar_url` | `['string', 'null']` | Profile avatar image URL. |
| `follower_count` | `integer` | Normalized subscriber/follower count. |
| `view_count` | `['integer', 'null']` | Total view count (YouTube only). |
| `content_count` | `['integer', 'null']` | Video/media/post count; null for Twitch (no such field). |
| `grade` | `string` | SocialBlade's own composite letter grade for the channel, e.g. 'A++' — not our assessment. |
| `country` | `['string', 'null']` | Creator's country, where exposed. |
| `ranks` | `['object', 'null']` | SocialBlade rank breakdown: sb, primary, views, country, category. |
| `engagement_rate` | `['number', 'null']` | Instagram-only average engagement rate. |
| `avg_likes` | `['number', 'null']` | Instagram-only average likes per post. |
| `avg_comments` | `['number', 'null']` | Instagram-only average comments per post. |
| `total_likes` | `['integer', 'null']` | TikTok-only lifetime total likes (not per-post). |
| `verified` | `['boolean', 'null']` | TikTok-only verified-badge flag. |
| `growth_history` | `array` | Up to 15 daily snapshots; empty when include\_history=false or unavailable on SocialBlade's side. |
| `source_url` | `string` | Resolved SocialBlade profile URL that was fetched. |
| `scraped_at` | `string` | ISO-8601 UTC timestamp this row was written. |

#### Example output

```json
{
  "platform": "youtube",
  "handle": "MrBeast",
  "channel_id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
  "display_name": "MrBeast",
  "avatar_url": "https://.../avatar.jpg",
  "follower_count": 512000000,
  "view_count": 136403988890,
  "content_count": 996,
  "grade": "A++",
  "country": "US",
  "ranks": {
    "sb": 7,
    "primary": 1,
    "views": 6,
    "country": 1,
    "category": 1
  },
  "growth_history": [
    {
      "date": "2026-08-09T00:00:00Z",
      "follower_count": 511998200,
      "view_count": 136403001234,
      "content_count": 996
    }
  ],
  "source_url": "https://socialblade.com/youtube/user/mrbeast6000",
  "scraped_at": "2026-08-10T12:00:00Z"
}
```

### 💰 Pricing

Pay-Per-Event — you pay only when these events fire:

| Event | USD | What it is |
|---|---:|---|
| `actor-start` | $0.02 | One-off warm-up charge per run |
| `result-emitted` | $0.001 | Per unique dataset item |

Example: 1 000 results at the rates above ≈ **$1.02**. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

### 🚧 Limitations

v1 covers YouTube, Twitch, Instagram, and TikTok only — other platforms SocialBlade tracks are out of scope. Estimated Monthly/Yearly Earnings are not scraped — that figure loads client-side after hydration and isn't present in the data we parse. Growth history is capped at SocialBlade's own 15-day window — no backfill beyond that.

### ❓ FAQ

**Do I need a SocialBlade account or API key?**

No. This Actor reads SocialBlade's own publicly listed profile data — no login, no API key.

**Does this include SocialBlade's Estimated Monthly/Yearly Earnings figures?**

No. Those numbers load client-side after the page hydrates and aren't present in the data we parse — v1 doesn't fabricate or estimate them. This Actor's edge is broader multi-platform coverage plus growth history in one pass, not an earnings guess.

**Why is `growth_history` sometimes an empty array?**

Some accounts (confirmed on Instagram) don't have a populated history query on SocialBlade's side. The row still emits with `growth_history: []` instead of failing.

**Can I mix platforms in one run?**

Yes — `targets` accepts any mix of platform/handle pairs (or direct URLs) across all four supported platforms in a single run.

**Is the letter grade our assessment?**

No — `grade` is SocialBlade's own composite score (e.g. `A++`, `D`), passed through as-is. We don't compute or adjust it.

### 💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an
issue on the Actor's **Issues** tab on Apify Console — we ship
fixes weekly and we read every report.

***

<div align="center">

Built by **[Devil Scrapes](https://apify.com/DevilScrapes)** 😈 — a small fleet of
opinionated public-data Actors. Honest pricing, real engineering, zero fine print.

</div>

# Actor input Schema

## `targets` (type: `array`):

Channels/creators to scrape, one row per target. Each item is either <code>{"platform": "youtube|twitch|instagram|tiktok", "handle": "..."}</code> or a direct <code>{"url": "https://socialblade.com/\<platform>/user/\<id>"}</code> — url takes precedence when both are given. At least 1 target is required.

## `includeHistory` (type: `boolean`):

Include the 15-day daily growth history array in each row.

## `maxItems` (type: `integer`):

Cap on number of targets processed in one run.

## `proxyConfiguration` (type: `object`):

Apify Proxy config; residential group recommended at scale.

## Actor input object example

```json
{
  "targets": [
    {
      "platform": "youtube",
      "handle": "mrbeast6000"
    }
  ],
  "includeHistory": true,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

All dataset items as JSON.

## `datasetItemsCsv` (type: `string`):

Same data exported to CSV.

## `datasetView` (type: `string`):

Open the run dataset in the Console.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "targets": [
        {
            "platform": "youtube",
            "handle": "mrbeast6000"
        }
    ],
    "includeHistory": true,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("devilscrapes/socialblade-stats-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "targets": [{
            "platform": "youtube",
            "handle": "mrbeast6000",
        }],
    "includeHistory": True,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("devilscrapes/socialblade-stats-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "targets": [
    {
      "platform": "youtube",
      "handle": "mrbeast6000"
    }
  ],
  "includeHistory": true,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call devilscrapes/socialblade-stats-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,devilscrapes/socialblade-stats-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/zppcUpRrmNNp1JQnS/builds/hD3uXcoXeZ4tndiUK/openapi.json
