YouTube comment analyzer for content creators. Paste a video URL and get AI-powered insights into what your audience is actually saying — themes, sentiment, recurring feedback, and engagement patterns.
- Fetches up to 100 top-level comments from any public YouTube video
- Analyzes them with Gemini AI to surface the top 5 audience insights — specific opinions, requests, and reactions rather than generic positive/negative labels
- Shows overall sentiment tone and recurring feedback themes
- Visualizes engagement peaks and drop-offs inferred from timestamps mentioned in comments
- Exports results as PDF or CSV
YouTube creators who want to understand their audience without reading every comment manually.
| Layer | Technology |
|---|---|
| Frontend | React 19, Tailwind CSS 4, Recharts, Motion |
| Backend | Node.js, Express |
| AI | Google Gemini (gemini-3.1-pro-preview) |
| Data | YouTube Data API v3 |
| Build | Vite 6, TypeScript |
Prerequisites: Node.js 18+, a Gemini API key, a YouTube Data API key
-
Install dependencies:
npm install
-
Copy the example env file and fill in your keys:
cp .env.example .env.local
Variable Where to get it GEMINI_API_KEYGoogle AI Studio YOUTUBE_API_KEYGoogle Cloud Console APP_URLOptional — your deployment URL -
Start the dev server:
npm run dev
App runs at
http://localhost:3000.
├── server.ts # Express server — YouTube comment proxy + static serving
├── src/
│ ├── App.tsx # Main UI — input, results dashboard, PDF/CSV export
│ ├── analysis/
│ │ └── commentAnalysis.ts # Gemini prompt, response schema, and domain types
│ └── lib/
│ └── utils.ts # Tailwind class merge utility
└── vite.config.ts
Comment fetching is proxied through the Express server. The YouTube Data API key stays server-side; the frontend only calls /api/comments. This avoids exposing credentials in the browser bundle.
AI analysis runs client-side via the Gemini SDK. The GEMINI_API_KEY is injected at build time by Vite and used directly from the browser. This trades key exposure for simpler architecture — acceptable for a single-user or self-hosted tool, worth revisiting for a multi-tenant deployment.
Structured JSON output is enforced via Gemini's response schema. Rather than parsing free-text AI output, the prompt requests a typed JSON object and the schema is passed directly to the model config. This eliminates a class of parsing errors and makes the response shape predictable.
Engagement timeline is inferred, not measured. The app has no access to YouTube's actual retention analytics. The timeline is derived from timestamps that viewers mention in comments — a signal, not a precise metric. The UI labels these as "inferred" accordingly.
100-comment limit is a single-request constraint. The YouTube Data API returns at most 100 results per commentThreads call. Pagination is not implemented; the analysis reflects the top 100 comments as ranked by the API's default sort.