Przejdź do treści
Biblioteka skilli
Dane i analityka · Research

youtube-search

/youtube-search

Wyszukuje filmy na YouTube po słowach kluczowych i zwraca metadane: tytuł, adres, kanał, wyświetlenia i długość, bez kluczy API.

Repozytorium
armory ↗
Licencja
MIT
Ostatnia zmiana repozytorium
26.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
2
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
1
Przestarzałość

Brak sygnałów. Repozytorium zmienione 26.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Wyszukuje filmy na YouTube po słowach kluczowych i zwraca metadane: tytuł, adres, kanał, wyświetlenia i długość, bez kluczy API.

Wyzwalacze z opisu

search youtubefind youtube videostop youtube videos ontrending videos onyoutube results foryt search
Oryginalny opis (EN)

Search YouTube by keyword and return structured video metadata (title, URL, channel, views, duration, date) via yt-dlp. No API keys. Triggers on: "search youtube", "find youtube videos", "top youtube videos on", "trending videos on", "youtube results for", "yt search", "/yt-search".

Jak działa

  1. Prerequisites
  2. Usage
  3. Workflow
  4. Advanced Patterns
  5. Composability
  6. Error Handling
  7. Limitations
Sekcje z nagłówków SKILL.md, w oryginale · 224 linii, 949 słów
Podgląd SKILL.md
---
name: youtube-search
description: 'Search YouTube by keyword and return structured video metadata (title, URL, channel, views, duration, date) via yt-dlp. No API keys. Triggers on: "search youtube", "find youtube videos", "top youtube videos on", "trending videos on", "youtube results for", "yt search", "/yt-search".'
metadata:
  version: 1.1.1
  category: research
  tags: [youtube, search, skill]
  difficulty: beginner
---

# YouTube Search

Search YouTube by keyword and return structured video metadata — title, URL,
channel, views, duration, upload date. Uses `yt-dlp` for scraping with no API
keys or OAuth required.

## Prerequisites

```bash
uv tool install yt-dlp
```

Verify:

```bash
yt-dlp --version
```

## Usage

### Basic Search

```bash
yt-dlp "ytsearch10:claude code skills" --dump-json --flat-playlist --no-warnings 2>/dev/null \
  | jq -r '[.title, .url, .channel, .view_count, .duration_string, .upload_date] | @tsv'
```

- `ytsearch10:` — search YouTube, return 10 results (adjust number as needed)
- `--dump-json` — output metadata as JSON
- `--flat-playlist` — don't download, just list
- `--no-warnings` — suppress non-error output

### Structured JSON Output

```bash
yt-dlp "ytsearch5:claude code mcp servers" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null \
  | jq '{
    title: .title,
    url: .url,
    channel: .channel,
    views: .view_count,
    duration: .duration_string,
    upload_date: .upload_date,
    description: (.description // "" | .[0:200])
  }'
```

### Search with Sorting

yt-dlp does not support server-side sort. To sort by views or date, capture all
results and sort client-side:

```bash
# Sort by view count (descending)
yt-dlp "ytsearch20:AI agents 2026" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null \
  | jq -s 'sort_by(-.view_count) | .[:10][] | {title, url, channel, views: .view_count}'
```

```bash
# Sort by upload date (newest first)
yt-dlp "ytsearch20:claude code tutorial" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null \
  | jq -s 'sort_by(-.upload_date) | .[:10][] | {title, url, channel, upload_date}'
```

### Search Result Count

The number after `ytsearch` controls how many results to fetch:

| Pattern            | Results                                |
| ------------------ | -------------------------------------- |
| `ytsearch5:query`  | 5 results                              |
| `ytsearch10:query` | 10 results (default recommendation)    |
| `ytsearch20:query` | 20 results                             |
| `ytsearch50:query` | 50 results (slow, may hit rate limits) |

**Recommendation:** Fetch 15-20 results, then filter/sort client-side to the top N the user wants. This provides enough data for meaningful sorting without being excessive.

## Workflow

```text
User provides search query
        |
        v
+---------------------+
|  Step 0: Deps check |
+----------+----------+
           v
+---------------------+
|  Step 1: Search     |
|  (yt-dlp ytsearch)  |
+----------+----------+
           v
+---------------------+
|  Step 2: Parse JSON |
|  (jq formatting)    |
+----------+----------+
           v
+---------------------+
|  Step 3: Present    |
|  results to user    |
+---------------------+
```

### Step 1: Execute Search

```bash
yt-dlp "ytsearch${COUNT}:${QUERY}" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null
```

### Step 2: Parse and Format

Extract relevant fields with `jq`. The full metadata object from yt-dlp contains
many fields; the useful subset for search results:

| Field              | Description                                |
| ------------------ | ------------------------------------------ |
| `.title`           | Video title                                |
| `.url`             | Full YouTube URL                           |
| `.channel`         | Channel name                               |
| `.view_count`      | Total views (integer)                      |
| `.duration_string` | Duration as `H:MM:SS` or `MM:SS`           |
| `.upload_date`     | Upload date as `YYYYMMDD`                  |
| `.description`     | Video description (can be long — truncate) |
| `.like_count`      | Likes (may be null)                        |
| `.comment_count`   | Comments (may be null)                     |

### Step 3: Present Results

Format as a markdown table for the user:

```bash
yt-dlp "ytsearch10:${QUERY}" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null \
  | jq -s 'sort_by(-.view_count) | .[] | "| \(.title[:60]) | \(.channel) | \(.view_count) | \(.duration_string) | \(.upload_date) |"' -r
```

Prefix with a header row:

```text
| Title | Channel | Views | Duration | Date |
|-------|---------|-------|----------|------|
```

## Advanced Patterns

### Filter by Duration

```bash
# Only videos longer than 10 minutes (600 seconds)
yt-dlp "ytsearch20:deep dive AI agents" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null \
  | jq -s '[.[] | select(.duration >= 600)] | sort_by(-.view_count) | .[:10][]'
```

### Filter by Recency

```bash
# Only videos from the last 30 days
CUTOFF=$(date -v-30d +%Y%m%d 2>/dev/null || date -d "30 days ago" +%Y%m%d)
yt-dlp "ytsearch20:claude code" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null \
  | jq -s --arg cutoff "$CUTOFF" '[.[] | select(.upload_date >= $cutoff)] | sort_by(-.view_count) | .[]'
```

### Channel-Specific Search

```bash
# Search within a specific channel
yt-dlp "ytsearch10:skills site:youtube.com/c/ChannelName" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null
```

Or use the channel URL directly:

```bash
yt-dlp "https://www.youtube.com/@ChannelName/search?query=skills" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null
```

### Extract URLs Only (for Piping)

```bash
# Get just URLs for feeding into other tools (watch, notebooklm)
yt-dlp "ytsearch10:claude code MCP" \
  --dump-json --flat-playlist --no-warnings 2>/dev/null \
  | jq -r '.url'
```

## Composability

This skill produces URLs and metadata that feed into other skills:

- **watch**: Pass URLs for transcript concepts, timestamped visual evidence, and question-driven video analysis
- **notebooklm**: Pass URLs as sources via `notebooklm source add "URL"`

Example pipeline (manual steps, not automated):

1. `/yt-search` — discover 10 relevant videos
2. User reviews and selects videos
3. Feed selected URLs into `notebooklm source add` or `watch`

## Error Handling

| Error                       | Cause                              | Resolution                               |
| --------------------------- | ---------------------------------- | ---------------------------------------- |
| No results                  | Query too specific or misspelled   | Broaden the search terms                 |
| Empty JSON                  | yt-dlp rate limited by YouTube     | Wait a few minutes, retry                |
| `yt-dlp: command not found` | Not installed                      | `uv tool install yt-dlp`                 |
| Partial results             | Some videos geo-blocked or private | Normal behavior; results are best-effort |
| Timeout                     | Network or YouTube slowness        | Reduce result count or retry             |

## Limitations

- **No server-side sorting**: YouTube search results come in relevance order. Sorting by views or date requires fetching extra results and sorting client-side.
- **Rate limiting**: Aggressive scraping (50+ results, rapid repeated searches) may trigger YouTube rate limits. Space requests apart.
- **Metadata completeness**: Some fields (`.like_count`, `.comment_count`) may be null for certain videos. Always handle nulls in jq filters.
- **No authentication**: Uses public YouTube data only. Age-restricted or private videos are excluded from results.
- **Search relevance**: YouTube's search algorithm determines initial ordering. Results may not match exact expectations.
Pliki w paczce (2)
  • SKILL.md 8 KB
  • evals/cases.yaml 4 KB

Wersje

RepozytoriumWynikLicencja
Ta strona · mathews-tom/armory100MIT
baofeng-tech/agent-skills100MIT
julianobarbosa/claude-code-skills100MIT
henkisdabro/wookstar-claude-plugins100MIT
artemchuikin/youtube-skills95MIT
artemchuikin/youtube-skills95MIT
ZeroPointRepo/youtube-skills95MIT
ZeroPointRepo/youtube-skills95MIT

Migawka bazy z 28.10.2026 · wersja paczki 4e15ea75aaba (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100youtube
    Wyszukuje na YouTube, czyta własny kanał i filmy (statystyki, komentarze) i wysyła nowe filmy przez YouTube Data API v3.
  • 100youtube-research
    Pobiera dane z YouTube przez API Crawlora w formacie JSON: metadane filmów i kanałów, transkrypcje, komentarze i wyniki wyszukiwania.
  • 100youtube-api
    Wyszukuje filmy, kanały i playlisty na YouTube przez fetcher.sh, z filtrami daty, długości i sortowania, z płatnością za zapytanie.
  • 100youtube-full
    Pobiera transkrypcje, wyszukuje filmy, przegląda kanały i playlisty oraz monitoruje kanały YouTube, bez pobierania plików wideo.
  • 100scraping-youtube-videos-by-keyword
    Pobiera filmy z YouTube pasujące do słowa kluczowego wraz z tytułem, kanałem, wyświetleniami, polubieniami i komentarzami.
  • 85youtube-seo
    Optymalizuje filmy YouTube pod wyszukiwanie: tytuł, opis, tagi, miniaturę i widoczność kanału.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.