# YouTube Subscribers Scraper (Cheap) (`data_api/youtube-subscribers-scraper-cheap`) Actor

Pulls YouTube channel stats by handle: subscribers, views, video count, creation date, avatar, and banner. No API key needed. Run one channel or batch up to 1,000 at once.

- **URL**: https://apify.com/data\_api/youtube-subscribers-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Developer tools, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## YouTube Subscribers Scraper

![YouTube Subscribers Scraper](cover.jpg)

Getting a channel's real numbers usually means signing up for the YouTube API, managing quota keys, or eyeballing a channel page and guessing. Skip all that. Hand this scraper a handle like `mkbhd` and it gives you the whole picture in one row: subscriber count, lifetime views, how many videos the channel has posted, when it launched, plus the avatar, banner, country, and channel ID. Check one creator or feed it a list of hundreds and let it work through them.

### What you get

Every handle you submit becomes one row with the same set of columns, so results drop straight into a sheet or database. When a value isn't available it comes back as `null` rather than disappearing, which keeps your columns lined up. Each row covers:

- **Channel stats** — `subscriberCount`, `viewCount`, `uploadCount`, `performanceGrade`
- **Channel profile** — `channelHandle`, `channelTitle`, `youtubeUrl`, `channelIdentifier`, `countryCode`
- **History and media** — `joinedDate`, `joinedDateText`, `profileImage`, `bannerImage`
- **Run metadata** — `collectedAt`, `errorMessage`

### Quick start

1. Click **Try for free** and open the input form.
2. Type one handle into **Channel handle**, or paste a batch into **Channel handles** (one per line, no @).
3. Set a **Results limit** if you want to cap how many channels run this time.
4. Hit **Start**, then export the rows as JSON, CSV, Excel, or XML once the run finishes.

![How it works](how-it-works.jpg)

### Use cases

- **Sponsorship research** — line up several creators side by side and compare reach before you spend on a deal
- **Influencer shortlisting** — pull stats for a list of handles and rank candidates by subscribers or views
- **Growth tracking** — re-run the same handles on a schedule and watch subscriber and view trends move
- **Competitive benchmarking** — measure your channel against rivals in the same niche
- **Dashboards and reports** — feed live channel numbers into your own analytics or client decks

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `youtubeHandle` | string | One of `youtubeHandle` or `youtubeHandles` | A single channel handle, typed without the @ (e.g. `mkbhd`). |
| `youtubeHandles` | array of strings | One of `youtubeHandle` or `youtubeHandles` | Several handles to pull in one run, one per line, no @ symbol. |
| `resultsLimit` | integer | No | Most channels to process in a single run. Default `50`, max `1000`. |
| `timeoutSeconds` | integer | No | Seconds to wait on each request before giving up. Default `45`. |

#### Example input

```json
{
    "youtubeHandle": "mkbhd",
    "youtubeHandles": ["mkbhd", "veritasium", "mrbeast"],
    "resultsLimit": 50,
    "timeoutSeconds": 45
}
````

### Output

Each handle produces one row, and every field is always present — anything unavailable comes back as `null` so the dataset stays rectangular.

#### Example output

```json
{
    "channelHandle": "mkbhd",
    "channelTitle": "Marques Brownlee",
    "youtubeUrl": "https://www.youtube.com/@mkbhd",
    "subscriberCount": 19800000,
    "viewCount": 3950000000,
    "uploadCount": 1720,
    "joinedDate": "2008-03-21T00:00:00.000Z",
    "joinedDateText": "March 21, 2008",
    "profileImage": "https://yt3.ggpht.com/ytc/AIdro_example",
    "bannerImage": "https://yt3.googleusercontent.com/example-banner",
    "channelIdentifier": "UCBJycsmduvYEL83R_U4JriQ",
    "countryCode": "US",
    "performanceGrade": "A+",
    "collectedAt": "2026-06-30T10:00:00.000000+00:00",
    "errorMessage": null
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `channelHandle` | string | The handle that was looked up, without the @ |
| `channelTitle` | string | Public display name of the channel |
| `youtubeUrl` | string | Direct link to the channel on YouTube |
| `subscriberCount` | integer | Current subscriber total |
| `viewCount` | integer | Combined views across all videos |
| `uploadCount` | integer | Number of public videos on the channel |
| `joinedDate` | string | Channel creation date in ISO 8601 form |
| `joinedDateText` | string | Channel creation date written for people, e.g. March 21, 2008 |
| `profileImage` | string | Link to the channel avatar |
| `bannerImage` | string | Link to the channel banner |
| `channelIdentifier` | string | YouTube channel ID in UCxxxxxxx form |
| `countryCode` | string | Two-letter country code for the channel |
| `performanceGrade` | string | Letter grade summarizing channel performance |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |
| `errorMessage` | string | Reason a lookup failed; `null` on success |

### Tips for best results

- **Drop the @.** Enter `mkbhd`, not `@mkbhd`. Handles are 3-30 characters and allow letters, numbers, underscores, hyphens, and dots.
- **Test with a few first.** Run three or four handles to confirm the output fits your pipeline before pushing a long list.
- **Use `resultsLimit` to control spend.** Cap it low while you test, then raise it toward 1000 for the full batch.
- **Bad handles are skipped, not fatal.** An invalid handle logs a warning and the run keeps going on the rest.
- **A failed lookup still writes a row.** The `errorMessage` field tells you what went wrong while the stat fields stay `null`, so one bad channel never stops the batch.
- **Raise `timeoutSeconds`** toward 60 if you run large batches and hit occasional timeouts.

### How can I use YouTube channel data?

**How can I use the YouTube Subscribers Scraper to compare creators for a sponsorship?**
Paste the handles of every creator on your shortlist into `youtubeHandles` and run them together. Each one returns subscriber count, lifetime views, and upload count in the same row shape, so you can sort the results and see who actually has the reach before you commit budget.

**How can I check a YouTube channel's subscriber count without the API?**
Enter a single handle in `youtubeHandle` and start the run. There's no API key, no OAuth, and no quota to manage — you get the subscriber count along with views, video count, join date, and channel ID in one record you can export anywhere.

**How can I track YouTube channel growth over time?**
Save your list of handles and run the scraper on a schedule — daily, weekly, whatever fits. Because `collectedAt` is stamped on every row, you can append each run to the same dataset and chart how subscribers and views shift for each channel.

**How can I pull YouTube channel stats in bulk for research?**
Load all your handles into `youtubeHandles`, set `resultsLimit` to cover the whole list, and export the result as CSV or Excel. You end up with a clean table of channel metrics — subscribers, views, uploads, country, grade — ready for a spreadsheet or a database.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `youtubeHandle` (type: `string`):

One YouTube channel handle to check. Type it without the @ (for example mkbhd, not @mkbhd). A handle is 3-30 characters and uses only letters, numbers, underscores, hyphens, or dots.

## `youtubeHandles` (type: `array`):

Several channel handles to pull in a single run. Add one handle per line and leave off the @ symbol.

## `resultsLimit` (type: `integer`):

Highest number of channels to handle in one run. Lower it for quick test runs.

## `timeoutSeconds` (type: `integer`):

How long to wait on each request before giving up. Raise it if you see frequent timeouts.

## Actor input object example

```json
{
  "youtubeHandle": "mkbhd",
  "youtubeHandles": [
    "mkbhd",
    "veritasium",
    "mrbeast"
  ],
  "resultsLimit": 50,
  "timeoutSeconds": 45
}
```

# 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 = {
    "youtubeHandle": "kawsarlog"
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/youtube-subscribers-scraper-cheap").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 = { "youtubeHandle": "kawsarlog" }

# Run the Actor and wait for it to finish
run = client.actor("data_api/youtube-subscribers-scraper-cheap").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "youtubeHandle": "kawsarlog"
}' |
apify call data_api/youtube-subscribers-scraper-cheap --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_api/youtube-subscribers-scraper-cheap",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Subscribers Scraper (Cheap)",
        "description": "Pulls YouTube channel stats by handle: subscribers, views, video count, creation date, avatar, and banner. No API key needed. Run one channel or batch up to 1,000 at once.",
        "version": "0.0",
        "x-build-id": "eOxLa6UDxSTRZblwd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~youtube-subscribers-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-youtube-subscribers-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/data_api~youtube-subscribers-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-youtube-subscribers-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/data_api~youtube-subscribers-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-youtube-subscribers-scraper-cheap",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "youtubeHandle": {
                        "title": "Channel handle",
                        "type": "string",
                        "description": "One YouTube channel handle to check. Type it without the @ (for example mkbhd, not @mkbhd). A handle is 3-30 characters and uses only letters, numbers, underscores, hyphens, or dots."
                    },
                    "youtubeHandles": {
                        "title": "Channel handles (batch)",
                        "type": "array",
                        "description": "Several channel handles to pull in a single run. Add one handle per line and leave off the @ symbol.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resultsLimit": {
                        "title": "Results limit",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Highest number of channels to handle in one run. Lower it for quick test runs.",
                        "default": 50
                    },
                    "timeoutSeconds": {
                        "title": "Timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "How long to wait on each request before giving up. Raise it if you see frequent timeouts.",
                        "default": 45
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
