YouTube Channel Monitor — New Upload Tracker
Watch YouTube channels and get only their new uploads: title, URL, publish date, views, thumbnail. $0.01 per new video.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
channels,maxResultsPerChannel,onlyNewSinceLastRun(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.01 per new video detected = $10 per 1,000
| You are charged for | When | Price |
|---|---|---|
| New video detected | One new video found on a watched channel. | $0.01 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-06-11, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
channels | YouTube channels to monitor, any mix of channel URLs, @handles, or UC… IDs (e.g. @MrBeast, https://youtube.com/@veritasium, UCX6OQ3DkcsbYNE6H8uQQuVA). | array |
maxResultsPerChannel | How many of the channel's latest uploads to check each run. | integer |
onlyNewSinceLastRun | Remember seen video IDs across runs and return only newly-found videos (turns this into an upload trigger). | boolean |
maxVideoAgeHours | Skip videos older than this many hours. 0 = no age limit. | integer |
minDurationSeconds | Skip videos shorter than this. 0 = no limit. | integer |
maxDurationSeconds | Skip videos longer than this. 0 = no limit. | integer |
shortsOnly | Return only Shorts (≤185s). | boolean |
longFormOnly | Return only long-form videos (>185s). | boolean |
youtubeApiKey | Optional. Without a key the actor reads each channel's upload list: the last 15 uploads, with exact lengths, and times and view counts rounded the way YouTube shows them (estimated: true). A key gives exact times, the description and up to 50 uploads per channel. | string |
What you get
A structured dataset — each result includes fields like:
channelIdchannelTitlepublishedAttitleurlvideoIddurationSecondsisShortviewCountExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
17 ready-to-run use cases
YouTube Competitor Tracking: New Uploads on a Schedule
A watchlist of rival channels checked on a schedule, returning only what is new. Upload cadence and titles, without watching the channels yourself.
YouTube Upload Notification to Discord or Slack
Each run returns only videos it has not seen before, so an Apify integration can push them into a Discord or Slack channel as they land.
Long Form YouTube Videos: Find New Ones to Clip
Feeds a clip-to-Shorts pipeline with new 10-minute-plus uploads, sorted by each video's actual length. Works without an API key.
YouTube Unboxing Channels: Watch for New Review Videos
New long-form uploads from review channels the day they land. Shorts are left out by length, and no API key is required.
Crypto YouTube Channels: Same-Hour New Video Alerts
Watches the big crypto channels and returns only videos posted in the last six hours, so a scheduled run reads as an alert rather than a backlog.
New YouTube Videos Today From a Set of Channels
Everything a group of news channels posted in the last 24 hours, in one run. The source feed for a morning digest: title, URL, views, publish time.
Viral YouTube Shorts: Track New Ones From Your Niche
Set to Shorts under a minute, checked against each video's length. Upload times are YouTube's rounded ones unless you add an API key.
YouTube Sponsorship Deals: Catch New Sponsored Videos
Watches creators for new uploads over five minutes to feed a sponsor-detection step. The length filter works without an API key.
Best YouTube Channels to Learn Programming: New Videos
Watches teaching channels for new tutorials over 20 minutes, going by each video's length. You do not need a YouTube Data API key.
New Podcast Episodes on YouTube, Filtered by Length
Catches hour-plus episodes and skips the clip reposts, using each upload's real length. Runs fine without an API key.
Gaming YouTube Channels: New Uploads and Stream VODs
Returns 30-minute-plus uploads and stream replays. Length is read for every video, so no YouTube Data API key is needed.
YouTube Video Monitoring: Daily Digest of a Watchlist
One scheduled run collects yesterday's uploads across every channel on your list: title, URL, views, publish time and thumbnail per video.
YouTube Channel New Upload Feed for One Creator
Every new video and Short from a single channel on a schedule: title, URL, views, publish time and thumbnail. It skips what it has already seen.
Finance YouTube Channels: Track New Uploads by Length
Watches finance channels for new videos over eight minutes, filtered on each upload's length. An API key only makes the times exact.
MrBeast New Video Trigger: Fires on Each New Upload
Watches the MrBeast channel and returns title, URL, views, publish time and thumbnail for anything new, skipping what it has already reported.
Tech YouTube Channels: Monitor MKBHD, LTT and More
Checks a set of tech channels at once and hands back only the videos you have not seen, with title, URL, views, publish time and thumbnail.
YouTube Shorts Tracker for a Single Channel
Set to Shorts only: new uploads of 185 seconds or less, judged on each video's real length. No YouTube Data API key needed.
Ready-made automation using this tool
A finished workflow you can import into n8n and run — this tool does the data-gathering inside it. Free, and yours to change.
Get a short summary whenever a channel uploads
Watches the YouTube channels you pick. When one uploads, it reads the transcript, writes a few lines on what the video actually covers, and posts that to Slack, Notion or a spreadsheet — so you can decide whether to watch it.
Related tools in YouTube & Creator Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
YouTube Video & Audio Downloader
Download YouTube videos as MP4 up to 8K, audio as MP3 or subtitles as .srt. No login or API key. You pay per megabyte delivered.
YouTube Video Uploader
Upload videos to your YouTube channel from a URL with OAuth. Set title, tags, category, thumbnail, privacy and publish time. $0.05 per upload.
AI Viral Clip Cutter — Long Video to Shorts
Turn a long podcast or interview into ranked vertical clips. AI scores each moment and captions follow every word. $0.20 per clip row, samples included.
AI Text-to-Speech Voiceover
Turn any script into an AI voiceover file: MP3, WAV, Opus or AAC. Pick the voice, speed and format. $40.00 per 1,000 voiceovers ($0.04 each).
Video & Audio Transcriber — Word-Level + SRT/VTT
Transcribe any video or audio URL with word-level timestamps. Download SRT, VTT and TXT. The language is found for you. $0.02 per transcribed minute.
AI Character Reference Bank
Make a consistent AI character reference set. You get portrait, 3/4, full body, side and expression sheets, plus a character-bible prompt.
Where this tool sits
- Categories
- YouTube & Creator Tools Monitors & Alerts
- Platforms
- YouTube
YouTube Upload Monitor: only the videos a channel has posted since your last check
Give it a list of channels and it returns the uploads it has not seen before. Run it again an hour later and you get only what went up in between, which most of the time is nothing at all. Video ids are remembered between runs, so nobody hands you the same recent-uploads list over and over.
Watch the first run. It has no memory yet, so it reports every recent upload it can see for every channel on your list, and each of those rows is billed. Set maxVideoAgeHours before that first run if you want a ceiling on it.
| Input | Channel links, @handles or UC ids |
| Output | One row per newly seen upload |
| Ceiling | 15 recent uploads per channel, or up to 50 with your own API key |
| Account needed | None. A YouTube Data API key is optional and makes upload times and view counts exact |
| Price | $0.01 per new video reported |
🔔 What YouTube Upload Monitor does
Each run resolves your channels, reads their latest uploads, drops anything it has already reported, and writes what is left to the dataset. Delivered ids go into a named key-value store called yt-monitor-seen, which holds the last 10,000 and lives on your own Apify account.
That store is shared by every run, task and schedule of this actor on your account. One watch list on one schedule is the arrangement that behaves. Two schedules covering the same channels share one memory, and overlapping runs can lose an update and report it again on the next poll.
sourceInput carries the channel string exactly as you typed it, so you can join results back to your watch list. detectedAt is when this run found the video, which is not publishedAt.
📥 What you give it
{
"channels": ["@MrBeast", "https://youtube.com/@veritasium", "UCX6OQ3DkcsbYNE6H8uQQuVA"],
"onlyNewSinceLastRun": true,
"maxVideoAgeHours": 48
}
| Field | Default | What it is |
|---|---|---|
channels | none | Required. Channel links, @handles or bare UC ids, mixed freely. |
onlyNewSinceLastRun | true | Skip ids reported in earlier runs. Turn it off to get the recent list every time, and pay for it every time. |
maxVideoAgeHours | 0 | Drop anything older than this many hours. 0 means no age limit. |
maxResultsPerChannel | 10 | How far back to look per channel, 1 to 50. Needs an API key. |
minDurationSeconds, maxDurationSeconds | 0 | Duration window in seconds. 0 means no limit. Works with or without a key. |
shortsOnly, longFormOnly | false | Split on the 185 second boundary. Setting both returns nothing. |
youtubeApiKey | none | Optional, stored as a secret. Your own key, spending your own Google quota. |
Start it with channels empty and the run fails rather than returning a polite row.
📤 What you get back
A real row from a real run without an API key:
{
"videoId": "VKlulHwMxgU",
"title": "What happens when you open the valve?",
"url": "https://www.youtube.com/watch?v=VKlulHwMxgU",
"channelId": "UCHnyfMqiRRG1u-2MsSQLbXA",
"channelTitle": "Veritasium",
"publishedAt": "2026-09-25T05:58:28.768Z",
"durationSeconds": 94,
"isShort": true,
"viewCount": 873000,
"thumbnail": "https://i.ytimg.com/vi/VKlulHwMxgU/hqdefault.jpg",
"description": null,
"estimated": true,
"sourceInput": "@veritasium",
"detectedAt": "2026-09-26T05:58:28.768Z"
}
| Field | What it is |
|---|---|
publishedAt | An ISO timestamp. Exact when estimated is false. When it is true, it was worked out from YouTube's own "1 day ago" label, so the upload can be up to one of those units older. null when YouTube gives no time, as for a scheduled premiere. |
durationSeconds, isShort | Exact, with or without a key. null only in the rare run where a channel's upload list could not be read and YouTube's feed, which carries no length, stood in. |
viewCount | A number, and a snapshot of a video that is minutes old. Rounded the way YouTube shows it ("873K views") when estimated is true. |
estimated | false when the time and view count are exact, true when they come from YouTube's rounded labels. |
sourceInput, detectedAt | Your original channel string, and when this run noticed the video. |
description | The upload description with an API key. Without one it is null, because the upload list carries none. |
🧾 Reading the output
Every dataset row is a newly seen video. There are no sample rows and no diagnostic rows mixed in: notices such as FILTER_NOT_APPLIED are written to a SAMPLE_AND_NOTICES record in the key-value store instead, so they cannot be mistaken for data and cannot bill.
A channel that fails to resolve is logged as a warning and skipped, and the rest of the list carries on. That means a typo in one handle shows up in the run log rather than in your rows, so check the log the first time you add channels. If no channel on the list can be read, the run fails with a CHANNELS_NOT_READ notice rather than ending empty, which would read as "nothing new".
Without an API key every row is estimated: true. Add a key if your pipeline needs exact times.
▶️ How to run it
1. Open YouTube Upload Monitor and click Try for free. 2. Paste channels into Channels, one per line. 3. Set Max video age (hours) for the first run, so it does not report the whole backlog. 4. Click Start, then schedule it from the actor's Schedules tab once you are happy. 5. Point a run-finished webhook at Slack, a Zap or your own endpoint. Each run holds only the new ones, so the dataset is the payload.
💰 How much does it cost?
$0.01 per new video reported.
A poll that finds nothing new writes no rows, so watching twenty channels every fifteen minutes stays cheap and you pay on the polls that find something. The notices in the key-value store are never charged.
The first run is the expensive one, because everything is new to it. maxVideoAgeHours is the control.
💡 What people use it for
- Posting into Slack the moment a competitor publishes, without anyone watching a feed.
- Kicking off a pipeline on upload: pass
videoIdto a transcript or comments actor and have the
summary waiting.
- Keeping a dated record of what a set of channels shipped. Poll hourly and even an estimated
publishedAt is right to the hour.
- Watching a client's own channel so a missed upload does not go unnoticed for a week.
🚧 What it does not do
- Without a key you get the last 15 uploads per channel.
maxResultsPerChannelis ignored. - Without a key, times are estimates. Upload times and view counts come from YouTube's rounded
labels, marked estimated: true, and there is no description.
- A row with no length skips the length filters. That only happens when a channel's upload list
cannot be read and YouTube's feed stands in; the row comes back unfiltered and a FILTER_NOT_APPLIED notice says so.
isShortis a duration test, 185 seconds or less, not YouTube's own Shorts surface. A short
video that is not a Short reads as one.
- The memory holds 10,000 ids. Past that the oldest fall off and could in theory be reported
again.
- It is a trigger, not a tracker.
viewCountis captured once, at detection. - No second opinion on a channel it cannot resolve. It is skipped with a log warning, not a row.
- One watch list per account behaves best, because the seen-ids memory is shared across every
run, task and schedule of this actor on your account.
🧭 Which YouTube actor do you need?
| If you want | Use |
|---|---|
| Only what is new since the last check | This one |
| A channel's whole upload list, every run | YouTube Channel Scraper |
| Keyword search results as well as channels | YouTube Scraper |
| A channel's Shorts, with exact view and like counts | YouTube Shorts Scraper |
| The new video's transcript | YouTube Transcript Scraper |
❓ Questions people ask
Do I need a YouTube Data API key? No. The channel's upload list is enough for "tell me when they upload", lengths included. A key gives exact times, the description and deeper history, on your own Google quota.
Where is the seen-ids memory kept? In a named key-value store called yt-monitor-seen on your own Apify account, holding the last 10,000 ids.
How do I reset it? Turn onlyNewSinceLastRun off for one run to get the current list regardless, or clear the seen-ids record in that store.
How often should I run it? As often as you want the alert. A poll that finds nothing writes no rows.
Why did my first run return so much? It had no memory yet. Use maxVideoAgeHours to bound it.
Is scraping YouTube legal? This reads public channel upload lists, nothing signed in. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Include the channels you were watching and the run ID, and the log is enough for us to see what happened.