YouTube Channel Scanner Tools — Find Which Videos Can Be Clipped

:clapper_board: YouTube Scanner Tools for Content Creators — Check Clip Status Fast

Here’s the ugly truth: YouTube doesn’t want you to know this easily.

There’s no official “hey, can I clip this?” button in their API. They buried it. On purpose. But we’re not here to play by their rules.

:world_map: One-Line Flow: Grab video IDs from a channel → check if clips are allowed → profit (or cry, depending on the creator’s settings).


:fire: Why Should You Care?

  • You’re a content creator hunting for clips to react to
  • You run a clips channel and need to scan 500 videos fast
  • You’re just nosy (valid)

Either way, doing this manually is pain. Let’s automate the suffering.


:hammer_and_wrench: The Tools That Actually Work

🐍 Python Route (For the Copy-Paste Warriors)

innertube — YouTube’s Secret Backdoor

YouTube has a hidden API called InnerTube. It powers everything — the app, the website, your grandma’s smart TV. And someone made it easy to use:

pip install innertube
import innertube
client = innertube.InnerTube("WEB")
data = client("player", body={"videoId": "dQw4w9WgXcQ"})
print(data)  # welcome to the matrix

No API key. No quota. Just vibes.

:backhand_index_pointing_right: https://github.com/tombulled/innertube


youtube_extract — Dump an Entire Channel to Excel

Want every video’s metadata from a channel in a nice spreadsheet? Done.

pip install youtube_extract
youtube_extract "https://youtube.com/@MrBeast" -e xlsx

Boom. You now have a file your boss would be proud of (if your boss was a data hoarder).

:backhand_index_pointing_right: https://github.com/dbeley/youtube_extract

⚡ JavaScript Route (For the Browser Goblins)

YouTube.js — The God-Tier Library

135k+ stars on GitHub. Works everywhere. No API key needed. This thing reverse-engineered YouTube’s entire internal system.

import { Innertube } from 'youtubei.js';
const yt = await Innertube.create();
const video = await yt.getInfo('VIDEO_ID');
console.log(video);

:backhand_index_pointing_right: https://github.com/LuanRT/YouTube.js


IYoutube — “The Dirty API Client”

That’s literally what they call it. It pulls data from YouTube TV’s leaked keys. Chaotic. Beautiful.

:backhand_index_pointing_right: https://github.com/ToBiDi0410/IYoutube

🧪 Browser Console Hack (Zero Install, Instant Results)

Go to any YouTube video. Press F12. Click Console. Paste this:

// Check if clip button exists
!!document.querySelector('[aria-label*="Clip"]')

Returns true = clips allowed. Returns false = nope.

Want the full video metadata? Paste this instead:

window.ytInitialPlayerResponse

That’s everything YouTube knows about the video. Age restrictions, availability, the works.

🤖 Bulk Scanning (For the Unhinged)

yt-dlp — The Swiss Army Knife

Extract every video ID from a channel without downloading anything:

yt-dlp --flat-playlist --print "%(id)s" "https://youtube.com/@ChannelName" > ids.txt

Then check each one’s metadata:

yt-dlp --print "%(id)s|%(title)s|%(age_limit)s|%(duration)s" "VIDEO_URL"

Fields that scream “no clips for you”:

  • age_limit > 0 → Age-restricted = no clips
  • duration < 120 → Too short for clips
  • live_status = “is_live” → Can’t clip a live stream, obviously

:backhand_index_pointing_right: https://github.com/yt-dlp/yt-dlp


Puppeteer + Stealth — The Nuclear Option

When you need to check thousands of videos and nothing else works:

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());

async function canClip(videoId) {
  const browser = await puppeteer.launch({ headless: 'new' });
  const page = await browser.newPage();
  await page.goto(`https://youtube.com/watch?v=${videoId}`);
  const clipBtn = await page.$('[aria-label*="Clip"]');
  await browser.close();
  return !!clipBtn;
}

This actually loads the page like a real human and checks if the clip button exists. Slow but bulletproof.


:prohibited: What Kills the Clip Button?

YouTube disables clips when:

Condition Detectable?
Made for Kids :white_check_mark: Yes — madeForKids in API
Age-restricted :white_check_mark: Yes — age_limit in yt-dlp
Under 2 minutes :white_check_mark: Yes — check duration
Currently live :white_check_mark: Yes — live_status
Stream over 8 hours :white_check_mark: Yes — duration
Creator turned it off :cross_mark: Nope — gotta check the DOM
Copyright claim :warning: Sometimes — inconsistent

The only 100% reliable way to know is checking if the actual clip button renders on the page. Everything else is educated guessing.


:hole: Rabbit Hole Resources


:brain: Summary for the Impatient

  1. Quick check? → Browser console: !!document.querySelector('[aria-label*="Clip"]')
  2. One video’s full data?yt-dlp --dump-json "VIDEO_URL"
  3. Whole channel scan?yt-dlp --flat-playlist → loop through IDs
  4. Industrial scale? → Puppeteer with stealth plugin
  5. Python vibes?innertube or youtube_extract

Now go forth and scan responsibly. Or irresponsibly. I’m not your mom.

4 Likes