youtube-seo-keywords — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited youtube-seo-keywords (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
a channel URL is provided, extract 5-10 seed topics from:
channels.list?part=topicDetailsfirst-party sources only (third-party tools like VidIQ, TubeBuddy, Ahrefs, and SocialBlade rate-limit and generate errors — avoid them):
search?client=firefox&ds=yt&q={seed}) — no key, returns JSON, iterate by appending a-z` to the seed for long-tail expansion
search.list?part=snippet&q={seed}&type=video— surface the top 50 ranking titles and mine their titles/tags for co-occurring terms
ytsearch50:{seed} as an API-less equivalentclient=firefox&q={seed}`) for parent-topic discovery
→ Each intent class maps to a different video format and surface.
entities involved (people, brands, products, concepts). Group keywords that share entities into topic clusters.
Classify:
shape optimized for topical authority
slots
opportunity = (0.30 * log(volume + 1)) +
(0.25 * (100 - difficulty)) +
(0.15 * channel_fit) +
(0.15 * entity_overlap_with_channel) +
(0.10 * freshness_bonus) +
(0.05 * session_chain_bonus)volume: YouTube monthly searches (estimated — YouTube doesn'texpose this directly). Use one of these native-only proxies, in order: (a) YouTube suggest rank depth (keywords that appear at position 1-3 across a-z expansions = high demand); (b) total result count from search.list?q={kw}&type=video + median views of the top 10 as a demand proxy; (c) Google Trends relative interest via WebFetch on trends.google.com/trends/api/explore. Never fabricate a volume number — label it "low/med/high" when the only evidence is ordinal
difficulty (0-100): derived from competition analysis — difficulty = (0.35 * normalize(median_subs)) +
(0.25 * normalize(median_views)) +
(0.20 * mega_channel_top3_flag) +
(0.10 * thumbnail_title_quality) +
(0.10 * (1 - median_age_weeks / 104)) # newer rankings = easierchannel_fit (0-100): how well the keyword aligns with the channel'sexisting topical authority
entity_overlap_with_channel: % of the keyword's entities alreadycovered by the channel's existing content
freshness_bonus: 10 if Trending, 5 if Seasonal peak within 60 days,0 if Evergreen, -10 if Decaying
session_chain_bonus: 5 if the keyword sits adjacent to existinghigh-performing channel content (suggested-video pathway)
Weights can be adjusted if the user explicitly wants low-competition or high-volume bias.
https://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q={seed} — iterate {seed}{a..z} for long-tail expansion
search.list, videos.list,channels.list) via YOUTUBE_API_KEY for ranked results, titles, tags, topicDetails
key is set or quota is exhausted
trends.google.com) forseasonality and relative interest
competition analysis when the API is unavailable
Third-party analytics (VidIQ, TubeBuddy, Ahrefs, SocialBlade, NoxInfluencer) are intentionally excluded — they rate-limit or error. If the user volunteers a CSV from one of these, it is OK to read it, but never instruct the user to go acquire one.
| Keyword | Intent | Surface | YT Vol | Difficulty | Fit | Entity% | Trend | Opportunity |
|---|---|---|---|---|---|---|---|---|
| how to ... | Tutorial | Search | 12k | 42 | 85 | 90% | Evergreen | 78 |
| ... vs ... | Commercial | Search | 4.2k | 55 | 72 | 65% | Evergreen | 64 |
| ... 2026 | News | Browse | 8k | 68 | 80 | 50% | Trending | 71 |
Sort by Opportunity descending. Limit to top 30-50.
For each cluster, report:
opportunity broad keyword in the cluster)
title + target keyword
channel's classification
Report the intent distribution of the recommended keywords:
Tutorial: 40% ████████
Commercial: 25% █████
Informational: 20% ████
Entertainment: 10% ██
News: 5% █Flag if the mix is mismatched with the channel's current format strength.
Alternates:
keyword, long-form, binge-playlist anchor
Report any Seasonal-classified keywords with their peak windows so the user can plan 4-6 weeks ahead of each peak.
youtube-seo-optimize for metadata generationyoutube-seo-channel for playlist structureyoutube-seo-competitor for deeperanalysis
| Scenario | Action |
|---|---|
| No API key AND WebFetch blocked | Fall back to yt-dlp ytsearch50: + suggest API (both key-less); if still failing, ask the user for 5-10 seed keywords directly |
| API quota exhausted mid-run | Cache partial results, switch remaining expansion to yt-dlp + suggest API, continue |
| Niche too narrow (no volume data) | Pivot to broader parent topic, report the gap, score as "low demand, qualitative only" |
| Brand/product name with no search volume | Research category terms and comparison keywords instead |
| Trending keyword with <2 weeks of data | Flag as unstable; suggest pairing with an evergreen pillar |
| Google Trends returns empty | Skip seasonality classification for that keyword — do not guess the curve |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.