# YouTube Channel Monitor & Scraper — New Videos Only, No API Key (`ntriqpro/youtube-channel-monitor`) Actor

Watch YouTube channels and get only what changed: new videos since your last run, view growth and subscriber movement. No API key, no quota, no browser. Runs that find nothing new cost nothing.

- **URL**: https://apify.com/ntriqpro/youtube-channel-monitor.md
- **Developed by:** [daehwan kim](https://apify.com/ntriqpro) (community)
- **Categories:** Videos, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event + usage

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## YouTube Channel Monitor & Scraper — New Videos Only, No API Key

Watch YouTube channels and get back **only what changed**: videos published since your last run, how their view counts moved, and how the subscriber count shifted.

No API key. No quota. No browser automation — just fast HTTP requests, which is why a run over several channels finishes in seconds.

Built for competitor tracking, creator research and content alerting — anywhere you need to know *when something new goes up* rather than re-downloading the same catalogue every day.

### Nothing new, nothing to pay

Most YouTube scrapers hand you the same videos on every run and bill you for all of them. This one remembers what it already gave you.

- A channel is charged **only when it returns at least one new video**
- Videos delivered in a previous run are **never charged again**
- Unreachable channels and runs that find nothing new cost **nothing**

Your first run has nothing to compare against, so it returns the current videos as a baseline. From the second run onward you get only the difference.

### Why not the official API?

The YouTube Data API gives every project a daily quota that a few hundred channel checks can exhaust, and it requires a Google Cloud project and key management. This actor reads the same public channel pages a visitor sees — no key, no quota, no project setup.

### What you get per channel

| Field | Contents |
|---|---|
| `channel` | Title, channel ID, handle, description, subscriber count, total video count |
| `subscriberGrowth` | Subscriber change since your previous run |
| `newVideos` | How many new videos this run found |
| `videos[]` | Each new video: ID, URL, title, view count, publish time |
| `videos[].viewGrowth` | How much each video's views moved since last time |
| `firstRun` | Whether this was the baseline run for that channel |
| `charged` | Whether this row was billed |

#### Exact view counts

Channel pages round view counts (`60M views`). Set `exactViewCounts: true` and each new video is fetched individually for the precise number — `60,669,379` instead of `60,000,000` — along with its exact publish date, duration, description and keywords.

### Input

```json
{
  "channels": ["@MrBeast", "@NASA", "UCX6OQ3DkcsbYNE6H8uQQuVA"],
  "newVideosOnly": true,
  "trackViewGrowth": true,
  "exactViewCounts": false,
  "maxVideosPerChannel": 30
}
```

Handles, channel IDs and full channel URLs all work. Duplicates and malformed entries are dropped before any work starts, so you are never billed for them.

### Output

```json
{
  "channel": {
    "title": "MrBeast",
    "channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA",
    "handle": "MrBeast",
    "subscribers": 512000000,
    "videoCount": 997
  },
  "subscriberGrowth": 100000,
  "newVideos": 1,
  "videos": [
    {
      "videoId": "Af6i6ChAVTw",
      "url": "https://www.youtube.com/watch?v=Af6i6ChAVTw",
      "title": "Last To Leave Mansion, Keeps It",
      "views": 60669379,
      "publishedText": "3 days ago",
      "isNew": true,
      "viewGrowth": 669379
    }
  ],
  "firstRun": false,
  "charged": true
}
```

### Pricing

| Event | Price | When |
|---|---|---|
| `channel-checked` | $0.002 | A channel returned at least one new video |
| `new-video` | $0.002 | Per new video delivered |

Checking a channel that has nothing new triggers neither event. Watching 10 channels daily, where two of them post once a week, costs a few cents a month.

### Scheduling

This actor is built to run on a schedule. Point it at your channels, run it hourly or daily, and each run hands you just the new material. Combine it with Apify integrations to push new videos straight to Slack, a webhook or a spreadsheet.

### Data sources

Public YouTube channel and video pages only. No login, no cookies, no API key, no browser. The actor stays inside the paths YouTube's `robots.txt` allows and never touches its search, API or player endpoints.

### Your responsibility

Results describe public channels and videos, and may include creator names and descriptions. Make sure your intended use complies with the law in your jurisdiction and with YouTube's own terms. If you are unsure whether your use case qualifies, consult your lawyer.

### Disclaimer

This is an **unofficial** actor. It is an independent tool and is **not affiliated with, endorsed by, or sponsored by YouTube or Google LLC**. All trademarks are the property of their respective owners.

# Actor input Schema

## `channels` (type: `array`):

Channels to watch. Accepts @handles, channel IDs (UC...) or full channel URLs.

## `newVideosOnly` (type: `boolean`):

Return only videos that appeared since your last run. Your first run returns the current list as a baseline, because there is nothing to compare against yet.

## `trackViewGrowth` (type: `boolean`):

Include how much each video's view count moved since the previous run.

## `exactViewCounts` (type: `boolean`):

Channel pages round view counts (60M). Turn this on to fetch the exact number, publish date, duration and description for each new video with one extra request per video.

## `maxVideosPerChannel` (type: `integer`):

Upper limit of recent videos read per channel.

## `maxConcurrency` (type: `integer`):

How many channels to check at the same time.

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

Proxy used to reach YouTube. The default works for most cases.

## Actor input object example

```json
{
  "channels": [
    "@MrBeast"
  ],
  "newVideosOnly": true,
  "trackViewGrowth": true,
  "exactViewCounts": false,
  "maxVideosPerChannel": 30,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "channels": [
        "@MrBeast",
        "@NASA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ntriqpro/youtube-channel-monitor").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 = { "channels": [
        "@MrBeast",
        "@NASA",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ntriqpro/youtube-channel-monitor").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 '{
  "channels": [
    "@MrBeast",
    "@NASA"
  ]
}' |
apify call ntriqpro/youtube-channel-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ntriqpro/youtube-channel-monitor"
        }
    }
}

```

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/SMYDs8aZPOBgYk8VQ/builds/S88erTm07CxifHkyc/openapi.json
