Tracklist
Extract tracklists from DJ sets on YouTube.
Export matched songs to Spotify.
The Problem
You hear a track in a DJ set that moves you. You want to find it, save it, listen to it again. But the set is two hours long, the track has no Shazam match, and the description — if you're lucky — has a wall of text with timestamps buried in it.
The gap between hearing a song in a set and having it in your library is too wide. Most people never cross it.
The Insight
Most DJ set videos on YouTube already contain structured tracklists — in the description or in the comments. The data is there. It just needs to be extracted, matched, and delivered.
Why this matters for the product
- The demand is not generic “music discovery” — it is specific retrieval demand tied to exact moments in long-form sets.
- User behavior indicates friction: listeners manually search comments, forums, and external tracklist sites.
- A URL-first extraction product maps directly to this behavior and can reduce multi-step manual effort to a single action.
Investment-relevant signal
- The problem appears across multiple communities, genres, and event brands.
- The request pattern is persistent and recurring over time, not concentrated in one thread.
- A large share of harvested comments remain high intent after stricter filtering, indicating real pain rather than weak engagement chatter.
Who It's For
Primary
People who listen to DJ sets on YouTube and want the tracks on Spotify. They hear something they love in a two-hour mix and don't want to lose it.
Secondary
Collectors building deep libraries across genres. Runners curating long-run playlists from live sets. DJs who want to share their own tracklists in a playable format.
Why it matters
Time saved — minutes instead of hours of manual searching. Memory — capture tracks before you forget them. Taste compounding — your library grows with every set you listen to.
Evidence
People already want this. They ask for it in YouTube comments, Reddit threads, and music forums — over and over. I collected 1,024 comments expressing demand for tracklists, track IDs, and playlists from DJ sets. After strict filtering for high-intent signals, 273 remain as direct proof of demand. Data collected February 17, 2026.
What people ask for
Where they ask
High-intent sample
| Comment | Context | Platform | When |
|---|
Full datasets
Download the complete evidence collection for review or analysis.
Collection methodology
I validated customer demand by running an automated crawl — no manually supplied URLs — across YouTube DJ set comments and Reddit discussions, filtering for explicit intent signals like “track ID,” “what song,” “tracklist,” and timestamp-based requests. The broad evidence set contains 1,024 comments (800 YouTube, 224 Reddit). After applying a stricter high-intent filter, 273 remain (224 YouTube, 49 Reddit), spanning 97 unique YouTube sets and 27 Reddit sources. This indicates recurring, cross-community demand for faster identification of tracks inside long DJ sets.
- Sources. YouTube comments via automated extraction (youtube-comment-downloader) and Reddit threads via PullPush API. Two platforms, two signal types.
- Discovery. Searched queries like “boiler room dj set,” “hor berlin dj set,” “mixmag the lab,” “cercle track id,” “dj set what song” across both platforms. Discovered 171 YouTube videos and 15 Reddit query categories.
- Demand filtering. Comments retained only if they match demand patterns: “track id,” “what song,” “tracklist,” timestamp queries (“song at 34:20”), or request cues (“anyone know,” “where can I find”).
- Intent tagging. Each comment tagged with one or more of five intent categories: track_id, timestamp_query, what_song, tracklist, playlist.
- Strict filtering. Started from 1,024 broad records. Applied a second-stage filter requiring explicit request language plus tracklist/ID semantics. Deduped by platform, source URL, and comment prefix. Result: 273 strict high-intent records — the primary proof set.
- What counts as high intent. An explicit ask for missing information — not generic discussion. Qualifying patterns: “track id,” “what song,” “anyone know,” “looking for ID,” “tracklist?,” “playlist?,” “where can I find.” Also timestamp-specific asks like “track @ 27:40” or “song at 32:00.”
- Reproducibility. Fully scripted collection (Python). Re-runnable with the same parameters. Deduped across platform, source URL, and normalized comment prefix.
In practical terms, users are already trying to do this manually — asking in comments, searching forums, posting on Reddit. This maps directly to our URL-first extraction workflow and gives us credible early proof of problem demand.
What Tracklist Does
- Paste a YouTube link. Any DJ set, mix, or live recording with a tracklist in the description or comments.
- Tracklist extracts and parses. Timestamps, artist names, track titles — pulled from the description first, then from the highest-quality comment if needed.
- Spotify matching. Each track is searched on Spotify using a two-stage strategy: field-based search for precision, then broad search for recall. Fuzzy scoring handles remixes, edits, and spelling variations.
- Export to your Spotify. One click creates a playlist, adds the tracks, and saves them to your Liked Songs. Select all or pick individual tracks.
Key Features
Plan of record
- YouTube tracklist extraction Parse timestamps and track info from video descriptions. Fall back to comments when the description has no tracklist — search top 100 comments by relevance, pick the best candidate.
- Spotify fuzzy matching Two-stage search: field-based query for precision, broad query for recall. Levenshtein distance scoring across title, artist, and album. Confidence levels (high/medium/low) surface match quality.
- One-click Spotify export Creates a new playlist, adds matched tracks, and saves them to Liked Songs — all in one action. PKCE OAuth keeps it stateless. Select all or pick individual tracks.
- My Sets local library Every extraction auto-saves to localStorage. Hash-based navigation for bookmarking. Search across all saved sets — tracks, artists, channels. No accounts required.
- Per-track export tracking Truthful badges from export history. Shows what was actually exported, not what was selected. Persists across sessions via export records.
- iPod Classic interface Pure CSS art — no images. Click wheel, screen proportions, retro typography. The tracklist renders on the iPod screen; the detail view is a panel beside it. Impractical and delightful.
Future considerations
- SoundCloud / Mixcloud source support
- Manual track editing before export
- Share sets via URL (encode library state)
- Spotify playlist sync (update existing playlists instead of creating new ones)
Key Flows
First-time extraction
You land on the page and see a URL input. Paste a YouTube DJ set link. The page shows a loading state while the API extracts the tracklist and searches Spotify. Results appear on the iPod screen — scroll through tracks, see match confidence. Expand the detail panel to review each track with Spotify previews. Connect your Spotify account via OAuth. Select tracks and export — a playlist is created, tracks are added and saved to your Liked Songs. Each exported track gets a badge. The set auto-saves to your library.
Return visit
You land on the page and your library loads automatically — all previously extracted sets, sorted by date. Browse thumbnails and titles, or search by track name, artist, or channel. Click into a set to see the full tracklist. Re-export tracks you missed, or review what you already exported. The library is local, instant, and yours.
Design Decisions
iPod as interface metaphor
The extraction results render inside a CSS iPod Classic — a pure nostalgia play. The click wheel, the screen proportions, the font. It's impractical and delightful. The tracklist appears on the iPod screen; the detail view is a panel next to it.
Comments as fallback, not decoration
Many popular DJ sets don't have tracklists in the description — but someone in the comments has typed one out. Tracklist searches the top 100 comments by relevance, parses each for timestamped or plain-text tracklists, and picks the best candidate. This single fallback doubles the success rate.
My Sets as local library
Every extraction auto-saves to localStorage. No accounts, no database, no auth. Your library is yours, on your device. Hash-based navigation means you can bookmark a set and return to it. Search works across all saved sets — tracks, artists, channels.
Truthful export badges
After exporting, each track shows whether it was actually exported — not whether it was selected. The badge reads from the export history, not the checkbox state. If you exported a set twice and a track failed the first time but succeeded the second, it shows as exported.
Architecture
Single Astro page with inline TypeScript. No framework — vanilla DOM manipulation, event delegation, state machine for UI states. CSS iPod art is pure CSS (no images).
Three server routes: /api/tracklist/extract (YouTube → parse → Spotify search), /api/tracklist/search (individual Spotify lookup), /api/tracklist/export (playlist creation + Liked Songs). Rate-limited per IP.
Spotify PKCE OAuth — no server-side token storage. The authorization code flows through the export endpoint, which exchanges it for an access token, creates the playlist, and discards the token. Stateless.
localStorage only. Version-enveloped JSON store (tracklist_library_v1). No server persistence. Export history tracked per-set for truthful badges.
Non-Goals
- User accounts or server-side storage
- Mobile-optimized iPod interface (the iPod is a desktop easter egg)
- Support for non-YouTube sources (SoundCloud, Mixcloud)
- Audio fingerprinting or Shazam-like recognition
- Collaborative playlists or social features
Status
Core extraction, matching, and export are working. The My Sets library is functional. Current focus: visual polish, edge case handling, and writing this scope document.