The regex [A-Za-z0-9_-]+ truncated handles containing dots
(e.g. @prosport.rowery → prosport), causing API lookups to
resolve to wrong channels.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- YouTubeService now fetches: subscribers, views, video count, description,
avatar, banner, country, creation date, recent 5 videos
- Enricher uses API first, falls back to scraping
- Extra YouTube data stored in content_types JSONB
- Audit detail shows view count, country, creation date, recent videos
- Requires enabling YouTube Data API v3 in Google Cloud Console
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New services:
- youtube_service.py: YouTube Data API v3 integration for channel stats
(subscriber count, view count, video count)
- crux_service.py: Chrome UX Report API for real user field data
(INP, LCP, CLS, FCP, TTFB from actual Chrome users)
SEO audit enrichment:
- Security headers check: HSTS, CSP, X-Frame-Options, X-Content-Type-Options
via live requests.head() during data collection
- Image format analysis: WebP/AVIF/SVG vs legacy JPEG/PNG ratio
- CrUX field data complements existing PageSpeed lab data in AI prompt
- All new metrics passed to Gemini for richer analysis
Social media audit enrichment:
- YouTube API data (video count, views, subscribers) integrated into
social media AI prompt when YouTube profile exists
All APIs use existing GOOGLE_PLACES_API_KEY (free tier, $0 cost).
Completeness: ~68% → ~78% (estimated)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>