Advanced YouTube Search. A client-side, single-page interface to the YouTube Data API v3 that exposes every filter the API offers in one place. Search videos, channels and playlists; narrow by date, region, language, duration, definition, license, category and more; then refine locally by views, likes, comments and length. Black/white terminal aesthetic. No server, no build step, no tracking.
▶ Live site: https://flazeiguess.github.io/zerodig/
Open it, paste a free YouTube Data API key, and search. Everything runs in your browser; nothing is stored on a server.
Native search.list parameters (server-side):
| Filter | Options |
|---|---|
query q |
free text with "exact phrase", `a |
| type | video · channel · playlist · all |
| order | relevance · date · rating · view count · title · video count |
| published after / before | any date window |
| region · language | ISO country + language codes |
| safe search | moderate · none · strict |
| within channel | restrict to a channel id |
| duration | short (<4m) · medium (4-20m) · long (>20m) |
| definition | HD · SD |
| dimension | 2D · 3D |
| captions | has captions · none |
| license | standard YouTube · Creative Commons |
| video type | movie · episode |
| category | Music, Gaming, Education, News … |
| event | live · upcoming · completed |
| embeddable · syndicated · paid promotion | yes / any |
| location + radius | geo search around a lat,lng |
| results per page | 1-50 |
Local post-filters (client-side, what the API can't do):
- min / max views
- min likes
- min / max length (seconds)
- re-sort results by views ↑/↓, likes, newest, oldest, longest, shortest
The API can't filter or sort by view count, likes or exact length, so the app runs a two-stage workflow, client-side:
search.listwith your native filters (100 quota units / page, up to 50 ids).- Enrich each page depending on result type:
videos.list(statistics + contentDetails),channels.list(subscribers, video count) orplaylists.list(item count), 1 unit each. - Filter & sort the enriched results locally by views, likes and length.
- Auto-page: follow
nextPageTokenuntil it hits your dig depth or stop-after target. Load more continues from where it stopped.
The live console prints every page fetched and the running quota cost.
- Open the live site.
- Get a free API key (below) and hit Save.
- Type a query, pick a type, tune filters, and hit Search.
- Go to the Google Cloud Console.
- Create a project, then APIs & Services -> Library -> enable YouTube Data API v3.
- Credentials -> Create credentials -> API key.
- Paste it into the app and hit Save (stored in your browser's
localStorage).
Because this is a static site, the key sits in your browser and travels only to Google, but anyone who opens the deployed page and views the network tab could read it while you use it. Protect it:
- Application restriction -> HTTP referrers -> add the Pages domain:
https://flazeiguess.github.io/zerodig/* - API restriction -> restrict the key to YouTube Data API v3 only.
- Daily quota is 10,000 units/day. A
searchpage is 100 units + up to 3 to enrich; a depth-3 run is roughly 309 units. The status bar tracks today's usage.
If you ever want the key fully hidden, move the fetch calls behind a tiny proxy (Cloudflare Worker / Django) that holds the key server-side. The frontend logic stays identical.
Plain HTML/CSS/JS. Any static server works:
python -m http.server 8000
# or
npx serve .Then open http://localhost:8000.
Already published to Pages from main at
https://flazeiguess.github.io/zerodig/. To reproduce on a fork:
- Push the files to a repo.
- Settings -> Pages -> Source: Deploy from a branch ->
main/root. - The included
.nojekyllfile serves everything as-is. - Add your own Pages domain to the API key's referrer restriction (above).
Assets are versioned with a
?v=query so a redeploy busts the browser cache. Bump it (e.g.app.js?v=3) inindex.htmlwhen you ship changes.
| File | Role |
|---|---|
index.html |
structure |
tokens.css |
design tokens (colour, type, space, motion) |
style.css |
terminal styling |
app.js |
search, enrichment, filtering, paging |
.nojekyll |
serve raw on GitHub Pages |
- Video-only attributes (duration, definition, category …) apply to
type = videoand hide for channel / playlist searches. - View / like / length filters apply to video results; channels and playlists pass through unfiltered.
- Videos with hidden statistics show
n/aand are excluded when a numeric view filter is active (they can't be verified). - Everything is grayscale on purpose except the thumbnails, which show in full colour.