A production-ready, fully static single-page app that analyzes your YouTube subscriptions from a Google Takeout CSV — enriched with live data from the YouTube Data API v3.
Everything runs in the browser. Your API key is stored only in localStorage. Your CSV never leaves your device except for calls to Google’s API.
Link - Try Here
- Upload Google Takeout
subscriptions.csv(Channel Id / Url / Title) - Client-side CSV parsing with Papa Parse
- Enrich each channel with:
- Name, thumbnail, banner
- Creation date (
publishedAt) - Subscriber count, total videos, views
- Country / region (flag + ISO code from
snippet.country)
- Summary stats: totals, average age, most/least subscribers, oldest/newest
- Top countries breakdown (bar chart of top 5)
- Search/filter (name or country), sortable table + card grid views
- Progress UI with cancel; batched API calls for quota friendliness
- Export enriched data as CSV or JSON
- Dark, minimalist UI inspired by openai.com
- Vite + React 19 + TypeScript
- Tailwind CSS v4
- Radix UI primitives + CVA (shadcn-style)
- Lucide icons
- date-fns
npm install
npm run devOpen the URL Vite prints (usually http://localhost:5173).
npm run build # production build → dist/
npm run preview # preview the production build- Open Google Cloud Console
- Create or select a project
- APIs & Services → Library → enable YouTube Data API v3
- Credentials → Create credentials → API key
- (Recommended) Restrict the key to YouTube Data API v3
- Paste the key into the app — it is saved in
localStorageonly
| Call | Approx. cost | Notes |
|---|---|---|
channels.list (up to 50 IDs) |
1 unit | Name, stats, country, thumbnails, banner |
Default free quota is typically 10,000 units/day. A few hundred subscriptions use only a handful of units.
Country comes from the channel’s public settings (snippet.country). Channels that never set a region show as — / Unknown.
- Go to Google Takeout
- Select YouTube and YouTube Music
- Click All YouTube data included → deselect all → enable only subscriptions
- Download the archive and open
subscriptions.csv(or nested under a YouTube folder)
Expected columns (names are flexible):
Channel IdChannel UrlChannel Title
A small sample file is available at /sample-subscriptions.csv after starting the app.
src/
components/ # UI + feature components
hooks/ # API key + analysis orchestration
lib/ # CSV parse, YouTube API, countries, format, export, stats
types/ # Shared TypeScript types
App.tsx
main.tsx
index.css # Tailwind + design tokens
- No backend, no analytics SDK, no accounts
- API key:
localStorageonly - Network: browser →
googleapis.comonly (with your key)
MIT