# Social Blade Multi-Platform Analytics Scraper (`datascraperes/socialblade-scraper`) Actor

Extract public Social Blade creator profiles in bulk across YouTube, TikTok, Twitch, Instagram, and Facebook. Get subscribers, followers, views, engagement, grades, rankings, growth, earnings estimates, and available daily, weekly, and monthly history in structured Dataset records.

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

## Pricing

from $3.75 / 1,000 successful profile snapshots

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

**Scrape public Social Blade creator profiles in bulk** from Social Blade URLs or handles. The Actor returns normalized audience, content, engagement, growth, rankings, earnings estimates, and available daily, weekly, and monthly history across YouTube, TikTok, Twitch, Instagram, and Facebook.

### What this Actor does

Social Blade Scraper resolves public Social Blade profiles and collects the useful public data exposed for that platform. Each valid input produces a profile record with the resolved creator identifier, display information, audience totals, content totals, public grade or category signals, related social links, growth data, rankings, and available earnings estimates.

When historical data is available, the Dataset also contains daily, weekly, and monthly metric records. Every record identifies its `recordType`, platform, creator ID, username, date, and normalized metrics. The profile record includes primary audience, media count, verification and website signals, engagement metrics, simplified rank fields, normalized growth windows, `dataQuality`, endpoint availability, response timing, and upstream request counts so downstream systems can distinguish a complete result from a partial result.

The Actor works with public Social Blade pages only. It does not log in, access private accounts, retrieve private platform data, or promise fields that the upstream source does not expose for a particular profile.

### Use cases

- Build creator and influencer datasets with current audience, content, growth, and ranking signals.
- Compare public creator performance across YouTube, TikTok, Twitch, Instagram, and Facebook.
- Monitor audience and content history through daily, weekly, and monthly Dataset records.
- Enrich sponsorship, competitive research, talent discovery, and recurring reporting workflows.

### How to use

1. Open the Actor in Apify Console.
2. Enter Social Blade profile URLs or handles in `profiles`.
3. Keep the default history settings unless you need a smaller run.
4. Click **Start** and open the Dataset when the run finishes.

During a run, the Actor status shows user-facing progress milestones: input preparation, the profile currently being collected, aggregate successful/partial/failed counts, total output rows, and the final completion summary.

Full Social Blade URLs can be mixed with bare handles. A bare handle uses `defaultPlatform`, which defaults to YouTube. URLs are accepted only from Social Blade and are normalized to their canonical platform route. Duplicate profiles are reported without making a second upstream request.

The Console opens with one valid YouTube profile URL as a prefilled example. Replace it with the public Social Blade profiles you want to collect.

### Input

| Field | Type | Required | Default | Description |
|---|---|---:|---|---|
| `profiles` | `string[]` | Yes | — | One to 1,000 Social Blade profile URLs or handles. The Console prefill is `https://socialblade.com/youtube/handle/mrbeast`. |
| `defaultPlatform` | select | No | `youtube` | Platform used for bare handles: `youtube`, `tiktok`, `twitch`, `instagram`, or `facebook`. |
| `includeDailyHistory` | boolean | No | `true` | Emits available `dailyStat` rows, limited by `historyDays`. |
| `historyDays` | integer | No | `31` | Maximum number of daily rows per profile, from 1 to 31. |
| `includeWeeklyHistory` | boolean | No | `true` | Emits available `weeklyStat` rows from the public summary data. |
| `includeMonthlyHistory` | boolean | No | `true` | Emits available `monthlyStat` rows. |
| `includeGrowthMetrics` | boolean | No | `true` | Includes public growth metrics in the profile record. |
| `includeEarningsEstimates` | boolean | No | `true` | Requests public earnings estimates when exposed; `earningsStatus` reports whether one was available. |
| `maxProfiles` | integer | No | `0` | Maximum submitted profiles to attempt; `0` means all submitted inputs up to 1,000. |

Example input:

```json
{
  "profiles": ["https://socialblade.com/instagram/user/instagram"],
  "includeDailyHistory": false,
  "includeWeeklyHistory": false,
  "includeMonthlyHistory": false,
  "includeEarningsEstimates": false
}
```

### Output

The default Dataset contains one `profile` record per unique valid input, plus optional `dailyStat`, `weeklyStat`, and `monthlyStat` records. Profile records contain normalized fields under `profile`, `audience`, `content`, `growth`, `growthWindows`, `summary`, `monthly`, `rankings`, and `earnings`. Headline fields such as `primaryAudience`, `mediaCount`, `engagementRate`, `talkingAbout`, `globalRank`, `countryRank`, and `categoryRank` are also available at the top level for filtering and table exports. Values that are not exposed for a profile are returned as `null` or omitted from the relevant upstream object.

`growth` preserves the public endpoint representation. `growthWindows` provides a stable metric-first structure such as `growthWindows.followers.days30.delta` and `.pct`; percentage values are expressed as percentage points. A one-day window is included when the available daily history contains the required dates.

The nested `profile` object includes `website`, `verified`, and `socialBladeVerified` when available. Instagram-specific `engagementRate`, `averageLikes`, and `averageComments`, and Facebook `talkingAbout`, are exposed when Social Blade returns them. `earningsStatus` is `available`, `not_available`, or `not_requested`; earnings are estimates and may be unavailable on public pages.

Profile records use `status: "ok"` when the public profile snapshot and all endpoints attempted for that platform respond, or `status: "partial"` when an attempted endpoint fails after the profile is valid. Invalid, duplicate, blocked, rate-limited, and failed inputs remain auditable as error records with a stable error code. `responseTimeMs`, `httpRequests`, and `requestMetrics` describe the collection cost and timing for each profile.

Instagram has a specific public-coverage boundary: the public source can provide the profile snapshot and maximum-rank data, while some statistics and history endpoints require login. The Actor does not attempt login or bypass anti-bot protections. It skips those deterministic unavailable calls and lists them under `dataQuality.unavailableEndpoints`; the corresponding fields remain `null` or empty. This keeps a usable public Instagram snapshot as `status: "ok"` and reserves `partial` for an endpoint that the Actor actually attempted and could not retrieve.

This is the complete Dataset item from a real successful run:

```json
{
  "recordType": "profile",
  "status": "ok",
  "platform": "instagram",
  "creatorId": "17841400039600391",
  "username": "instagram",
  "displayName": "Instagram",
  "website": "http://help.instagram.com",
  "country": null,
  "category": null,
  "grade": "A+",
  "verified": null,
  "primaryAudience": 686508139,
  "primaryAudienceMetric": "followers",
  "mediaCount": 8581,
  "engagementRate": 0.07,
  "averageLikes": 480555.1875,
  "averageComments": 8420.0625,
  "talkingAbout": null,
  "url": "https://socialblade.com/instagram/user/instagram",
  "inputUrl": "https://socialblade.com/instagram/user/instagram",
  "profile": {
    "id": "17841400039600391",
    "username": "instagram",
    "displayName": "Instagram",
    "avatar": "https://scontent-lga3-3.xx.fbcdn.net/v/t51.82787-15/550891366_18667771684001321_1383210656577177067_n.jpg?_nc_cat=102&ccb=1-7&_nc_sid=7d201b&_nc_ohc=iKL2PIQZ5vgQ7kNvwHaa5x2&_nc_oc=Adp-uAiUUCoQnGBzF8PzKni8QoquDBw0Gyttw3JjtgZtnjv7G2Xnsnm0NDT230YPnQbxQq9k1x9sXFegadj1HC6p&_nc_zt=23&_nc_ht=scontent-lga3-3.xx&edm=AL-3X8kEAAAA&_nc_gid=3NBSQy1VRi47Ek9eVnXp-Q&oh=00_AQJ8sjNEPrJDKP5SMHtW1BUibyaPFj3LKkwatIQ3EeVVUQ&oe=6AA80B28",
    "banner": null,
    "bio": null,
    "website": "http://help.instagram.com",
    "country": null,
    "countryCode": null,
    "category": null,
    "grade": "A+",
    "createdAt": null,
    "verified": null,
    "socialBladeVerified": false,
    "identifiers": null,
    "flags": {
      "disabled": null,
      "madeForKids": null,
      "statsHidden": null
    },
    "socials": []
  },
  "audience": {
    "subscribers": null,
    "followers": 686508139,
    "following": 290,
    "likes": null,
    "views": null,
    "engagementRate": 0.07,
    "averageLikes": 480555.1875,
    "averageComments": 8420.0625,
    "talkingAbout": null
  },
  "content": {
    "videos": null,
    "uploads": null,
    "posts": null,
    "liveStreams": null,
    "mediaCount": 8581
  },
  "growth": null,
  "growthWindows": null,
  "summary": null,
  "monthly": null,
  "rankings": {
    "current": null,
    "maximum": {
      "followers": "506610",
      "following": "14338",
      "engagementRate": "57006",
      "sb": 64299
    }
  },
  "globalRank": null,
  "audienceRank": null,
  "viewsRank": null,
  "countryRank": null,
  "categoryRank": null,
  "earnings": null,
  "earningsStatus": "not_requested",
  "responseTimeMs": 3367,
  "httpRequests": 3,
  "requestMetrics": {
    "profilePage": {
      "elapsedMs": 2183,
      "httpRequests": 1,
      "statusCode": 200
    },
    "instagram.user": {
      "elapsedMs": 593,
      "httpRequests": 1,
      "statusCode": 200
    },
    "instagram.ranks.max": {
      "elapsedMs": 588,
      "httpRequests": 1,
      "statusCode": 200
    }
  },
  "dataQuality": {
    "availableEndpoints": ["ranksMax", "user"],
    "missingEndpoints": [],
    "failedEndpoints": [],
    "unavailableEndpoints": ["growth", "ranksGet", "summary"],
    "notRequestedEndpoints": ["history", "monthly"],
    "endpointErrors": {}
  },
  "scrapedAt": "2026-09-10T10:47:43.889481+00:00"
}
```

Normalized count fields are numeric when Social Blade returns a parseable value. Historical rows include a sanitized `sourceData` object preserving the original public representation used to build that row, including numeric strings.

### Pricing

The Actor uses pay-per-event pricing. One billable unit is one successfully delivered profile snapshot (`recordType: "profile"`, `status: "ok"`). Any requested daily, weekly, or monthly history rows are included in that snapshot and do not create additional charges. Apify resolves the applicable price from your subscription tier.

| Apify tier | Price per profile snapshot | Equivalent per 1,000 profile snapshots |
|---|---:|---:|
| FREE | $0.00500 | $5.00 |
| BRONZE | $0.00450 | $4.50 |
| SILVER | $0.00400 | $4.00 |
| GOLD | $0.00375 | $3.75 |
| PLATINUM | $0.00375 | $3.75 |
| DIAMOND | $0.00375 | $3.75 |

The 1,000-profile figures are comparison equivalents; billing remains per profile snapshot. Invalid, duplicate, failed, and partial profile records, skipped work, and historical rows by themselves are not charged.

### Related Actors

| Actor | Best for |
|---|---|
| [TikTok Profile Scraper – Bio, Stats & Playlists](https://apify.com/datascraperes/tiktok-profile-scraper) | Collecting richer TikTok-native profile details, public playlists, and profile statistics after identifying TikTok creators. |
| [Instagram Profile Scraper - No Login](https://apify.com/datascraperes/instagram-profile-scraper-no-login) | Extracting Instagram-native biography, follower, verification, account-type, and public link fields without login. |

### Limits and data quality

The Actor accepts up to 1,000 submitted profiles per run and requests up to 31 daily rows per profile. The public source may return fewer rows; the current available window is reported by the Dataset rather than padded or inferred. Weekly and monthly coverage depends on the public history returned for that profile and platform. Instagram public access may expose current identity, audience, engagement, and maximum-rank data without exposing historical statistics; the unavailable endpoint names are reported rather than inferred.

The source can rate-limit or challenge requests. The Actor automatically uses one profile at a time, one retry for transient failures, and a 20-second timeout per upstream request. It stops on access blocks and continues other profiles when possible; rerun failed inputs when the source is temporarily unavailable.

### Frequently asked questions

#### Does the Actor access private accounts?

No. It uses publicly accessible Social Blade data only and does not log in or access private platform information.

#### Why is a metric missing or null?

Social Blade does not expose every metric for every platform or profile. The profile's `dataQuality` object reports available, unavailable, missing, failed, and not-requested endpoints, while historical records are emitted only when the source returns usable dated data. `earningsStatus` distinguishes an unavailable estimate from one that was not requested. For Instagram, login-only statistics and history endpoints appear in `unavailableEndpoints` and are not treated as runtime failures.

#### What is the difference between `growth` and `growthWindows`?

`growth` preserves the public endpoint response for completeness. `growthWindows` is the easier-to-consume form: metrics contain windows such as `days1`, `days7`, `days30`, each with an absolute `delta` and a percentage `pct` when a valid baseline exists.

#### What happens when one profile fails?

The run continues for the remaining inputs when possible. The failed input is written as an auditable error record with its normalized URL, stable error code, timing, and HTTP status when available.

#### Can I request only current profile data?

Yes. Set `includeDailyHistory`, `includeWeeklyHistory`, and `includeMonthlyHistory` to `false`. Growth, ranking, summary, and other current profile fields remain controlled by their corresponding options.

### Responsible use

Use only publicly accessible information and comply with Social Blade's terms, the terms of the underlying platforms, applicable privacy and data-protection rules, and other laws relevant to your use case. Do not use the Actor for spam, harassment, credential collection, unlawful profiling, or attempts to access private data.

### Support

For unexpected results, open an issue in the Actor's **Issues** tab and include the run ID, a small reproducible public profile input, the returned status, and the relevant error code. Never include credentials or cookies.

The public companion repository contains the no-code guide, API examples, and sample Dataset:
[Social Blade scraper examples on GitHub](https://github.com/datacrawler-edu/socialblade-scraper-python)

# Actor input Schema

## `profiles` (type: `array`):

Social Blade profile URLs or handles. Up to 1,000 inputs per run; duplicates are reported and not fetched twice.

## `defaultPlatform` (type: `string`):

Platform used for bare handles.

## `includeDailyHistory` (type: `boolean`):

Store available daily metric rows in the Dataset.

## `historyDays` (type: `integer`):

Maximum requested history window.

## `includeWeeklyHistory` (type: `boolean`):

Store available weekly summary rows in the Dataset.

## `includeMonthlyHistory` (type: `boolean`):

Store available monthly metric rows in the Dataset.

## `includeGrowthMetrics` (type: `boolean`):

Request growth metrics when supported.

## `includeEarningsEstimates` (type: `boolean`):

Request public earnings estimates when supported; the output reports earningsStatus when unavailable.

## `maxProfiles` (type: `integer`):

Maximum number of submitted profiles to attempt; 0 means all submitted inputs up to 1,000.

## Actor input object example

```json
{
  "profiles": [
    "https://socialblade.com/youtube/handle/mrbeast"
  ],
  "defaultPlatform": "youtube",
  "includeDailyHistory": true,
  "historyDays": 31,
  "includeWeeklyHistory": true,
  "includeMonthlyHistory": true,
  "includeGrowthMetrics": true,
  "includeEarningsEstimates": true,
  "maxProfiles": 0
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "profiles": [
        "https://socialblade.com/youtube/handle/mrbeast"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datascraperes/socialblade-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 = { "profiles": ["https://socialblade.com/youtube/handle/mrbeast"] }

# Run the Actor and wait for it to finish
run = client.actor("datascraperes/socialblade-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 '{
  "profiles": [
    "https://socialblade.com/youtube/handle/mrbeast"
  ]
}' |
apify call datascraperes/socialblade-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datascraperes/socialblade-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/vXYdaKcgi7rbs5ndR/builds/hCE3JpqxQQgprAtgy/openapi.json
