agentsclimarketplace

Youtube seo keywords

Skill deeployCO/youtube-seo-skills/youtube-seo-keywords

Advanced YouTube keyword and topic research with search-intent classification, Knowledge Graph entity coverage, seasonality curves, refined difficulty scoring, and topic-cluster planning for topical authority. Use when user says "YouTube keywords", "what should I make a video about", "keyword research", or "YouTube topic ideas".From its SKILL.md

Install
npx -y skills add deeployCO/youtube-seo-skills --skill youtube-seo-keywords

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

4 things to look at

  • reads credentialsReads from 1 credential source: `YOUTUBE_API_KEY`.
  • 9 stars9 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.
  • runs commandsInstructs the agent to run 2 commands, including `yt-dlp ytsearch50:{seed}` and 1 more.
  • fetches URLsInstructs the agent to fetch 4 URLs, including https://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q={seed} and 3 more.

SKILL.md

9.0 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it

YouTube Keyword & Topic Research (Advanced)

Process

  1. Capture seed: keyword, channel URL, or niche description. If only a channel URL is provided, extract 5-10 seed topics from:
    • The channel's top 25 videos by views (title + description entities)
    • The channel's topic IDs from channels.list?part=topicDetails
  2. Expand the seed set to 100-300 candidate keywords from first-party sources only (third-party tools like VidIQ, TubeBuddy, Ahrefs, and SocialBlade rate-limit and generate errors — avoid them):
    • YouTube suggest API (https://suggestqueries.google.com/complete/ search?client=firefox&ds=yt&q={seed}) — no key, returns JSON, iterate by appending a-z to the seed for long-tail expansion
    • YouTube Data API search.list?part=snippet&q={seed}&type=video — surface the top 50 ranking titles and mine their titles/tags for co-occurring terms
    • yt-dlp ytsearch50:{seed} as an API-less equivalent
    • Google autocomplete (suggestqueries.google.com/complete/search? client=firefox&q={seed}) for parent-topic discovery
    • User-provided seed list or topic outline
  3. Classify intent for each keyword:
    • Informational ("what is ...", "how does ... work")
    • Tutorial ("how to ...", "... tutorial", "step by step")
    • Commercial / Review ("... review", "best ...", "... vs ...")
    • Entertainment (celebrity names, event names, memes)
    • News / Topical (breaking or time-sensitive)
    • Navigational (brand or channel names) → Each intent class maps to a different video format and surface.
  4. Classify primary surface:
    • Search-dominant: "how to", "tutorial", long-tail specific queries
    • Browse-dominant: broad topics, personalities, trending
    • Suggested-dominant: sits adjacent to an existing popular video
  5. Entity mapping: for each keyword, identify the Knowledge Graph entities involved (people, brands, products, concepts). Group keywords that share entities into topic clusters.
  6. Competition analysis per keyword (top 10 SERP):
    • Median subscriber count of ranking channels
    • Median video age (weeks)
    • Median view count
    • Presence of mega channels (>1M subs) in top 3
    • Thumbnail/title quality median (estimate)
    • SERP features (Shorts shelf, mix shelf, promoted result)
  7. Seasonality: pull Google Trends 5-year curve per keyword cluster. Classify:
    • Evergreen: flat or slowly rising
    • Seasonal: predictable annual peak (gift guides, tax season)
    • Trending: fast-rising, <6 months of data
    • Decaying: fast-dropping
  8. Opportunity scoring (refined formula below)
  9. Cluster keywords into 3-6 topic buckets with a pillar + satellites shape optimized for topical authority
  10. Content calendar (optional) with pillar cadence and reactive slots

Refined Opportunity Formula

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't expose 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 = easier
    
  • channel_fit (0-100): how well the keyword aligns with the channel's existing topical authority
  • entity_overlap_with_channel: % of the keyword's entities already covered 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 existing high-performing channel content (suggested-video pathway)

Weights can be adjusted if the user explicitly wants low-competition or high-volume bias.

Data Sources (priority order — first-party only)

  1. YouTube suggest API (no key, no rate limits in practice): https://suggestqueries.google.com/complete/search?client=firefox&ds=yt&q={seed} — iterate {seed}{a..z} for long-tail expansion
  2. YouTube Data API v3 (search.list, videos.list, channels.list) via YOUTUBE_API_KEY for ranked results, titles, tags, topicDetails
  3. yt-dlp ytsearch50:{query} as an API-less equivalent when no key is set or quota is exhausted
  4. Google Trends (public WebFetch on trends.google.com) for seasonality and relative interest
  5. WebFetch on youtube.com/results?search_query=... for competition analysis when the API is unavailable
  6. User-provided seed list or outline

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.

Output

Keyword Sheet

KeywordIntentSurfaceYT VolDifficultyFitEntity%TrendOpportunity
how to ...TutorialSearch12k428590%Evergreen78
... vs ...CommercialSearch4.2k557265%Evergreen64
... 2026NewsBrowse8k688050%Trending71

Sort by Opportunity descending. Limit to top 30-50.

Topic Clusters (3-6 clusters)

For each cluster, report:

  • Theme: one-sentence description
  • Shared entities: 5-10 Knowledge Graph entities
  • Pillar video: title, format, length, target keyword (highest- opportunity broad keyword in the cluster)
  • Satellite videos: 5-10 specific long-tail follow-ups, each with title + target keyword
  • Suggested playlist: title + description
  • Topical authority contribution: how this cluster strengthens the channel's classification

Intent Mix Chart

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.

Gap vs Channel (when channel URL provided)

  • Keywords competitors cover that the channel does not
  • Entities competitors own that the channel does not reference
  • Format gaps (e.g., no reviews, no tutorials, no comparisons)

Content Calendar (optional, 8-12 weeks)

Alternates:

  • Evergreen pillar (every 3-4 weeks): broad, high-opportunity keyword, long-form, binge-playlist anchor
  • Topical/reactive slot (weekly): trending or news keyword
  • Satellite fill (weekly): specific long-tail serving the pillar

Seasonality Calendar

Report any Seasonal-classified keywords with their peak windows so the user can plan 4-6 weeks ahead of each peak.

Integration

  • Hand off top keywords to youtube-seo-optimize for metadata generation
  • Hand off cluster plan to youtube-seo-channel for playlist structure
  • Hand off competitor-entity gaps to youtube-seo-competitor for deeper analysis

Error Handling

ScenarioAction
No API key AND WebFetch blockedFall 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-runCache 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 volumeResearch category terms and comparison keywords instead
Trending keyword with <2 weeks of dataFlag as unstable; suggest pairing with an evergreen pillar
Google Trends returns emptySkip seasonality classification for that keyword — do not guess the curve

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most marketing audience skills give in ~2.2k tokens

Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07

  • Apply Poppins font to headingsin 41 of 690, across 6 files
  • Apply Lora font to body textin 41 of 690, across 6 files
  • Use Arial fallback for headingsin 39 of 690, across 4 files
  • Use Georgia fallback for body textin 39 of 690, across 4 files
  • Maintain text hierarchy and formattingin 39 of 690, across 4 files
  • Use accent colors for non-text shapesin 38 of 690, across 3 files
  • Use RGB values for precise color matchingin 38 of 690, across 3 files
  • Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
  • Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
  • Use active voice instead of passive voicein 26 of 690, across 10 files
  • Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
  • Prioritize clarity over clevernessin 22 of 690, across 8 files

Said here and by no other author read

  • identify knowledge graph entities for keywords
  • analyze top ten search results for competition metrics
  • pull five year seasonality curve per keyword cluster
  • score opportunity using provided formula
  • group keywords into pillar and satellite topic buckets
  • sort keyword sheet by opportunity descending

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.