Youtube idea finder
Skill ErickRamirezAU/claude-skills/claude-skills/skills/youtube-idea-finder
Free add-ons for Claude AI that teach it new tricks — like finding hidden-gem YouTube videos or turning PDFs and Word docs into clean, editable text. No coding needed to use them.
npx -y skills add ErickRamirezAU/claude-skills --skill youtube-idea-finderAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Finds YouTube videos that are "overperforming" for their channel size — high view counts from small/under-the-radar channels — for a given topic or search term. Use this whenever the user wants to find hidden-gem, underrated, or viral-outlier YouTube videos in a niche; wants examples of small creators who "went viral" or beat the algorithm on a specific topic; is scouting a niche for content strategy, competitor research, or collaboration ideas; or asks to search YouTube and filter results by view count, subscriber count, or a views-to-subscribers ratio. Trigger even if the user doesn't use the words "ratio" or "subscribers" explicitly — phrases like "find me small channels that blew up talking about X" or "what videos are punching above their weight for [topic]" describe the same task.
SKILL.md
8.2 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it
YouTube Idea Finder
Idea and name credit: inspired by Shane Hummus's YouTube videos on channel strategy and finding proven video ideas — this skill automates that "find videos overperforming their channel size" research.
Find videos on a given topic where the view count is large relative to the
channel's subscriber count — a signal that a small or unknown creator produced
something that broke out beyond their usual audience. This uses the YouTube
Data API v3 (search.list, videos.list, channels.list) via a bundled
script, so results are exact numbers straight from the API rather than
scraped or estimated.
Inputs
The only thing the user is required to give you is the search term (the topic/niche). Everything else has a sensible default, and you should state the defaults you're using up front so the user can redirect you if they actually wanted something different:
| Parameter | Default | Notes |
|---|---|---|
| Minimum views | 100,000 | The "overperformance" floor |
| Maximum subscribers | 100,000 | Keeps results to small/mid channels |
| Minimum views : subscribers ratio | 5 : 1 | The core "punching above their weight" signal |
| Number of candidates to find | 5 | Stop once you hit this many |
| Max search pages | 5 | Quota safety cap — see Quota below |
If the user gives you different numbers, use theirs instead. If the script exhausts search results or hits the search-page cap before reaching the requested count, report however many qualifying videos it actually found — don't re-run with ever-looser queries trying to force a full set.
Getting an API key
If the user doesn't already have YOUTUBE_API_KEY set (see Tooling below),
walk them through this rather than assuming they know it:
- Go to the Google Cloud Console and create a project (or pick an existing one).
- Enable the YouTube Data API v3 for that project.
- Go to APIs & Services → Credentials → Create Credentials → API key.
- Optionally restrict the key to the YouTube Data API v3 (recommended, but not required for this to work).
Google's own walkthrough covers this in more detail: Registering an application (YouTube Data API).
Cost: this is free. No billing account or credit card is required for the default quota — Google caps it at 10,000 quota units/day per project, which resets daily. A typical run of this skill (search + candidate lookups) costs roughly 200–550 units depending on how many search pages it needs (observed: ~510 units for a 5-page run), so the daily quota comfortably covers dozens of runs before you'd ever hit the cap.
Setting the key as an environment variable:
- macOS/Linux (zsh, the default on modern macOS): add it to
~/.zshenv(this file is sourced for every shell, including non-interactive ones that scripts run under, so it's more reliable here than~/.zshrc):
Then open a new terminal, or runexport YOUTUBE_API_KEY="your-key-here"source ~/.zshenvin the current one. - Windows: in PowerShell, run:
setx YOUTUBE_API_KEY "your-key-here"setxpersists it for future sessions but not the current one — close and reopen the terminal (or restart the app running Claude) before it takes effect. Alternatively, set it via System Properties → Environment Variables in the Windows GUI.
Tooling
This requires YOUTUBE_API_KEY to be set in the environment (see Getting an
API key above) and the YouTube Data API v3 to be enabled for that key's
Google Cloud project. If a call fails because the key is missing or
invalid, or the key's quota is exhausted, the script reports this clearly on
stderr with a non-zero exit — relay that message to the user rather than
attempting a workaround (there is no scraping fallback anymore).
Run the script with Bash:
python3 ~/.claude/skills/youtube-idea-finder/scripts/youtube_idea_finder.py \
--query "<search term>" \
--min-views <N> --max-subs <N> --min-ratio <N> --count <N> --max-pages <N>
It prints one JSON object to stdout:
{
"query": "...",
"thresholds": {"min_views": ..., "max_subs": ..., "min_ratio": ..., "count": ...},
"candidates": [
{
"title": "...", "video_id": "...", "url": "...",
"views": 0, "channel_id": "...", "channel_title": "...",
"subscribers": 0, "ratio": 0.0
}
],
"pages_searched": 0,
"quota_used_estimate": 0,
"stopped_reason": "reached_count | max_pages_reached | results_exhausted"
}
candidates is already filtered against all thresholds, Shorts-excluded, and
sorted by ratio descending — you don't need to re-check the numbers, just
format them (see Output format below).
Quota
search.list costs 100 quota units per page (50 results); videos.list and
channels.list cost 1 unit per call regardless of batch size (up to 50 IDs
batched per call). The default free quota is 10,000 units/day, so search
pages are the only part worth budgeting — the script defaults to
--max-pages 5 (≈500 units, ~510 observed in practice) so one run can't
consume the whole daily quota. Mention quota_used_estimate from the result
if the user seems to be running this repeatedly in a day, so they can judge
how much headroom is left.
Raise --max-pages only if the user explicitly asks for a broader search or
a larger --count than 5 pages is likely to satisfy — don't raise it
speculatively.
Shorts handling
The API has no official "is this a Short" field. The script filters using
contentDetails.duration: any video ≤3 minutes is treated as a Short and
discarded before it ever reaches the candidate list, matching YouTube's own
Shorts duration ceiling. This is a heuristic, not a certainty — if a
result's legitimacy is in doubt (e.g. the user questions a specific result),
you can spot-check by opening https://www.youtube.com/watch?v=<video_id>
or noting the duration next to the title, but don't re-verify every
candidate by default; the script already applied this filter to everything
it returned.
Workflow
1. Post a quick overview before running the script
State the search term and the thresholds you'll apply (say plainly whether each is the default from the table above or a number the user gave you). Since a wrong assumption means re-running the search (and spending quota again), it's worth a beat to confirm before running.
2. Run the script
Invoke it via Bash with the query and thresholds. If it exits non-zero, relay the stderr message directly — don't retry blindly or invent a workaround.
3. Report the results
Take the candidates array from the JSON output and present it as the table
below. If stopped_reason is "max_pages_reached" or "results_exhausted"
and fewer candidates were found than requested, say so explicitly rather
than silently returning a shorter list. If "max_pages_reached", mention
that raising --max-pages (at the cost of more quota) could turn up more.
Output format
Report results as a markdown table, most-notable (highest ratio) first:
| Title | Views | Subscribers | Channel | Ratio | Link |
|---|---|---|---|---|---|
| ... | ... | ... | ... | ...:1 | link |
Briefly note any thresholds you used that weren't explicitly stated by the
user, and if you stopped short of the requested count, say so plainly along
with the reason (results_exhausted vs max_pages_reached).