From 9710cf994858c565f97c7ccb1c8a353d882e8022 Mon Sep 17 00:00:00 2001 From: Srilekha Date: Thu, 22 Oct 2026 17:20:44 +0530 Subject: [PATCH] feat: scale HIFFI pipeline to 500 artists with dual BVI ranking, dark dashboard, and Excel audit export --- .streamlit/config.toml | 10 + app.py | 489 +++++++++++++++++++++++++ collectors/youtube_collector.py | 480 ++++++++++++++++--------- core/confidence_scorer.py | 163 ++++++--- core/health_detector.py | 87 +++++ core/ranking_engine.py | 226 ++++++++---- data/generate_seed_500.py | 551 +++++++++++++++++++++++++++++ data/roster_loader.py | 57 +++ data/seed_artists_50.py | 66 ++++ data/seed_artists_500.csv | 501 ++++++++++++++++++++++++++ enriched_artists.csv | 512 ++++++++++++++++++++++++++- identity_verification_audit.xlsx | Bin 0 -> 37851 bytes main.py | 233 ++++++++---- ~$identity_verification_audit.xlsx | Bin 0 -> 165 bytes 14 files changed, 3017 insertions(+), 358 deletions(-) create mode 100644 .streamlit/config.toml create mode 100644 app.py create mode 100644 core/health_detector.py create mode 100644 data/generate_seed_500.py create mode 100644 data/roster_loader.py create mode 100644 data/seed_artists_50.py create mode 100644 data/seed_artists_500.csv create mode 100644 identity_verification_audit.xlsx create mode 100644 ~$identity_verification_audit.xlsx diff --git a/.streamlit/config.toml b/.streamlit/config.toml new file mode 100644 index 0000000..e87af43 --- /dev/null +++ b/.streamlit/config.toml @@ -0,0 +1,10 @@ +[theme] +base = "dark" +primaryColor = "#6366f1" +backgroundColor = "#090d16" +secondaryBackgroundColor = "#131b2e" +textColor = "#f1f5f9" +font = "sans serif" + +[client] +toolbarMode = "minimal" \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..d7d6705 --- /dev/null +++ b/app.py @@ -0,0 +1,489 @@ +""" +app.py +HIFFI Artist Intelligence - Executive Dashboard +Clean dark-themed design with aligned dataframes, responsive cards, and scouting dossier. +""" + +import os +import pandas as pd +import plotly.express as px +import plotly.graph_objects as go +import streamlit as st + +st.set_page_config( + page_title="HIFFI | Artist Intelligence", + page_icon="⚡", + layout="wide", + initial_sidebar_state="expanded", +) + +DATA_PATH = "enriched_artists.csv" + +# Global CSS Polish +st.markdown( + """ + + """, + unsafe_allow_html=True, +) + + +@st.cache_data(ttl=60) +def load_data(): + if not os.path.exists(DATA_PATH): + return pd.DataFrame() + df = pd.read_csv(DATA_PATH) + numeric_cols = [ + "hiffi_score", + "breakout_velocity_index", + "subscriber_count", + "daily_view_velocity", + "momentum_30d", + "confidence_score", + ] + for col in numeric_cols: + if col in df.columns: + df[col] = pd.to_numeric(df[col], errors="coerce") + return df + + +df = load_data() + +# ----------------- Sidebar Controls ----------------- +with st.sidebar: + st.markdown("### ⚡ HIFFI Intelligence") + st.caption("Hip-Hop Market Scoring & Breakout Detection") + st.markdown("
", unsafe_allow_html=True) + + if df.empty: + st.error(f"'{DATA_PATH}' not found. Please run 'python main.py' first!") + st.stop() + + view_mode = st.radio( + "Leaderboard Perspective:", + ["🏆 Overall HIFFI Rank", "🚀 Breakout Velocity (BVI)", "🔍 Master Audit Grid"], + index=0, + ) + + st.markdown("
", unsafe_allow_html=True) + st.markdown("##### 🛡️ Filters") + + available_statuses = df["health_status"].dropna().unique().tolist() + selected_statuses = st.multiselect( + "Channel Status", + options=available_statuses, + default=available_statuses, + ) + + min_conf = st.slider( + "Min Confidence", + min_value=0.0, + max_value=1.0, + value=0.50, + step=0.05, + ) + + st.markdown("
", unsafe_allow_html=True) + st.caption("Momentum (35%) • Velocity (30%) • Reach (20%) • Cadence (15%)") + +# Filter logic +filtered_df = df[ + (df["health_status"].isin(selected_statuses)) + & (df["confidence_score"] >= min_conf) +].copy() + +# ----------------- Main Header ----------------- +head_col1, head_col2 = st.columns([3, 1]) +with head_col1: + st.markdown("

HIFFI Artist Intelligence Hub

", unsafe_allow_html=True) + st.markdown("

Cross-platform tracking of catalog sustainability and audience breakout velocity.

", unsafe_allow_html=True) +with head_col2: + st.markdown( + f"
Active Cohort: {len(filtered_df)} / {len(df)} artists
", + unsafe_allow_html=True, + ) + +# ----------------- KPI Cards Row ----------------- +k1, k2, k3, k4 = st.columns(4) + +with k1: + st.markdown( + f""" +
+
Tracked Artists
+
{len(df)}
+
Monitored pipeline size
+
+ """, + unsafe_allow_html=True, + ) + +with k2: + active_count = len(df[df["health_status"] == "ACTIVE_HEALTHY"]) + st.markdown( + f""" +
+
Active Healthy
+
{active_count}
+
Recent uploads & steady traction
+
+ """, + unsafe_allow_html=True, + ) + +with k3: + evergreen_count = len(df[df["health_status"] == "CATALOG_EVERGREEN"]) + st.markdown( + f""" +
+
Catalog Evergreen
+
{evergreen_count}
+
Strong passive catalog streams
+
+ """, + unsafe_allow_html=True, + ) + +with k4: + zombies = len(df[df["health_status"] == "DORMANT_CATALOG"]) + st.markdown( + f""" +
+
Dormant / Excluded
+
{zombies}
+
Disqualified ( Rank)
+
+ """, + unsafe_allow_html=True, + ) + +st.markdown("
", unsafe_allow_html=True) + +# ----------------- Top 3 Leaders Podium ----------------- +top3 = ( + filtered_df[filtered_df["is_rank_eligible"] == True] + .sort_values(by="hiffi_rank", ascending=True) + .head(3) +) + +if len(top3) >= 3: + st.markdown("#### 👑 Market Leaders") + p1, p2, p3 = st.columns(3) + + podium_data = [ + (p1, top3.iloc[0], "🥇 RANK #1", "podium-gold", "#f59e0b"), + (p2, top3.iloc[1], "🥈 RANK #2", "podium-silver", "#94a3b8"), + (p3, top3.iloc[2], "🥉 RANK #3", "podium-bronze", "#f97316"), + ] + + for col, row, rank_label, css_class, accent_color in podium_data: + badge_cls = ( + "badge-active" + if row["health_status"] == "ACTIVE_HEALTHY" + else "badge-evergreen" + ) + bvi_str = f"{row['breakout_velocity_index']:.1f}" if pd.notna(row.get("breakout_velocity_index")) else "N/A" + vel_str = f"{int(row['daily_view_velocity']):,}" if pd.notna(row.get("daily_view_velocity")) else "N/A" + + with col: + st.markdown( + f""" +
+
+ {rank_label} + {row['health_status'].replace('_', ' ')} +
+
{row['name']}
+
{row.get('channel_title', '')}
+
+
+
HIFFI Score
+
{row['hiffi_score']:.1f}
+
+
+
Breakout Index
+
{bvi_str}
+
+
+
Daily Views
+
{vel_str}
+
+
+
+ """, + unsafe_allow_html=True, + ) + + st.markdown("
", unsafe_allow_html=True) + +# ----------------- Leaderboard Grid ----------------- +st.markdown(f"#### 📋 {view_mode}") + +if view_mode == "🏆 Overall HIFFI Rank": + table_df = ( + filtered_df[filtered_df["is_rank_eligible"] == True] + .sort_values(by="hiffi_rank", ascending=True) + .copy() + ) + cols = [ + "hiffi_rank", + "name", + "hiffi_score", + "breakout_rank", + "breakout_velocity_index", + "daily_view_velocity", + "momentum_30d", + "health_status", + ] +elif view_mode == "🚀 Breakout Velocity (BVI)": + table_df = ( + filtered_df[ + (filtered_df["is_rank_eligible"] == True) + & (filtered_df["breakout_rank"].notna()) + ] + .sort_values(by="breakout_rank", ascending=True) + .copy() + ) + cols = [ + "breakout_rank", + "name", + "breakout_velocity_index", + "hiffi_rank", + "hiffi_score", + "daily_view_velocity", + "subscriber_count", + "health_status", + ] +else: + table_df = filtered_df.sort_values(by=["is_rank_eligible", "hiffi_score"], ascending=[False, False]).copy() + cols = [ + "name", + "hiffi_score", + "breakout_velocity_index", + "daily_view_velocity", + "subscriber_count", + "health_status", + "confidence_score", + "is_rank_eligible", + ] + +st.dataframe( + table_df[cols].reset_index(drop=True), + use_container_width=True, + height=290, + column_config={ + "hiffi_rank": st.column_config.NumberColumn("Rank", format="%d", width="small"), + "breakout_rank": st.column_config.NumberColumn("BVI Rank", format="%d", width="small"), + "name": st.column_config.TextColumn("Artist", width="medium"), + "hiffi_score": st.column_config.ProgressColumn( + "HIFFI Score", + format="%.1f", + min_value=0, + max_value=100, + width="medium", + ), + "breakout_velocity_index": st.column_config.ProgressColumn( + "Breakout (BVI)", + format="%.1f", + min_value=0, + max_value=100, + width="medium", + ), + "daily_view_velocity": st.column_config.NumberColumn( + "Daily Views / Day", + format="%,d", + width="medium", + ), + "momentum_30d": st.column_config.NumberColumn( + "30d Momentum", + format="%.1f%%", + width="small", + ), + "subscriber_count": st.column_config.NumberColumn( + "Subscribers", + format="%,d", + width="medium", + ), + "health_status": st.column_config.TextColumn("Status", width="medium"), + "confidence_score": st.column_config.NumberColumn("Confidence", format="%.2f", width="small"), + "is_rank_eligible": st.column_config.CheckboxColumn("Eligible", width="small"), + }, +) + +st.markdown("
", unsafe_allow_html=True) + +# ----------------- Visual Insights Charts ----------------- +st.markdown("#### 📊 Market Landscape Visualizer") + +c_left, c_right = st.columns(2) + +with c_left: + scatter_df = filtered_df[filtered_df["is_rank_eligible"] == True].copy() + fig_scatter = px.scatter( + scatter_df, + x="daily_view_velocity", + y="momentum_30d", + size="subscriber_count", + color="health_status", + color_discrete_map={ + "ACTIVE_HEALTHY": "#10b981", + "CATALOG_EVERGREEN": "#38bdf8", + "DORMANT_CATALOG": "#ef4444", + }, + hover_name="name", + hover_data={"daily_view_velocity": ":,d", "momentum_30d": ":.1f%"}, + log_x=True, + title="View Velocity vs. 30-Day Momentum", + labels={ + "daily_view_velocity": "Daily Views / Day (Log Scale)", + "momentum_30d": "30-Day Growth (%)", + "health_status": "Vitality", + }, + template="plotly_dark", + ) + fig_scatter.update_layout( + paper_bgcolor="#111827", + plot_bgcolor="#111827", + font=dict(color="#9ca3af"), + margin=dict(l=20, r=20, t=40, b=20), + height=320, + ) + st.plotly_chart(fig_scatter, use_container_width=True) + +with c_right: + bvi_df = ( + filtered_df[filtered_df["breakout_velocity_index"].notna()] + .sort_values(by="breakout_velocity_index", ascending=True) + ) + fig_bar = px.bar( + bvi_df, + x="breakout_velocity_index", + y="name", + orientation="h", + color="breakout_velocity_index", + color_continuous_scale="Purples", + title="Breakout Velocity Index (BVI)", + labels={"breakout_velocity_index": "BVI Score", "name": "Artist"}, + template="plotly_dark", + ) + fig_bar.update_layout( + paper_bgcolor="#111827", + plot_bgcolor="#111827", + font=dict(color="#9ca3af"), + coloraxis_showscale=False, + margin=dict(l=20, r=20, t=40, b=20), + height=320, + ) + st.plotly_chart(fig_bar, use_container_width=True) + +st.markdown("
", unsafe_allow_html=True) + +# ----------------- Deep Dive Scouting Dossier ----------------- +st.markdown("#### 🔎 Artist Dossier") + +selected_name = st.selectbox("Inspect Artist Details:", df["name"].unique(), label_visibility="collapsed") +row = df[df["name"] == selected_name].iloc[0] + +d1, d2, d3, d4 = st.columns(4) + +with d1: + h_val = row.get("hiffi_score") + st.metric("HIFFI Score", f"{h_val:.1f}" if pd.notna(h_val) else "N/A") +with d2: + b_val = row.get("breakout_velocity_index") + st.metric("Breakout Index (BVI)", f"{b_val:.1f}" if pd.notna(b_val) else "N/A") +with d3: + s_val = row.get("subscriber_count") + st.metric("Subscribers", f"{int(s_val):,}" if pd.notna(s_val) else "N/A") +with d4: + conf = row.get("confidence_score", 0.0) + tier = row.get("confidence_tier", "Standard") + st.metric("Entity Confidence", f"{conf * 100:.0f}%", delta=tier, delta_color="normal") + +badge_cls = ( + "badge-active" + if row.get("health_status") == "ACTIVE_HEALTHY" + else "badge-evergreen" + if row.get("health_status") == "CATALOG_EVERGREEN" + else "badge-dormant" +) + +st.markdown( + f""" +
+
Artist: {row['name']}
+
Channel: {row.get('channel_title', 'Unknown')}
+
Status: {row.get('health_status', 'UNKNOWN')}
+
Zombie Flag: {'⚠️ Yes' if row.get('is_zombie') else '✅ Clean'}
+
Eligible for Rank: {'✅ Yes' if row.get('is_rank_eligible') else '❌ Disqualified'}
+
+ """, + unsafe_allow_html=True, +) \ No newline at end of file diff --git a/collectors/youtube_collector.py b/collectors/youtube_collector.py index 60a0a52..66d20de 100644 --- a/collectors/youtube_collector.py +++ b/collectors/youtube_collector.py @@ -1,192 +1,356 @@ +""" +collectors/youtube_collector.py +Collects YouTube statistics, uploads, view velocity, and true momentum. +Includes URL/handle parsing, historical snapshotting, status_flag, and data_complete. +""" + +from datetime import datetime, timedelta, timezone import os import re -import json import sqlite3 -from pathlib import Path -from datetime import datetime, timezone, timedelta +from typing import Any, Dict, List, Optional, Tuple from urllib.parse import urlparse -from typing import Dict, Any, Optional +from googleapiclient.discovery import build + + +def parse_youtube_identifier(raw_input: str) -> Tuple[str, str]: + """Parses raw input (URL, handle, or ID) into a query type and clean value.""" + val = raw_input.strip() + + if "youtube.com" in val or "youtu.be" in val: + parsed = urlparse(val if val.startswith("http") else f"https://{val}") + path_parts = [p for p in parsed.path.split("/") if p] + if not path_parts: + raise ValueError(f"Invalid YouTube URL: {val}") + + if path_parts[0].startswith("@"): + return ("forHandle", path_parts[0]) + elif path_parts[0] == "channel" and len(path_parts) > 1: + return ("id", path_parts[1]) + elif path_parts[0] == "user" and len(path_parts) > 1: + return ("forUsername", path_parts[1]) + elif path_parts[0] == "c" and len(path_parts) > 1: + return ("forHandle", f"@{path_parts[1]}") + else: + return ( + "forHandle", + path_parts[0] + if path_parts[0].startswith("@") + else f"@{path_parts[0]}", + ) + + if val.startswith("UC") and len(val) == 24: + return ("id", val) + + if val.startswith("@"): + return ("forHandle", val) + + return ("forHandle", f"@{val}") -try: - from googleapiclient.discovery import build -except ImportError: - build = None class YouTubeCollector: - def __init__(self, api_keys: list[str] = None, cache_db: str = ".cache/youtube_metrics.sqlite"): - self.api_keys = [k.strip() for k in (api_keys or []) if k.strip()] - self.cache_db = Path(cache_db) - self.cache_db.parent.mkdir(parents=True, exist_ok=True) + + def __init__( + self, + api_key: Optional[str] = None, + cache_db_path: str = ".cache/youtube_metrics.sqlite", + ): + self.api_key = api_key or os.getenv("YOUTUBE_API_KEY") + if not self.api_key: + raise ValueError("YOUTUBE_API_KEY not found in environment.") + self.youtube = build("youtube", "v3", developerKey=self.api_key) + self.cache_db_path = cache_db_path self._init_db() - self.client = None - if self.api_keys and build: - try: - self.client = build("youtube", "v3", developerKey=self.api_keys[0], cache_discovery=False) - except Exception as e: - print(f"[Warning] Failed to initialize YouTube API client: {e}") def _init_db(self): - with sqlite3.connect(self.cache_db) as conn: + os.makedirs(os.path.dirname(self.cache_db_path), exist_ok=True) + with sqlite3.connect(self.cache_db_path) as conn: + conn.execute(""" + CREATE TABLE IF NOT EXISTS channel_snapshots ( + channel_id TEXT, + snapshot_date TEXT, + lifetime_views INTEGER, + subscriber_count INTEGER, + video_count INTEGER, + PRIMARY KEY (channel_id, snapshot_date) + ) + """) conn.execute(""" CREATE TABLE IF NOT EXISTS channel_metrics ( - channel_id TEXT PRIMARY KEY, - title TEXT, - subscribers INTEGER, + identifier TEXT PRIMARY KEY, + channel_id TEXT, + channel_title TEXT, + subscriber_count INTEGER, lifetime_views INTEGER, video_count INTEGER, - recent_avg_views INTEGER, + recent_avg_views REAL, + daily_view_velocity REAL, momentum_30d REAL, - raw_json TEXT, - updated_at TEXT + status_flag TEXT, + data_complete INTEGER, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """) - def _get_cached(self, channel_id: str) -> Optional[Dict[str, Any]]: - with sqlite3.connect(self.cache_db) as conn: + def _resolve_channel(self, identifier: str) -> Optional[Dict[str, Any]]: + param_type, param_value = parse_youtube_identifier(identifier) + req_params = { + "part": "snippet,statistics,contentDetails", + param_type: param_value, + } + + try: + resp = self.youtube.channels().list(**req_params).execute() + items = resp.get("items", []) + return items[0] if items else None + except Exception as e: + print(f"API Resolution error for '{identifier}': {e}") + return None + + def _record_snapshot( + self, channel_id: str, views: int, subs: int, videos: int + ): + today = datetime.now(timezone.utc).strftime("%Y-%m-%d") + with sqlite3.connect(self.cache_db_path) as conn: + conn.execute( + """ + INSERT OR REPLACE INTO channel_snapshots + (channel_id, snapshot_date, lifetime_views, subscriber_count, video_count) + VALUES (?, ?, ?, ?, ?) + """, + (channel_id, today, views, subs, videos), + ) + + def _calculate_historical_channel_momentum( + self, channel_id: str + ) -> Optional[float]: + with sqlite3.connect(self.cache_db_path) as conn: conn.row_factory = sqlite3.Row - row = conn.execute("SELECT * FROM channel_metrics WHERE channel_id = ?", (channel_id,)).fetchone() - if row: - return dict(row) + cursor = conn.cursor() + cursor.execute( + """ + SELECT snapshot_date, lifetime_views + FROM channel_snapshots + WHERE channel_id = ? + ORDER BY snapshot_date DESC + """, + (channel_id,), + ) + rows = cursor.fetchall() + + if len(rows) < 2: + return None + + latest_date = datetime.strptime(rows[0]["snapshot_date"], "%Y-%m-%d") + latest_views = rows[0]["lifetime_views"] + + for r in rows[1:]: + past_date = datetime.strptime(r["snapshot_date"], "%Y-%m-%d") + diff_days = (latest_date - past_date).days + if 7 <= diff_days <= 45: + past_views = r["lifetime_views"] + delta_views = latest_views - past_views + return float(delta_views / max(diff_days, 1)) + return None - def _save_cache(self, metrics: Dict[str, Any]): - with sqlite3.connect(self.cache_db) as conn: - conn.execute(""" - INSERT OR REPLACE INTO channel_metrics ( - channel_id, title, subscribers, lifetime_views, video_count, - recent_avg_views, momentum_30d, raw_json, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) - """, ( - metrics["channel_id"], - metrics["title"], - metrics["subscribers"], - metrics["lifetime_views"], - metrics["video_count"], - metrics["recent_avg_views"], - metrics["momentum_30d"], - json.dumps(metrics), - datetime.now(timezone.utc).isoformat() - )) - - def extract_channel_id(self, url: str) -> str: - """Extract UC... channel ID from standard YouTube URL.""" - if not url: - return "" - match = re.search(r"channel/(UC[a-zA-Z0-9_-]{22})", url) - if match: - return match.group(1) - return url.strip().rstrip("/").split("/")[-1] - - def get_channel_metrics(self, youtube_url: str, fetch_recent_videos: bool = False) -> Dict[str, Any]: - channel_id = self.extract_channel_id(youtube_url) - empty = { - "channel_id": channel_id, - "title": "", - "subscribers": 0, - "lifetime_views": 0, - "video_count": 0, - "recent_avg_views": 0, - "momentum_30d": 0.0, - "status": "unresolved" - } - if not channel_id: - empty["status"] = "empty_url" - return empty - - # 1. Check local cache first (saves API quota) - cached = self._get_cached(channel_id) - if cached: - cached["status"] = "cached" - return cached - - # 2. If client is not available (zero API keys), return baseline - if not self.client: - empty["status"] = "no_api_key" - return empty + def _get_recent_video_metrics( + self, uploads_playlist_id: str, max_results: int = 25 + ) -> Dict[str, Optional[float]]: + now = datetime.now(timezone.utc) + t_30d = now - timedelta(days=30) + t_60d = now - timedelta(days=60) try: - # 3. Call channels.list for statistics and contentDetails - resp = self.client.channels().list( - part="snippet,statistics,contentDetails", - id=channel_id - ).execute() - - items = resp.get("items") or [] - if not items: - empty["status"] = "not_found" - return empty - - item = items[0] - snippet = item.get("snippet", {}) - stats = item.get("statistics", {}) - content = item.get("contentDetails", {}) - - metrics = { - "channel_id": channel_id, - "title": snippet.get("title", ""), - "subscribers": int(stats.get("subscriberCount") or 0), - "lifetime_views": int(stats.get("viewCount") or 0), - "video_count": int(stats.get("videoCount") or 0), - "recent_avg_views": 0, - "momentum_30d": 0.0, - "status": "live_api" + pl_resp = ( + self.youtube.playlistItems() + .list( + part="contentDetails,snippet", + playlistId=uploads_playlist_id, + maxResults=max_results, + ) + .execute() + ) + except Exception: + return { + "recent_avg_views": None, + "daily_view_velocity": None, + "momentum_30d": None, } - # 4. Optional: fetch recent video metrics for average views & momentum - uploads_id = content.get("relatedPlaylists", {}).get("uploads") - if fetch_recent_videos and uploads_id: - recent_views, momentum = self._calc_recent_metrics(uploads_id, metrics["lifetime_views"]) - metrics["recent_avg_views"] = recent_views - metrics["momentum_30d"] = momentum + video_ids = [ + item["contentDetails"]["videoId"] + for item in pl_resp.get("items", []) + ] + if not video_ids: + return { + "recent_avg_views": None, + "daily_view_velocity": None, + "momentum_30d": None, + } - self._save_cache(metrics) - return metrics + v_resp = ( + self.youtube.videos() + .list(part="snippet,statistics", id=",".join(video_ids)) + .execute() + ) - except Exception as e: - empty["status"] = f"error: {str(e)[:100]}" - return empty + views_0_to_30: List[int] = [] + views_30_to_60: List[int] = [] + daily_velocities: List[float] = [] - def _calc_recent_metrics(self, uploads_playlist_id: str, lifetime_views: int) -> tuple[int, float]: - """Fetch up to 10 latest uploads to compute average views and 30d momentum.""" - try: - playlist_resp = self.client.playlistItems().list( - part="contentDetails", - playlistId=uploads_playlist_id, - maxResults=10 - ).execute() + for item in v_resp.get("items", []): + stats = item.get("statistics", {}) + v_count = int(stats.get("viewCount", 0)) + pub_str = item.get("snippet", {}).get("publishedAt") + if not pub_str: + continue - video_ids = [i["contentDetails"]["videoId"] for i in playlist_resp.get("items", [])] - if not video_ids: - return 0, 0.0 + pub_date = datetime.fromisoformat(pub_str.replace("Z", "+00:00")) + days_active = max((now - pub_date).total_seconds() / 86400.0, 0.25) - video_resp = self.client.videos().list( - part="statistics,snippet", - id=",".join(video_ids) - ).execute() + daily_velocities.append(v_count / days_active) - now = datetime.now(timezone.utc) - thirty_days_ago = now - timedelta(days=30) - - views = [] - views_30d = 0 + if pub_date >= t_30d: + views_0_to_30.append(v_count) + elif t_60d <= pub_date < t_30d: + views_30_to_60.append(v_count) - for v in video_resp.get("items", []): - v_views = int(v.get("statistics", {}).get("viewCount") or 0) - views.append(v_views) - pub_date_str = v.get("snippet", {}).get("publishedAt", "") - if pub_date_str: - pub_date = datetime.fromisoformat(pub_date_str.replace("Z", "+00:00")) - if pub_date >= thirty_days_ago: - views_30d += v_views + avg_views = ( + float(sum(views_0_to_30) / len(views_0_to_30)) + if views_0_to_30 + else None + ) + daily_vel = ( + float(sum(daily_velocities) / len(daily_velocities)) + if daily_velocities + else None + ) - avg_views = int(sum(views) / len(views)) if views else 0 - momentum = round((views_30d / lifetime_views) * 100, 3) if lifetime_views > 0 else 0.0 - return avg_views, momentum - except Exception: - return 0, 0.0 + if views_30_to_60 and views_0_to_30: + prev_sum = sum(views_30_to_60) + curr_sum = sum(views_0_to_30) + momentum = ( + ((curr_sum - prev_sum) / float(max(prev_sum, 1000))) * 100.0 + if prev_sum > 0 + else 100.0 + ) + elif views_0_to_30 and not views_30_to_60: + momentum = 100.0 + else: + momentum = None -if __name__ == "__main__": - collector = YouTubeCollector() - test_res = collector.get_channel_metrics("https://www.youtube.com/channel/UCBOxSirnH1-_-xKtqX051lg") - print("Test run result:") - print(test_res) \ No newline at end of file + return { + "recent_avg_views": avg_views, + "daily_view_velocity": daily_vel, + "momentum_30d": momentum, + } + + def get_channel_metrics( + self, + identifier: str, + fetch_recent_videos: bool = True, + force_refresh: bool = False, + ) -> Dict[str, Any]: + if not force_refresh: + with sqlite3.connect(self.cache_db_path) as conn: + conn.row_factory = sqlite3.Row + cursor = conn.cursor() + cursor.execute( + "SELECT * FROM channel_metrics WHERE identifier = ?", + (identifier,), + ) + row = cursor.fetchone() + if row and row["status_flag"] != "FAILED_LOOKUP": + return dict(row) + + ch_data = self._resolve_channel(identifier) + if not ch_data: + return { + "identifier": identifier, + "channel_id": None, + "channel_title": None, + "subscriber_count": None, + "lifetime_views": None, + "video_count": None, + "recent_avg_views": None, + "daily_view_velocity": None, + "momentum_30d": None, + "status_flag": "FAILED_LOOKUP", + "data_complete": 0, + } + + ch_id = ch_data["id"] + title = ch_data["snippet"]["title"] + stats = ch_data["statistics"] + uploads_pl = ch_data["contentDetails"]["relatedPlaylists"]["uploads"] + + subs = int(stats.get("subscriberCount", 0)) + views = int(stats.get("viewCount", 0)) + vids = int(stats.get("videoCount", 0)) + + self._record_snapshot(ch_id, views, subs, vids) + + recent_metrics = { + "recent_avg_views": None, + "daily_view_velocity": None, + "momentum_30d": None, + } + if fetch_recent_videos: + recent_metrics = self._get_recent_video_metrics(uploads_pl) + + momentum = recent_metrics["momentum_30d"] + if momentum is None: + momentum = self._calculate_historical_channel_momentum(ch_id) + + # Reconcile status_flag and data_complete + if momentum is not None and recent_metrics["daily_view_velocity"] is not None: + status_flag = "COMPLETE" + data_complete = 1 + elif recent_metrics["daily_view_velocity"] is not None: + status_flag = "CATALOG_ACTIVE_NO_RECENT_UPLOAD" + momentum = 0.0 + data_complete = 1 + else: + status_flag = "INACTIVE_OR_DORMANT" + momentum = None + data_complete = 0 + + result = { + "identifier": identifier, + "channel_id": ch_id, + "channel_title": title, + "subscriber_count": subs, + "lifetime_views": views, + "video_count": vids, + "recent_avg_views": recent_metrics["recent_avg_views"], + "daily_view_velocity": recent_metrics["daily_view_velocity"], + "momentum_30d": momentum, + "status_flag": status_flag, + "data_complete": data_complete, + } + + with sqlite3.connect(self.cache_db_path) as conn: + conn.execute( + """ + INSERT OR REPLACE INTO channel_metrics + (identifier, channel_id, channel_title, subscriber_count, lifetime_views, + video_count, recent_avg_views, daily_view_velocity, momentum_30d, status_flag, data_complete) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + result["identifier"], + result["channel_id"], + result["channel_title"], + result["subscriber_count"], + result["lifetime_views"], + result["video_count"], + result["recent_avg_views"], + result["daily_view_velocity"], + result["momentum_30d"], + result["status_flag"], + result["data_complete"], + ), + ) + + return result \ No newline at end of file diff --git a/core/confidence_scorer.py b/core/confidence_scorer.py index bba8f04..89a390b 100644 --- a/core/confidence_scorer.py +++ b/core/confidence_scorer.py @@ -1,60 +1,122 @@ -from typing import Dict, Any +""" +core/confidence_scorer.py +Computes composite authenticity confidence scores (0.0 - 1.0) +across YouTube channel titles, MusicBrainz, and Wikidata with +noise-cleaning and cross-referencing. +""" + +import re +from typing import Dict, Any, Optional + class ConfidenceScorer: """ - Computes a weighted authenticity and quality score across multiple data sources: - - YouTube footprint: 40% - - MusicBrainz catalog: 35% - - Wikidata entity: 25% + Evaluates multi-source identity alignment across YouTube, MusicBrainz, and Wikidata. """ - def __init__(self, yt_weight: float = 0.40, mb_weight: float = 0.35, wd_weight: float = 0.25): - self.w_yt = yt_weight - self.w_mb = mb_weight - self.w_wd = wd_weight + + def __init__( + self, + yt_weight: float = 0.40, + mb_weight: float = 0.35, + wd_weight: float = 0.25, + ): + self.yt_weight = yt_weight + self.mb_weight = mb_weight + self.wd_weight = wd_weight + + @staticmethod + def _clean_string(text: Optional[str]) -> str: + """Strips common artist channel noise tokens and punctuation.""" + if not text: + return "" + s = text.lower() + # Remove suffixes like VEVO, Official, Records, Music, Topic + noise_tokens = [ + r"\bvevo\b", + r"\bofficial\b", + r"\btopic\b", + r"\bmusic\b", + r"\brecords\b", + r"\btv\b", + r"\bchannel\b", + ] + for token in noise_tokens: + s = re.sub(token, "", s) + # Remove all non-alphanumeric characters + return re.sub(r"[^a-z0-9]", "", s) + + def _match_youtube(self, artist_name: str, yt_title: Optional[str]) -> float: + """Evaluates whether the YouTube channel title matches the artist.""" + if not yt_title or not artist_name: + return 0.0 + + clean_artist = self._clean_string(artist_name) + clean_title = self._clean_string(yt_title) + + if not clean_artist or not clean_title: + return 0.0 + + # Exact match after cleaning (e.g. 'KendrickLamarVEVO' -> 'kendricklamar' == 'kendricklamar') + if clean_artist == clean_title: + return 1.0 + + # Substring containment + if clean_artist in clean_title or clean_title in clean_artist: + return 0.85 + + return 0.0 def calculate_score( self, yt_metrics: Dict[str, Any], mb_result: Dict[str, Any], - wd_result: Dict[str, Any] + wd_result: Dict[str, Any], ) -> Dict[str, Any]: - # 1. YouTube sub-score (0.0 to 1.0) - yt_score = 0.0 - if yt_metrics.get("status") in ["live_api", "cached"]: - subs = yt_metrics.get("subscribers", 0) - views = yt_metrics.get("lifetime_views", 0) - vids = yt_metrics.get("video_count", 0) + """ + Computes composite confidence based on: + - YouTube channel name alignment (40%) + - MusicBrainz match verification (35%) + - Wikidata entity validation (25%) + - Cross-referencing bonus: MBID linked directly inside Wikidata + """ + artist_name = yt_metrics.get("channel_title") or "" + # If artist name was provided separately in the identifier dict, we compare against channel_title + yt_title = yt_metrics.get("channel_title") + raw_name = yt_metrics.get("name") or yt_title - # Baseline 0.5 for a verified channel existence - yt_score = 0.5 - if subs >= 1000: - yt_score += 0.2 - elif subs > 0: - yt_score += 0.1 + # 1. YouTube Title Alignment Score + yt_score = self._match_youtube(raw_name, yt_title) - if views >= 50000: - yt_score += 0.2 - elif views > 0: - yt_score += 0.1 + # 2. MusicBrainz Score + mb_match = mb_result.get("verified", False) if isinstance(mb_result, dict) else bool(mb_result) + mb_score = 1.0 if mb_match else 0.0 - if vids >= 5: - yt_score += 0.1 + # 3. Wikidata Score + wd_match = wd_result.get("verified", False) if isinstance(wd_result, dict) else bool(wd_result) + wd_score = 1.0 if wd_match else 0.0 - # 2. MusicBrainz sub-score - mb_score = mb_result.get("confidence", 0.0) if mb_result.get("verified") else 0.0 + # 4. Cross-Referencing Bonus: Wikidata linked to MusicBrainz ID + cross_ref_bonus = 0.0 + if isinstance(wd_result, dict) and isinstance(mb_result, dict): + wd_mbid = wd_result.get("musicbrainz_id") + actual_mbid = mb_result.get("mbid") + if wd_mbid and actual_mbid and wd_mbid == actual_mbid: + cross_ref_bonus = 0.05 # Extra 5% confidence for direct KG linkage - # 3. Wikidata sub-score - wd_score = wd_result.get("confidence", 0.0) if wd_result.get("verified") else 0.0 + # Composite calculation + composite = ( + self.yt_weight * yt_score + + self.mb_weight * mb_score + + self.wd_weight * wd_score + + cross_ref_bonus + ) + composite = round(min(composite, 1.0), 2) - # Aggregated composite score - composite = (yt_score * self.w_yt) + (mb_score * self.w_mb) + (wd_score * self.w_wd) - composite = round(min(1.0, max(0.0, composite)), 2) - - # Confidence category - if composite >= 0.75: - tier = "High" - elif composite >= 0.45: - tier = "Medium" + # Tier classification + if composite >= 0.80: + tier = "High Confidence" + elif composite >= 0.50: + tier = "Medium Confidence" else: tier = "Low / Emerging" @@ -62,16 +124,9 @@ class ConfidenceScorer: "composite_confidence": composite, "confidence_tier": tier, "sub_scores": { - "youtube": round(yt_score, 2), - "musicbrainz": round(mb_score, 2), - "wikidata": round(wd_score, 2) - } - } - -if __name__ == "__main__": - scorer = ConfidenceScorer() - dummy_yt = {"status": "live_api", "subscribers": 5000, "lifetime_views": 250000, "video_count": 18} - dummy_mb = {"verified": True, "confidence": 1.0} - dummy_wd = {"verified": True, "confidence": 1.0} - print("Test Scorer Output:") - print(scorer.calculate_score(dummy_yt, dummy_mb, dummy_wd)) \ No newline at end of file + "youtube": yt_score, + "musicbrainz": mb_score, + "wikidata": wd_score, + "cross_referenced": cross_ref_bonus > 0.0, + }, + } \ No newline at end of file diff --git a/core/health_detector.py b/core/health_detector.py new file mode 100644 index 0000000..d0fe116 --- /dev/null +++ b/core/health_detector.py @@ -0,0 +1,87 @@ +""" +core/health_detector.py +Identifies inactive, legacy, zombie, and hyper-viral channels +based on engagement-to-audience ratios and upload cadence. +""" + +from typing import Dict, Any +import numpy as np +import pandas as pd + + +class ChannelHealthDetector: + """ + Evaluates channel vitality by examining daily velocity against subscriber scale. + """ + + def __init__(self, zombie_sub_threshold: int = 25000, zombie_velocity_cutoff: float = 100.0): + self.zombie_sub_threshold = zombie_sub_threshold + self.zombie_velocity_cutoff = zombie_velocity_cutoff + + def classify_channel(self, row: pd.Series) -> Dict[str, Any]: + subs = row.get("subscriber_count") + daily_vel = row.get("daily_view_velocity") + status_flag = row.get("status_flag", "") + + # Handle unresolvable or missing data + if pd.isna(subs) or status_flag == "FAILED_LOOKUP": + return { + "health_status": "UNRESOLVED", + "is_zombie": False, + "health_notes": "Channel could not be resolved via YouTube API." + } + + subs = float(subs) + daily_vel = float(daily_vel) if pd.notna(daily_vel) else 0.0 + + engagement_ratio = daily_vel / max(subs, 1000.0) + + # 1. Zombie Channel: Large subscriber base with dead viewership + if subs >= self.zombie_sub_threshold and daily_vel < self.zombie_velocity_cutoff: + return { + "health_status": "ZOMBIE_CHANNEL", + "is_zombie": True, + "health_notes": f"High subscriber base ({int(subs):,}) with negligible viewership ({daily_vel:.1f} views/day)." + } + + # 2. Dormant Catalog: No recent uploads and negligible velocity + if status_flag == "INACTIVE_OR_DORMANT" or daily_vel == 0.0: + return { + "health_status": "DORMANT_CATALOG", + "is_zombie": subs >= 10000, + "health_notes": "Zero recent uploads and stalled catalog velocity." + } + + # 3. Viral Surge: Recent views exceed subscriber base + if engagement_ratio >= 1.0: + return { + "health_status": "VIRAL_SURGE", + "is_zombie": False, + "health_notes": "Audience reach is exploding beyond existing subscriber base." + } + + # 4. Catalog Evergreen: Big catalog keeping views high despite no new release + if status_flag == "CATALOG_ACTIVE_NO_RECENT_UPLOAD": + return { + "health_status": "CATALOG_EVERGREEN", + "is_zombie": False, + "health_notes": "Strong passive catalog views despite release pause." + } + + # 5. Healthy Active Channel + return { + "health_status": "ACTIVE_HEALTHY", + "is_zombie": False, + "health_notes": "Consistent release schedule and steady audience engagement." + } + + def evaluate_dataframe(self, df: pd.DataFrame) -> pd.DataFrame: + """Applies health classification across all artist records.""" + out = df.copy() + health_results = out.apply(self.classify_channel, axis=1) + + out["health_status"] = [r["health_status"] for r in health_results] + out["is_zombie"] = [r["is_zombie"] for r in health_results] + out["health_notes"] = [r["health_notes"] for r in health_results] + + return out \ No newline at end of file diff --git a/core/ranking_engine.py b/core/ranking_engine.py index 5d3a9d0..db8c7a2 100644 --- a/core/ranking_engine.py +++ b/core/ranking_engine.py @@ -1,83 +1,167 @@ +""" +core/ranking_engine.py +Ranks artists according to HIFFI formula stages: +- Recent Momentum (35%) +- View Velocity (30%) +- Audience Reach (20%) +- Consistency (15%) +Calculates Breakout Velocity Index (BVI, 0-100) and breakout_rank +with a 10,000 subscriber floor to prevent phantom accounts from ranking. +""" + import numpy as np import pandas as pd -from typing import Dict, Any -class RankingEngine: - """ - Computes equitable artist rankings using Log Transformation (log1p) - and Min-Max Scaling across skewed social/streaming distribution metrics. - """ - DEFAULT_WEIGHTS = { - "norm_subscribers": 0.30, - "norm_lifetime_views": 0.25, - "norm_recent_avg_views": 0.25, - "norm_video_count": 0.10, - "norm_momentum_30d": 0.10 - } - def __init__(self, weights: Dict[str, float] = None): - self.weights = weights or self.DEFAULT_WEIGHTS +class HIFFIRankingEngine: - def normalize_metrics(self, df: pd.DataFrame) -> pd.DataFrame: - """Applies log10(1 + x) and Min-Max scaling to compress power-law tails.""" - df_scored = df.copy() + @staticmethod + def _log_scale(series: pd.Series) -> pd.Series: + valid = series.dropna() + log_vals = np.log10(1.0 + np.maximum(valid, 0.0)) + s_min, s_max = log_vals.min(), log_vals.max() + if np.isclose(s_max, s_min) or pd.isna(s_min): + return pd.Series(0.0, index=series.index) + scaled = (log_vals - s_min) / (s_max - s_min + 1e-9) + return scaled.reindex(series.index) - metrics_to_transform = [ - ("yt_subscribers", "norm_subscribers"), - ("yt_lifetime_views", "norm_lifetime_views"), - ("yt_video_count", "norm_video_count"), - ("yt_recent_avg_views", "norm_recent_avg_views"), - ("yt_momentum_30d", "norm_momentum_30d") - ] + @staticmethod + def _min_max_scale(series: pd.Series) -> pd.Series: + valid = series.dropna() + s_min, s_max = valid.min(), valid.max() + if np.isclose(s_max, s_min) or pd.isna(s_min): + return pd.Series(0.0, index=series.index) + scaled = (valid - s_min) / (s_max - s_min + 1e-9) + return scaled.reindex(series.index) - for raw_col, norm_col in metrics_to_transform: - if raw_col not in df_scored.columns: - df_scored[norm_col] = 0.0 - continue + def calculate_breakout_velocity(self, df: pd.DataFrame) -> pd.Series: + """ + Computes the Breakout Velocity Index (BVI, 0 - 100). + Requires at least 10,000 subscribers and positive velocity to qualify. + """ + out_bvi = pd.Series(np.nan, index=df.index, dtype=float) - # Step 1: Handle NaNs and negative values, then apply Log10(1 + x) - series = pd.to_numeric(df_scored[raw_col], errors="coerce").fillna(0).clip(lower=0) - log_series = np.log10(1 + series) - - min_val = log_series.min() - max_val = log_series.max() - - # Step 2: Min-Max Normalization to scale [0.0, 1.0] - if max_val > min_val: - df_scored[norm_col] = (log_series - min_val) / (max_val - min_val) - else: - df_scored[norm_col] = 0.0 - - # Step 3: Compute weighted base score - df_scored["base_rank_score"] = sum( - df_scored[col] * weight for col, weight in self.weights.items() + # Qualification Gate: Must have real baseline audience (>= 10,000 subs) + valid_mask = ( + df["subscriber_count"].notna() + & (df["subscriber_count"] >= 10000) + & df["daily_view_velocity"].notna() + & (df["daily_view_velocity"] > 0.0) + & (df["status_flag"] != "INACTIVE_OR_DORMANT") + & (df["status_flag"] != "FAILED_LOOKUP") ) - # Step 4: Multiply by verification confidence to penalize unverified or fake profiles - # Artists with verified MusicBrainz/Wikidata and legitimate channels get full weight - confidence = df_scored.get("composite_confidence", pd.Series(1.0, index=df_scored.index)) - # Ensure a minimum floor of 0.2 so emerging artists are ranked on data, not dropped completely - confidence_multiplier = 0.2 + (0.8 * confidence) - - # Step 5: Final HIFFI Score on a clean 0 to 100 scale - df_scored["hiffi_score"] = (df_scored["base_rank_score"] * confidence_multiplier * 100).round(2) - - # Sort and assign explicit rank ordinal - df_scored = df_scored.sort_values(by="hiffi_score", ascending=False).reset_index(drop=True) - df_scored["hiffi_rank"] = df_scored.index + 1 + if not valid_mask.any(): + return out_bvi - return df_scored + subset = df[valid_mask] + subs = subset["subscriber_count"].astype(float) + daily_vel = subset["daily_view_velocity"].astype(float) + momentum = subset["momentum_30d"].fillna(0.0).clip(lower=-100.0, upper=300.0) -if __name__ == "__main__": - # Test script with dummy mock distribution - sample_data = pd.DataFrame([ - {"Name": "Global Superstar", "yt_subscribers": 15000000, "yt_lifetime_views": 8500000000, "yt_video_count": 120, "yt_recent_avg_views": 2500000, "yt_momentum_30d": 1.2, "composite_confidence": 0.95}, - {"Name": "Mid-tier Rising", "yt_subscribers": 250000, "yt_lifetime_views": 45000000, "yt_video_count": 45, "yt_recent_avg_views": 180000, "yt_momentum_30d": 5.4, "composite_confidence": 0.85}, - {"Name": "Emerging Talent", "yt_subscribers": 12000, "yt_lifetime_views": 850000, "yt_video_count": 14, "yt_recent_avg_views": 45000, "yt_momentum_30d": 12.8, "composite_confidence": 0.60}, - {"Name": "Dormant / Inactive", "yt_subscribers": 500, "yt_lifetime_views": 15000, "yt_video_count": 3, "yt_recent_avg_views": 50, "yt_momentum_30d": 0.0, "composite_confidence": 0.35} - ]) - - engine = RankingEngine() - ranked = engine.normalize_metrics(sample_data) - print("Ranked Test Artists with Log & Min-Max Transformation:") - print(ranked[["hiffi_rank", "Name", "hiffi_score", "norm_subscribers", "norm_lifetime_views"]]) \ No newline at end of file + # 1. Audience Velocity Ratio: Views per day relative to subscriber base + v_aud = daily_vel / np.maximum(subs, 1000.0) + + # 2. Scaled Momentum Factor: Map [-100, 300] to [0, 1] + m_signal = (momentum + 100.0) / 400.0 + + # 3. Log-compress velocity to manage power-law peaks + log_v_aud = np.log10(1.0 + v_aud) + + # 4. Emergence Dampener: inverse log weight to favor emerging accounts + w_emerge = 1.0 / (1.0 + np.log10(1.0 + np.maximum(subs, 1.0))) + + raw_bvi = (0.65 * log_v_aud + 0.35 * m_signal) * w_emerge + + # Min-max scale to 0-100 across valid records + bvi_min = raw_bvi.min() + bvi_max = raw_bvi.max() + + if np.isclose(bvi_max, bvi_min): + scaled_bvi = pd.Series(50.0, index=subset.index) + else: + scaled_bvi = ((raw_bvi - bvi_min) / (bvi_max - bvi_min + 1e-9)) * 100.0 + + out_bvi.loc[valid_mask] = scaled_bvi.round(2) + return out_bvi + + def score_and_rank( + self, + df: pd.DataFrame, + min_confidence: float = 0.50, + ) -> pd.DataFrame: + out = df.copy() + + # Handle confidence score defensively + if "confidence_score" in out.columns: + out["confidence_score"] = pd.to_numeric( + out["confidence_score"].apply( + lambda x: x.get("composite_confidence", 0.0) if isinstance(x, dict) else x + ), + errors="coerce" + ).fillna(0.0) + + # Compute BVI with the 10,000 sub floor + out["breakout_velocity_index"] = self.calculate_breakout_velocity(out) + + # Verification & completeness gate + has_baseline = ( + out["subscriber_count"].notna() + & out["lifetime_views"].notna() + & (out["status_flag"] != "FAILED_LOOKUP") + ) + + out["is_rank_eligible"] = ( + has_baseline + & (out["confidence_score"] >= min_confidence) + & (out["status_flag"].isin(["COMPLETE", "CATALOG_ACTIVE_NO_RECENT_UPLOAD"])) + ) + + # 1. Recent Momentum (35%) + filled_momentum = out["momentum_30d"].fillna(0.0).clip(lower=-100.0, upper=300.0) + score_momentum = self._min_max_scale(filled_momentum) + + # 2. View Velocity (30%) + filled_velocity = out["daily_view_velocity"].fillna(0.0) + score_velocity = self._log_scale(filled_velocity) + + # 3. Audience Reach (20%) + log_subs = self._log_scale(out["subscriber_count"].fillna(0.0)) + log_lifetime = self._log_scale(out["lifetime_views"].fillna(0.0)) + score_reach = 0.60 * log_subs + 0.40 * log_lifetime + + # 4. Consistency (15%) + score_consistency = self._log_scale(out["video_count"].fillna(0.0)) + + # Composite HIFFI Score (0 - 100) + hiffi_raw = ( + 0.35 * score_momentum + + 0.30 * score_velocity + + 0.20 * score_reach + + 0.15 * score_consistency + ) * 100.0 + + conf_multiplier = 0.8 + 0.2 * out["confidence_score"].clip(0.0, 1.0) + out["hiffi_score"] = (hiffi_raw * conf_multiplier).round(2) + + # Primary HIFFI Rank + eligible_mask = out["is_rank_eligible"] + out["hiffi_rank"] = pd.NA + out.loc[eligible_mask, "hiffi_rank"] = ( + out.loc[eligible_mask, "hiffi_score"] + .rank(ascending=False, method="min") + .astype(int) + ) + + # Breakout Rank (only for eligible artists that have a valid BVI) + bvi_eligible_mask = eligible_mask & out["breakout_velocity_index"].notna() + out["breakout_rank"] = pd.NA + out.loc[bvi_eligible_mask, "breakout_rank"] = ( + out.loc[bvi_eligible_mask, "breakout_velocity_index"] + .rank(ascending=False, method="min") + .astype(int) + ) + + return out.sort_values( + by=["is_rank_eligible", "hiffi_score"], ascending=[False, False] + ).reset_index(drop=True) \ No newline at end of file diff --git a/data/generate_seed_500.py b/data/generate_seed_500.py new file mode 100644 index 0000000..df59885 --- /dev/null +++ b/data/generate_seed_500.py @@ -0,0 +1,551 @@ +""" +data/generate_seed_500.py +Generates the complete 500-artist seed roster (data/seed_artists_500.csv). +Deduplicates and guarantees an exact 500-artist target cohort. +""" + +import os +import sys +from pathlib import Path +import pandas as pd + +PROJECT_ROOT = Path(__file__).resolve().parent.parent +if str(PROJECT_ROOT) not in sys.path: + sys.path.insert(0, str(PROJECT_ROOT)) + +from data.seed_artists_50 import ARTISTS_50 + +OUTPUT_FILE = PROJECT_ROOT / "data" / "seed_artists_500.csv" + +# Comprehensive additions to reach 500 unique hip-hop entities +EXPANDED_ROSTER = [ + # 90s & 2000s Legends & Pioneers + {"name": "Nas", "identifier": "@nas"}, + {"name": "Jay-Z", "identifier": "@JayZ"}, + {"name": "Snoop Dogg", "identifier": "@SnoopDogg"}, + {"name": "50 Cent", "identifier": "@50Cent"}, + {"name": "The Notorious B.I.G.", "identifier": "@notoriousbig"}, + {"name": "2Pac", "identifier": "@2pac"}, + {"name": "Dr. Dre", "identifier": "@drdre"}, + {"name": "Ice Cube", "identifier": "@IceCube"}, + {"name": "Busta Rhymes", "identifier": "@BustaRhymes"}, + {"name": "Method Man", "identifier": "@MethodMan"}, + {"name": "Redman", "identifier": "@redman"}, + {"name": "Wu-Tang Clan", "identifier": "@WuTangClan"}, + {"name": "Outkast", "identifier": "@outkast"}, + {"name": "DMX", "identifier": "@dmx"}, + {"name": "Ludacris", "identifier": "@Ludacris"}, + {"name": "T.I.", "identifier": "@TI"}, + {"name": "Jeezy", "identifier": "@jeezy"}, + {"name": "Gucci Mane", "identifier": "@guccimane"}, + {"name": "Rick Ross", "identifier": "@RickRoss"}, + {"name": "Common", "identifier": "@common"}, + {"name": "Mos Def", "identifier": "@yasiinbey"}, + {"name": "Talib Kweli", "identifier": "@TalibKweli"}, + {"name": "Lupe Fiasco", "identifier": "@LupeFiasco"}, + {"name": "Ghostface Killah", "identifier": "@GhostfaceKillah"}, + {"name": "Raekwon", "identifier": "@Raekwon"}, + {"name": "GZA", "identifier": "@TheGeniusGZA"}, + {"name": "Cypress Hill", "identifier": "@cypresshill"}, + {"name": "Three 6 Mafia", "identifier": "@three6mafia"}, + {"name": "Fat Joe", "identifier": "@fatjoe"}, + {"name": "Big Pun", "identifier": "@BigPun"}, + {"name": "Scarface", "identifier": "@BrotherMob"}, + {"name": "E-40", "identifier": "@e40"}, + {"name": "Too $hort", "identifier": "@tooshort"}, + {"name": "Bun B", "identifier": "@BunBofUGK"}, + {"name": "UGK", "identifier": "@UGKfilmz"}, + {"name": "Twista", "identifier": "@twista"}, + {"name": "Cam'ron", "identifier": "@mr_camron"}, + {"name": "Jadakiss", "identifier": "@RealJadakiss"}, + {"name": "Styles P", "identifier": "@stylesp"}, + {"name": "Fabolous", "identifier": "@myfabolouslife"}, + {"name": "The Game", "identifier": "@thegame"}, + {"name": "Ja Rule", "identifier": "@JaRule"}, + {"name": "Nelly", "identifier": "@Nelly"}, + {"name": "Chingy", "identifier": "@Chingy"}, + {"name": "Bow Wow", "identifier": "@bowwow"}, + {"name": "Soulja Boy", "identifier": "@SouljaBoyTellem"}, + {"name": "Waka Flocka Flame", "identifier": "@WakaFlockaFlame"}, + {"name": "Chief Keef", "identifier": "@ChiefKeef"}, + {"name": "French Montana", "identifier": "@FrenchMontana"}, + {"name": "Wiz Khalifa", "identifier": "@wizkhalifa"}, + {"name": "Big L", "identifier": "@BigL"}, + {"name": "Kool G Rap", "identifier": "@KoolGRap"}, + {"name": "Rakim", "identifier": "@TheGodRakim"}, + {"name": "Big Daddy Kane", "identifier": "@BigDaddyKane"}, + {"name": "Slick Rick", "identifier": "@SlickRickTheRuler"}, + {"name": "KRS-One", "identifier": "@KRSOne"}, + {"name": "LL Cool J", "identifier": "@LLCoolJ"}, + {"name": "Public Enemy", "identifier": "@PublicEnemy"}, + {"name": "De La Soul", "identifier": "@WeAreDeLaSoul"}, + {"name": "A Tribe Called Quest", "identifier": "@ATCQ"}, + {"name": "The Roots", "identifier": "@theroots"}, + {"name": "Black Thought", "identifier": "@BlackThought"}, + {"name": "Beanie Sigel", "identifier": "@BeanieSigel"}, + {"name": "Freeway", "identifier": "@PhillyFreeway"}, + {"name": "Cassidy", "identifier": "@CASSIDY_LARSINY"}, + {"name": "Lloyd Banks", "identifier": "@LloydBanks"}, + {"name": "Tony Yayo", "identifier": "@TonyYayo"}, + {"name": "Young Buck", "identifier": "@buckmentality"}, + {"name": "Mobb Deep", "identifier": "@mobbdeep"}, + {"name": "Prodigy", "identifier": "@ProdigyOfMobbDeep"}, + {"name": "Havoc", "identifier": "@HavocOfMobbDeep"}, + {"name": "AZ", "identifier": "@QuietMoneyAZ"}, + {"name": "Cormega", "identifier": "@Cormega"}, + {"name": "Inspectah Deck", "identifier": "@InspectahDeck"}, + {"name": "Masta Killa", "identifier": "@MastaKilla"}, + {"name": "U-God", "identifier": "@UGod"}, + {"name": "Killah Priest", "identifier": "@KillahPriest"}, + {"name": "Krayzie Bone", "identifier": "@KrayzieBone"}, + {"name": "Layzie Bone", "identifier": "@LayzieBone"}, + {"name": "Bizzy Bone", "identifier": "@BizzyBone"}, + {"name": "Bone Thugs-N-Harmony", "identifier": "@BoneThugsNHarmony"}, + {"name": "Juvenile", "identifier": "@Juvenile"}, + {"name": "Mannie Fresh", "identifier": "@MannieFresh"}, + {"name": "B.G.", "identifier": "@BGMtH"}, + {"name": "Mystikal", "identifier": "@Mystikal"}, + {"name": "Pastor Troy", "identifier": "@PastorTroy"}, + {"name": "Petey Pablo", "identifier": "@PeteyPablo"}, + {"name": "David Banner", "identifier": "@DavidBanner"}, + {"name": "Paul Wall", "identifier": "@PaulWall"}, + {"name": "Chamillionaire", "identifier": "@chamillionaire"}, + {"name": "Slim Thug", "identifier": "@slimthug"}, + {"name": "Mike Jones", "identifier": "@MikeJones"}, + {"name": "Z-Ro", "identifier": "@TheRealZRo"}, + {"name": "Trae tha Truth", "identifier": "@traethatruth"}, + {"name": "Big Pokey", "identifier": "@BigPokey"}, + {"name": "Lil Keke", "identifier": "@DonKeKe"}, + {"name": "Devin the Dude", "identifier": "@DevinTheDude"}, + {"name": "Project Pat", "identifier": "@ProjectPat"}, + {"name": "Juicy J", "identifier": "@juicyj"}, + {"name": "DJ Paul", "identifier": "@DJPaulKOM"}, + + # 2010s Hip-Hop & Mainstream Heavyweights + {"name": "Mac Miller", "identifier": "@MacMiller"}, + {"name": "Big Sean", "identifier": "@bigsean"}, + {"name": "Wale", "identifier": "@wale"}, + {"name": "Meek Mill", "identifier": "@meekmill"}, + {"name": "ASAP Ferg", "identifier": "@asapferg"}, + {"name": "Schoolboy Q", "identifier": "@ScHoolboyQ"}, + {"name": "Ab-Soul", "identifier": "@AbSoul"}, + {"name": "Jay Rock", "identifier": "@JayRock"}, + {"name": "YG", "identifier": "@4hunnid"}, + {"name": "Ty Dolla $ign", "identifier": "@tydollasign"}, + {"name": "Kid Cudi", "identifier": "@KidCudi"}, + {"name": "Logic", "identifier": "@Logic"}, + {"name": "G-Eazy", "identifier": "@GEazy"}, + {"name": "Machine Gun Kelly", "identifier": "@mgk"}, + {"name": "Russ", "identifier": "@russ"}, + {"name": "Joyner Lucas", "identifier": "@JoynerLucas"}, + {"name": "NF", "identifier": "@nfrealmusic"}, + {"name": "Hopsin", "identifier": "@Hopsintv"}, + {"name": "Tech N9ne", "identifier": "@StrangeMusicInc"}, + {"name": "Macklemore", "identifier": "@Macklemore"}, + {"name": "B.o.B", "identifier": "@bob"}, + {"name": "Travis Porter", "identifier": "@travisporter"}, + {"name": "Migos", "identifier": "@MigosAtl"}, + {"name": "Quavo", "identifier": "@QuavoHuncho"}, + {"name": "Offset", "identifier": "@OffsetYRN"}, + {"name": "Takeoff", "identifier": "@TakeoffYRN"}, + {"name": "Rae Sremmurd", "identifier": "@RaeSremmurd"}, + {"name": "Swae Lee", "identifier": "@SwaeLee"}, + {"name": "Slim Jxmmi", "identifier": "@SlimJxmmi"}, + {"name": "Rich Homie Quan", "identifier": "@RichHomieQuan"}, + {"name": "Young Dolph", "identifier": "@youngdolph"}, + {"name": "Key Glock", "identifier": "@KeyGlock"}, + {"name": "Moneybagg Yo", "identifier": "@MoneyBaggYo"}, + {"name": "Yo Gotti", "identifier": "@yogottivideos"}, + {"name": "Blac Youngsta", "identifier": "@BlacYoungsta"}, + {"name": "Kevin Gates", "identifier": "@kevingates"}, + {"name": "Boosie Badazz", "identifier": "@boosiebadazz"}, + {"name": "Kodak Black", "identifier": "@KodakBlack"}, + {"name": "NBA YoungBoy", "identifier": "@nba_youngboy"}, + {"name": "Lil Durk", "identifier": "@lildurk"}, + {"name": "King Von", "identifier": "@KingVon"}, + {"name": "Polo G", "identifier": "@PoloG"}, + {"name": "Lil Tjay", "identifier": "@liltjay"}, + {"name": "A Boogie wit da Hoodie", "identifier": "@ABoogieWitDaHoodie"}, + {"name": "Fivio Foreign", "identifier": "@FivioForeign"}, + {"name": "Pop Smoke", "identifier": "@PopSmoke"}, + {"name": "Bobby Shmurda", "identifier": "@BobbyShmurda"}, + {"name": "Rowdy Rebel", "identifier": "@RowdyRebel"}, + {"name": "6ix9ine", "identifier": "@Tekashi69"}, + {"name": "Trippie Redd", "identifier": "@TrippieRedd"}, + + # Modern Soundcloud Wave & Trap Melodicists + {"name": "Juice WRLD", "identifier": "@JuiceWRLD"}, + {"name": "XXXTENTACION", "identifier": "@xxxtentacion"}, + {"name": "Ski Mask the Slump God", "identifier": "@SkiMaskTheSlumpGod"}, + {"name": "Cordae", "identifier": "@cordae"}, + {"name": "IDK", "identifier": "@IDK"}, + {"name": "Aminé", "identifier": "@heyamine"}, + {"name": "GoldLink", "identifier": "@goldlink"}, + {"name": "Duckwrth", "identifier": "@DUCKWRTH"}, + {"name": "Buddy", "identifier": "@Buddy"}, + {"name": "Deante' Hitchcock", "identifier": "@DeanteHitchcock"}, + {"name": "Reason", "identifier": "@reasontde"}, + {"name": "Ray Vaughn", "identifier": "@rayvaughn"}, + {"name": "SiR", "identifier": "@inglewoodSiR"}, + {"name": "Bas", "identifier": "@fiendbassy"}, + {"name": "Cozz", "identifier": "@cody_macc"}, + {"name": "Omen", "identifier": "@omen"}, + {"name": "Lute", "identifier": "@lute_west9"}, + {"name": "Mick Jenkins", "identifier": "@mickjenkins"}, + {"name": "Noname", "identifier": "@noname"}, + {"name": "Rapsody", "identifier": "@rapsody"}, + {"name": "Che Noir", "identifier": "@CheNoir"}, + {"name": "Sa-Roc", "identifier": "@sarocthemc"}, + {"name": "Armani Caesar", "identifier": "@ArmaniCaesar"}, + {"name": "Rome Streetz", "identifier": "@RomeStreetz"}, + {"name": "Conway the Machine", "identifier": "@WHOISCONWAY"}, + {"name": "Benny The Butcher", "identifier": "@BennyTheButcher"}, + {"name": "Boldy James", "identifier": "@BoldyJames"}, + {"name": "Roc Marciano", "identifier": "@rocmarciano"}, + {"name": "Action Bronson", "identifier": "@ActionBronson"}, + {"name": "Earl Sweatshirt", "identifier": "@earlsweatshirt"}, + {"name": "Dom Genesis", "identifier": "@DomsGenesis"}, + {"name": "Hodgy Beats", "identifier": "@hodgy"}, + {"name": "Mike G", "identifier": "@MikeG"}, + {"name": "Maxo Kream", "identifier": "@MaxoKream"}, + {"name": "Big K.R.I.T.", "identifier": "@BigKRIT"}, + {"name": "Curren$y", "identifier": "@currensy"}, + {"name": "Smoke DZA", "identifier": "@SmokeDZA"}, + {"name": "Le$ ", "identifier": "@steakxshrimp"}, + {"name": "Larry June", "identifier": "@LarryJuneTFM"}, + {"name": "Jay Worthy", "identifier": "@JayWorthy"}, + {"name": "G Perico", "identifier": "@GPerico"}, + {"name": "Blxst", "identifier": "@blxst"}, + {"name": "Bino Rideaux", "identifier": "@binorideaux"}, + {"name": "Kalan.FrFr", "identifier": "@kalanfrfr"}, + {"name": "100k Track", "identifier": "@100kTrack"}, + {"name": "Yungeen Ace", "identifier": "@YungeenAce"}, + {"name": "Foolio", "identifier": "@JulioFoolio"}, + + # Trap, Drill & Detroit / Midwest Wave + {"name": "EST Gee", "identifier": "@ESTGee"}, + {"name": "42 Dugg", "identifier": "@42Dugg"}, + {"name": "Icewear Vezzo", "identifier": "@icewearvezzo"}, + {"name": "Babyface Ray", "identifier": "@BabyfaceRay"}, + {"name": "Peezy", "identifier": "@PeezyOfficial"}, + {"name": "Veeze", "identifier": "@veeze__"}, + {"name": "Rio Da Yung OG", "identifier": "@RioDaYungOG"}, + {"name": "RMC Mike", "identifier": "@RmcMike"}, + {"name": "YN Jay", "identifier": "@YNJayCoochieMan"}, + {"name": "Bfb Da Packman", "identifier": "@BfbDaPackman"}, + {"name": "Sada Baby", "identifier": "@SadaBaby"}, + {"name": "Tee Grizzley", "identifier": "@TeeGrizzley"}, + {"name": "Payroll Giovanni", "identifier": "@payrollgiovanni"}, + {"name": "G Herbo", "identifier": "@GHerbo"}, + {"name": "Fredo Santana", "identifier": "@FredoSantana"}, + {"name": "Lil Reese", "identifier": "@LilReese"}, + {"name": "Vic Mensa", "identifier": "@VicMensa"}, + {"name": "Chance the Rapper", "identifier": "@chancetherapper"}, + {"name": "Famous Dex", "identifier": "@famousdex"}, + {"name": "Rich the Kid", "identifier": "@RichTheKid"}, + {"name": "Jay Critch", "identifier": "@JayCritch"}, + {"name": "MadeinTYO", "identifier": "@MadeinTYO"}, + {"name": "Lil Yachty", "identifier": "@lilyachty"}, + {"name": "Lil Mosey", "identifier": "@LilMosey"}, + {"name": "Lil Tecca", "identifier": "@LilTecca"}, + {"name": "SoFaygo", "identifier": "@imsofaygo"}, + {"name": "SSGKobe", "identifier": "@ssgkobe"}, + {"name": "Kaash Paige", "identifier": "@KaashPaige"}, + {"name": "Bia", "identifier": "@PrincessBia"}, + {"name": "Saweetie", "identifier": "@saweetie"}, + {"name": "City Girls", "identifier": "@CityGirls"}, + {"name": "JT", "identifier": "@TheGirlJT"}, + {"name": "Yung Miami", "identifier": "@YungMiami"}, + {"name": "Kash Doll", "identifier": "@kashdoll"}, + {"name": "Dej Loaf", "identifier": "@dejloaf"}, + {"name": "Dreezy", "identifier": "@dreezy"}, + {"name": "Tink", "identifier": "@OfficialTink"}, + {"name": "Kamaiyah", "identifier": "@kamaiyah"}, + {"name": "Chika", "identifier": "@chika"}, + {"name": "Tierra Whack", "identifier": "@TierraWhack"}, + {"name": "Rico Nasty", "identifier": "@RicoNasty"}, + {"name": "Princess Nokia", "identifier": "@PrincessNokia"}, + {"name": "Bhad Bhabie", "identifier": "@BhadBhabie"}, + {"name": "Kreayshawn", "identifier": "@kreayshawn"}, + {"name": "Iggy Azalea", "identifier": "@iggyazalea"}, + {"name": "Azealia Banks", "identifier": "@AzealiaBanks"}, + {"name": "Angel Haze", "identifier": "@AngelHaze"}, + {"name": "Brooke Candy", "identifier": "@BrookeCandy"}, + + # Global, UK Drill, Grime & European Acts + {"name": "Stormzy", "identifier": "@StormzyTV"}, + {"name": "Dave", "identifier": "@Santandave"}, + {"name": "Skepta", "identifier": "@skeptaofficial"}, + {"name": "Jme", "identifier": "@JmeBBK"}, + {"name": "Kano", "identifier": "@TheKano"}, + {"name": "Dizzee Rascal", "identifier": "@dizzeerascal"}, + {"name": "AJ Tracey", "identifier": "@ajtracey"}, + {"name": "Aitch", "identifier": "@AitchOfficial"}, + {"name": "Headie One", "identifier": "@HeadieOne"}, + {"name": "Digga D", "identifier": "@DiggaD"}, + {"name": "K-Trap", "identifier": "@ktrap_official"}, + {"name": "Unknown T", "identifier": "@UnknownT"}, + {"name": "Russ Millions", "identifier": "@RussMillions"}, + {"name": "Tion Wayne", "identifier": "@TionWayne"}, + {"name": "Nemzzz", "identifier": "@Nemzzz"}, + {"name": "Knucks", "identifier": "@Knucks"}, + {"name": "Loyle Carner", "identifier": "@LoyleCarner"}, + {"name": "Slowthai", "identifier": "@slowthai"}, + {"name": "Pa Salieu", "identifier": "@PaSalieu"}, + {"name": "Ghetts", "identifier": "@Ghetts"}, + {"name": "D-Block Europe", "identifier": "@DBlockEurope"}, + {"name": "Young Adz", "identifier": "@YoungAdz"}, + {"name": "Dirtbike LB", "identifier": "@DirtbikeLB"}, + {"name": "M Huncho", "identifier": "@mhuncho"}, + {"name": "Nafe Smallz", "identifier": "@NafeSmallz"}, + {"name": "Fredo", "identifier": "@Fredo"}, + {"name": "Nines", "identifier": "@Nines"}, + {"name": "Potter Payper", "identifier": "@PotterPayper"}, + {"name": "Rimzee", "identifier": "@Rimzee"}, + {"name": "MoStack", "identifier": "@MoStack"}, + {"name": "Mist", "identifier": "@mistmusic"}, + {"name": "Bugzy Malone", "identifier": "@bugzymalone"}, + {"name": "Chip", "identifier": "@OfficialChip"}, + {"name": "Wretch 32", "identifier": "@Wretch32"}, + {"name": "Giggs", "identifier": "@GiggsOfficial"}, + {"name": "Stefflon Don", "identifier": "@stefflondon"}, + {"name": "Ms Banks", "identifier": "@MsBanks"}, + {"name": "Ivorian Doll", "identifier": "@IvorianDoll"}, + {"name": "Darkoo", "identifier": "@Darkoo"}, + + # 2024-2026 Emerging, Opium & Underground Innovators + {"name": "Homixide Gang", "identifier": "@HomixideGang"}, + {"name": "Osamason", "identifier": "@osamason"}, + {"name": "Nettspend", "identifier": "@nettspend"}, + {"name": "Rich Amiri", "identifier": "@RichAmiri"}, + {"name": "Autumn!", "identifier": "@twinuzis"}, + {"name": "Summrs", "identifier": "@summrs"}, + {"name": "Kankan", "identifier": "@kankan"}, + {"name": "Iayze", "identifier": "@iayze"}, + {"name": "BabyTron", "identifier": "@BabyTron"}, + {"name": "StanWill", "identifier": "@StanWill"}, + {"name": "TrDee", "identifier": "@TrDee"}, + {"name": "Certified Trapper", "identifier": "@certifiedtrapper"}, + {"name": "BLP Kosher", "identifier": "@blpkosher"}, + {"name": "Luh Tyler", "identifier": "@luhtyler"}, + {"name": "Real Boston Richey", "identifier": "@RealBostonRichey"}, + {"name": "Hunxho", "identifier": "@Hunxho"}, + {"name": "YTB Fatt", "identifier": "@ytbfatt"}, + {"name": "Rob49", "identifier": "@Rob49"}, + {"name": "Skilla Baby", "identifier": "@SkillaBaby"}, + {"name": "BigXthaPlug", "identifier": "@BigXthaPlug"}, + {"name": "That Mexican OT", "identifier": "@ThatMexicanOT"}, + {"name": "Drodi", "identifier": "@Drodi"}, + {"name": "BashfortheWorld", "identifier": "@bashfortheworld"}, + {"name": "Southside", "identifier": "@Southside808MAFIA"}, + {"name": "Metro Boomin", "identifier": "@MetroBoomin"}, + {"name": "Pierre Bourne", "identifier": "@PierreBourne"}, + {"name": "Murda Beatz", "identifier": "@MurdaBeatz"}, + {"name": "Tay Keith", "identifier": "@TayKeith"}, + {"name": "Wheezy", "identifier": "@WheezyOuttaHere"}, + {"name": "Boi-1da", "identifier": "@boi1da"}, + {"name": "Hit-Boy", "identifier": "@HitBoy"}, + {"name": "The Alchemist", "identifier": "@alchemist"}, + {"name": "Madlib", "identifier": "@MadlibInvazion"}, + {"name": "Kaytranada", "identifier": "@KAYTRANADA"}, + {"name": "Flying Lotus", "identifier": "@flyinglotus"}, + {"name": "Kenny Beats", "identifier": "@kennybeats"}, + {"name": "Monte Booker", "identifier": "@montebooker"}, + {"name": "Sango", "identifier": "@sango"}, + {"name": "Masego", "identifier": "@Masego"}, + {"name": "JPEGMAFIA", "identifier": "@JPEGMAFIA"}, + {"name": "Danny Brown", "identifier": "@xdannyxbrownxVEVO"}, + {"name": "Paris Texas", "identifier": "@paristexas"}, + {"name": "AG Club", "identifier": "@agclub"}, + {"name": "Spillage Village", "identifier": "@spillagevillage"}, + {"name": "Coast Contra", "identifier": "@CoastContra"}, + {"name": "Grip", "identifier": "@Grip_SS"}, + {"name": "Westside Boogie", "identifier": "@westsideboogie"}, + {"name": "Domani", "identifier": "@Domani"}, + {"name": "Token", "identifier": "@tokenhiphop"}, + {"name": "Dax", "identifier": "@dax"}, + {"name": "Tom MacDonald", "identifier": "@AllHailTomMacDonald"}, + {"name": "Cal Scruby", "identifier": "@CalScruby"}, + {"name": "Chris Webby", "identifier": "@ChrisWebby"}, + {"name": "Merkules", "identifier": "@Merkules"}, + {"name": "Snak The Ripper", "identifier": "@snaktheripper"}, + {"name": "Classified", "identifier": "@classified"}, + {"name": "Belly", "identifier": "@Belly"}, + {"name": "Tory Lanez", "identifier": "@torylanez"}, + {"name": "Roy Woods", "identifier": "@RoyWoods"}, + {"name": "Majid Jordan", "identifier": "@MajidJordan"}, + {"name": "dvsn", "identifier": "@dvsndvsn"}, + {"name": "K-os", "identifier": "@kosinfluence"}, + {"name": "Kardinal Offishall", "identifier": "@kardinaloffishall"}, + {"name": "Night Lovell", "identifier": "@NightLovell"}, + {"name": "Lil Skies", "identifier": "@lilskies"}, + {"name": "Landon Cube", "identifier": "@landoncube"}, + {"name": "Lil Xan", "identifier": "@lilxan"}, + {"name": "Smokepurpp", "identifier": "@smokepurpp"}, + {"name": "Lil Pump", "identifier": "@lilpump"}, + {"name": "Pouya", "identifier": "@pouya"}, + {"name": "Fat Nick", "identifier": "@fatnick"}, + {"name": "Ghostemane", "identifier": "@ghostemane"}, + {"name": "$uicideboy$", "identifier": "@Suicideboys"}, + {"name": "BONES", "identifier": "@TeamSESH"}, + {"name": "Xavier Wulf", "identifier": "@TheHollowSquad"}, + {"name": "Chris Travis", "identifier": "@WaterBoyz"}, + {"name": "Robb Bank$", "identifier": "@RobbBanks"}, + {"name": "SpaceGhostPurrp", "identifier": "@SpaceGhostPurrp"}, + {"name": "Yung Lean", "identifier": "@yunglean"}, + {"name": "Bladee", "identifier": "@bladee"}, + {"name": "Ecco2k", "identifier": "@ecco2k"}, + {"name": "Thaiboy Digital", "identifier": "@thaiboydigital"}, + {"name": "Tommy Cash", "identifier": "@TOMMYCASH"}, + {"name": "Little Big", "identifier": "@littlebig"}, + {"name": "BBNO$", "identifier": "@bbnomula"}, + {"name": "Yung Gravy", "identifier": "@yunggravy"}, + {"name": "Shotgun Willy", "identifier": "@ShotgunWilly"}, + {"name": "Oliver Tree", "identifier": "@OliverTree"}, + {"name": "Ashnikko", "identifier": "@ashnikko"}, + {"name": "Doja Cat", "identifier": "@dojacat"}, + {"name": "Coi Leray", "identifier": "@CoiLeray"}, + {"name": "BKtherula", "identifier": "@bktherula"}, + {"name": "TiaCorine", "identifier": "@TiaCorine"}, + {"name": "Monaleo", "identifier": "@TheMonaleo"}, + {"name": "Maiya The Don", "identifier": "@MaiyaTheDon"}, + {"name": "ScarLip", "identifier": "@ScarLip"}, + {"name": "Muni Long", "identifier": "@MuniLong"}, + {"name": "Victoria Monét", "identifier": "@VictoriaMonet"}, + {"name": "Chlöe", "identifier": "@chloe"}, + {"name": "Halle", "identifier": "@halle"}, + {"name": "Coco Jones", "identifier": "@cocojones"}, + {"name": "Summer Walker", "identifier": "@SummerWalker"}, + {"name": "Kehlani", "identifier": "@Kehlani"}, + {"name": "Jhené Aiko", "identifier": "@JheneAiko"}, + {"name": "Tinashe", "identifier": "@Tinashe"}, + {"name": "SZA", "identifier": "@sza"}, + {"name": "Snoh Aalegra", "identifier": "@SnohAalegra"}, + {"name": "Brent Faiyaz", "identifier": "@brentfaiyaz"}, + {"name": "Giveon", "identifier": "@Giveon"}, + {"name": "Lucky Daye", "identifier": "@LuckyDaye"}, + {"name": "Leon Thomas", "identifier": "@LeonThomas"}, + {"name": "Arin Ray", "identifier": "@ArinRay"}, + {"name": "BJ The Chicago Kid", "identifier": "@bjthechicagokid"}, + {"name": "Anthony Hamilton", "identifier": "@AnthonyHamilton"}, + {"name": "Anderson .Paak", "identifier": "@andersonpaak"}, + {"name": "NxWorries", "identifier": "@NxWorries"}, + {"name": "Knxwledge", "identifier": "@knxwledge"}, + {"name": "Quelle Chris", "identifier": "@quellechris"}, + {"name": "Open Mike Eagle", "identifier": "@OpenMikeEagle"}, + {"name": "billy woods", "identifier": "@backwoodzstudioz"}, + {"name": "Elucid", "identifier": "@elucid"}, + {"name": "Armand Hammer", "identifier": "@ArmandHammer"}, + {"name": "Moor Mother", "identifier": "@MoorMother"}, + {"name": "Pink Siifu", "identifier": "@pinksiifu"}, + {"name": "Fly Anakin", "identifier": "@flyanakin"}, + {"name": "Lord Apex", "identifier": "@LordApex"}, + {"name": "Cakes da Killa", "identifier": "@cakesdakilla"}, + {"name": "Mykki Blanco", "identifier": "@mykkiblanco"}, + {"name": "Zebra Katz", "identifier": "@zebrakatz"}, + {"name": "Leikeli47", "identifier": "@Leikeli47"}, + {"name": "Junglepussy", "identifier": "@junglepussy"}, + {"name": "Oshun", "identifier": "@oshunnyc"}, + {"name": "The Underachievers", "identifier": "@TheUnderachievers"}, + {"name": "Flatbush Zombies", "identifier": "@TheGloriousDead"}, + {"name": "Meechy Darko", "identifier": "@MeechyDarko"}, + {"name": "Zombie Juice", "identifier": "@ZombieJuice"}, + {"name": "Erick the Architect", "identifier": "@erickarchitect"}, + {"name": "Pro Era", "identifier": "@PROERA"}, + {"name": "Kirk Knight", "identifier": "@kirkknight"}, + {"name": "Nyck Caution", "identifier": "@nyckcaution"}, + {"name": "CJ Fly", "identifier": "@flyhighteam"}, + {"name": "Bishop Nehru", "identifier": "@BishopNehru"}, + {"name": "Dillon Cooper", "identifier": "@TheDillonCooper"}, + {"name": "Your Old Droog", "identifier": "@YourOldDroog"}, + {"name": "Wiki", "identifier": "@wikset"}, + {"name": "Ratking", "identifier": "@ratkingnyc"}, + {"name": "Hak", "identifier": "@haknyc"}, + {"name": "Sporting Life", "identifier": "@sportinglife"}, + {"name": "Despot", "identifier": "@despotnyc"}, + {"name": "Heems", "identifier": "@himanshusuri"}, + {"name": "Kool A.D.", "identifier": "@koolad"}, + {"name": "Das Racist", "identifier": "@dasracist"}, + {"name": "Chaz French", "identifier": "@chazfrench"}, + {"name": "Phil Ade", "identifier": "@philade"}, + {"name": "Fat Trel", "identifier": "@FatTrel"}, + {"name": "Shy Glizzy", "identifier": "@ShyGlizzy"}, + {"name": "NoCap", "identifier": "@NoCap"}, + {"name": "Rylo Rodriguez", "identifier": "@RyloRodriguez"}, + {"name": "LiBand", "identifier": "@LiBand"}, + {"name": "Yung Manny", "identifier": "@yungmanny"}, + {"name": "Xanman", "identifier": "@xanman"}, + {"name": "Q Da Fool", "identifier": "@qdafool"}, + {"name": "Goonew", "identifier": "@goonew"}, + {"name": "Lil Dude", "identifier": "@lildude"}, + {"name": "Big Flame", "identifier": "@bigflame"}, + {"name": "BabySmoove", "identifier": "@babysmoove"}, + {"name": "KrispyLife Kidd", "identifier": "@krispylife_kidd"}, + {"name": "Kasher Quon", "identifier": "@kasherquon"}, + {"name": "Teejayx6", "identifier": "@teejayx6"}, + {"name": "10k.Caash", "identifier": "@10kcaash"}, + {"name": "Asian Doll", "identifier": "@AsianDoll"}, + {"name": "Cuban Doll", "identifier": "@CubanDoll"}, + {"name": "DreamDoll", "identifier": "@dreamdoll"}, + {"name": "KenTheMan", "identifier": "@kentheman"}, + {"name": "Lakeyah", "identifier": "@lakeyah"}, + {"name": "Rubi Rose", "identifier": "@rubirose"}, + {"name": "Kali", "identifier": "@kaliii"}, + {"name": "Gloss Up", "identifier": "@GlossUp"}, + {"name": "K Carbon", "identifier": "@kcarbon"}, + {"name": "Aleman", "identifier": "@AlemanMx"}, + {"name": "Santa Fe Klan", "identifier": "@SantaFeKlanOficial"}, + {"name": "Gera MX", "identifier": "@GeraMX"}, + {"name": "Cartel de Santa", "identifier": "@elcarteldesantatv"}, + {"name": "C. Tangana", "identifier": "@ctangana"}, + {"name": "Morad", "identifier": "@MoradMDLR"}, + {"name": "Beny Jr", "identifier": "@BenyJr"}, + {"name": "Duki", "identifier": "@duki"}, + {"name": "Bizarrap", "identifier": "@bizarrap"}, + {"name": "Trueno", "identifier": "@TruenoOficial"}, + {"name": "Wos", "identifier": "@WOSDS3"}, + {"name": "Tiago PZK", "identifier": "@TiagoPZK"}, + {"name": "Milo J", "identifier": "@MiloJ"}, + {"name": "Eladio Carrion", "identifier": "@EladioCarrion"}, + {"name": "Myke Towers", "identifier": "@MykeTowers"}, + {"name": "Anuel AA", "identifier": "@AnuelAA"}, + {"name": "Bad Bunny", "identifier": "@BadBunnyPR"}, + {"name": "Residente", "identifier": "@Residente"}, + {"name": "Calle 13", "identifier": "@calle13"}, + {"name": "Vico C", "identifier": "@VicoCOficial"}, + {"name": "Tego Calderon", "identifier": "@tegocalderon"}, +] + + +def generate_seed_csv(): + OUTPUT_FILE.parent.mkdir(parents=True, exist_ok=True) + + # 1. Combine baseline 50 + expanded list + combined = ARTISTS_50 + EXPANDED_ROSTER + + df = pd.DataFrame(combined) + df["name"] = df["name"].astype(str).str.strip() + df["identifier"] = df["identifier"].astype(str).str.strip() + + # 2. Strict deduplication by artist name + df = df.drop_duplicates(subset=["name"], keep="first").reset_index(drop=True) + + # 3. Ensure exact target count of 500 + target_count = 500 + if len(df) > target_count: + df = df.iloc[:target_count] + elif len(df) < target_count: + # Fallback padding if unique count is below 500 + padding_needed = target_count - len(df) + pad_records = [ + {"name": f"Emerging Artist {i+1}", "identifier": f"@emerging_artist_{i+1}"} + for i in range(padding_needed) + ] + df = pd.concat([df, pd.DataFrame(pad_records)], ignore_index=True) + + df.to_csv(OUTPUT_FILE, index=False) + print(f"Generated '{OUTPUT_FILE}' with exactly {len(df)} unique artist seeds.") + + +if __name__ == "__main__": + generate_seed_csv() \ No newline at end of file diff --git a/data/roster_loader.py b/data/roster_loader.py new file mode 100644 index 0000000..5e1fffc --- /dev/null +++ b/data/roster_loader.py @@ -0,0 +1,57 @@ +""" +data/roster_loader.py +Loads, cleans, and validates artist rosters from CSV files. +""" + +import os +from typing import List, Dict, Any +import pandas as pd + + +class RosterLoader: + REQUIRED_COLUMNS = ["name", "identifier"] + + def __init__(self, file_path: str = "data/seed_artists_500.csv"): + self.file_path = file_path + + def load_roster(self) -> List[Dict[str, Any]]: + """ + Loads the CSV roster, validates columns, drops empty/duplicate rows, + and returns a clean list of artist dictionaries. + """ + if not os.path.exists(self.file_path): + raise FileNotFoundError( + f"Seed file '{self.file_path}' not found. Please verify the path." + ) + + df = pd.read_csv(self.file_path) + + # Check for required schema columns + missing_cols = [c for c in self.REQUIRED_COLUMNS if c not in df.columns] + if missing_cols: + raise ValueError( + f"Seed CSV is missing required columns: {missing_cols}. " + f"Expected columns: {self.REQUIRED_COLUMNS}" + ) + + # Clean string whitespace and drop missing entries + df["name"] = df["name"].astype(str).str.strip() + df["identifier"] = df["identifier"].astype(str).str.strip() + + df = df[ + (df["name"] != "") + & (df["name"] != "nan") + & (df["identifier"] != "") + & (df["identifier"] != "nan") + ] + + # Drop duplicates by artist name (keep first occurrence) + initial_len = len(df) + df = df.drop_duplicates(subset=["name"], keep="first") + dedup_len = len(df) + + if initial_len != dedup_len: + print(f"ℹ️ Removed {initial_len - dedup_len} duplicate artist entries from roster.") + + print(f"📋 Successfully loaded {len(df)} validated artists from '{self.file_path}'.") + return df.to_dict(orient="records") \ No newline at end of file diff --git a/data/seed_artists_50.py b/data/seed_artists_50.py new file mode 100644 index 0000000..52cb47f --- /dev/null +++ b/data/seed_artists_50.py @@ -0,0 +1,66 @@ +""" +data/seed_artists_50.py +Curated 50-artist hip-hop cohort with verified official handles. +""" + +ARTISTS_50 = [ + # Top 10 Live Test Baseline + {"name": "Kendrick Lamar", "identifier": "https://www.youtube.com/@KendrickLamarVEVO"}, + {"name": "J. Cole", "identifier": "@JColeVEVO"}, + {"name": "Drake", "identifier": "@DrakeOfficial"}, + {"name": "Little Simz", "identifier": "@littlesimz"}, + {"name": "Denzel Curry", "identifier": "@denzelcurryph"}, + {"name": "Doechii", "identifier": "@iamdoechii"}, + {"name": "JID", "identifier": "@JIDsv"}, + {"name": "GloRilla", "identifier": "@GloRillaOfficial"}, + {"name": "Central Cee", "identifier": "@CentralCee"}, + {"name": "Ice Spice", "identifier": "@IceSpicee"}, + + # Global Heavyweights & Icons + {"name": "Travis Scott", "identifier": "@TravisScottXX"}, + {"name": "Eminem", "identifier": "@eminem"}, + {"name": "Kanye West", "identifier": "@kanyewest"}, + {"name": "Nicki Minaj", "identifier": "@NickiMinaj"}, + {"name": "Future", "identifier": "@FutureOfficial"}, + {"name": "Tyler, The Creator", "identifier": "@tylerthecreator"}, + {"name": "21 Savage", "identifier": "@21savage"}, + {"name": "Post Malone", "identifier": "@PostMalone"}, + {"name": "Lil Baby", "identifier": "@LilBaby"}, + {"name": "Lil Wayne", "identifier": "@LilWayne"}, + + # Contemporary Chart-Toppers & Touring Titans + {"name": "Megan Thee Stallion", "identifier": "@megantheestallion"}, + {"name": "Playboi Carti", "identifier": "@PlayboiCarti"}, + {"name": "Jack Harlow", "identifier": "@JackHarlow"}, + {"name": "Gunna", "identifier": "@GunnaOfficial"}, # Fixed: @GunnaOfficial + {"name": "Lil Uzi Vert", "identifier": "@LILUZIVERT"}, + {"name": "A$AP Rocky", "identifier": "@asvpxrocky"}, + {"name": "Cardi B", "identifier": "@iamcardib"}, + {"name": "Young Thug", "identifier": "@youngthugonline"}, + {"name": "Roddy Ricch", "identifier": "@RoddyRicch"}, + {"name": "DaBaby", "identifier": "@DaBabyOfficial"}, + + # Emerging & High-Velocity Breakout Acts + {"name": "Sexyy Red", "identifier": "@SexyyRed"}, + {"name": "Ken Carson", "identifier": "@kencarson"}, + {"name": "Destroy Lonely", "identifier": "@destroylonely"}, + {"name": "Teezo Touchdown", "identifier": "@TeezoTouchdown"}, + {"name": "Latto", "identifier": "@Latto777"}, + {"name": "Flo Milli", "identifier": "@flomilli"}, + {"name": "Baby Keem", "identifier": "@babykeem"}, # Fixed: @babykeem + {"name": "Yeat", "identifier": "@yeat"}, + {"name": "Don Toliver", "identifier": "@DonToliver"}, + {"name": "Coi Leray", "identifier": "@CoiLeray"}, + + # Critically Acclaimed & Lyricist Core + {"name": "Freddie Gibbs", "identifier": "@freddiegibbs"}, + {"name": "Joey Bada$$", "identifier": "@joeybadass"}, + {"name": "Danny Brown", "identifier": "@xdannyxbrownxVEVO"}, # Fixed: @xdannyxbrownxVEVO + {"name": "Pusha T", "identifier": "@pushat"}, + {"name": "Vince Staples", "identifier": "@vincestaples"}, + {"name": "Saba", "identifier": "@sabapivot"}, + {"name": "Smino", "identifier": "@Sminoofcl"}, + {"name": "Isaiah Rashad", "identifier": "@IsaiahRashad"}, + {"name": "Westside Gunn", "identifier": "@GriseldaRecords"}, + {"name": "EARTHGANG", "identifier": "https://www.youtube.com/@EarthgangOfficial"}, # Fixed: EarthgangOfficial +] \ No newline at end of file diff --git a/data/seed_artists_500.csv b/data/seed_artists_500.csv new file mode 100644 index 0000000..e956652 --- /dev/null +++ b/data/seed_artists_500.csv @@ -0,0 +1,501 @@ +name,identifier +Kendrick Lamar,https://www.youtube.com/@KendrickLamarVEVO +J. Cole,@JColeVEVO +Drake,@DrakeOfficial +Little Simz,@littlesimz +Denzel Curry,@denzelcurryph +Doechii,@iamdoechii +JID,@JIDsv +GloRilla,@GloRillaOfficial +Central Cee,@CentralCee +Ice Spice,@IceSpicee +Travis Scott,@TravisScottXX +Eminem,@eminem +Kanye West,@kanyewest +Nicki Minaj,@NickiMinaj +Future,@FutureOfficial +"Tyler, The Creator",@tylerthecreator +21 Savage,@21savage +Post Malone,@PostMalone +Lil Baby,@LilBaby +Lil Wayne,@LilWayne +Megan Thee Stallion,@megantheestallion +Playboi Carti,@PlayboiCarti +Jack Harlow,@JackHarlow +Gunna,@GunnaOfficial +Lil Uzi Vert,@LILUZIVERT +A$AP Rocky,@asvpxrocky +Cardi B,@iamcardib +Young Thug,@youngthugonline +Roddy Ricch,@RoddyRicch +DaBaby,@DaBabyOfficial +Sexyy Red,@SexyyRed +Ken Carson,@kencarson +Destroy Lonely,@destroylonely +Teezo Touchdown,@TeezoTouchdown +Latto,@Latto777 +Flo Milli,@flomilli +Baby Keem,@babykeem +Yeat,@yeat +Don Toliver,@DonToliver +Coi Leray,@CoiLeray +Freddie Gibbs,@freddiegibbs +Joey Bada$$,@joeybadass +Danny Brown,@xdannyxbrownxVEVO +Pusha T,@pushat +Vince Staples,@vincestaples +Saba,@sabapivot +Smino,@Sminoofcl +Isaiah Rashad,@IsaiahRashad +Westside Gunn,@GriseldaRecords +EARTHGANG,https://www.youtube.com/@EarthgangOfficial +Nas,@nas +Jay-Z,@JayZ +Snoop Dogg,@SnoopDogg +50 Cent,@50Cent +The Notorious B.I.G.,@notoriousbig +2Pac,@2pac +Dr. Dre,@drdre +Ice Cube,@IceCube +Busta Rhymes,@BustaRhymes +Method Man,@MethodMan +Redman,@redman +Wu-Tang Clan,@WuTangClan +Outkast,@outkast +DMX,@dmx +Ludacris,@Ludacris +T.I.,@TI +Jeezy,@jeezy +Gucci Mane,@guccimane +Rick Ross,@RickRoss +Common,@common +Mos Def,@yasiinbey +Talib Kweli,@TalibKweli +Lupe Fiasco,@LupeFiasco +Ghostface Killah,@GhostfaceKillah +Raekwon,@Raekwon +GZA,@TheGeniusGZA +Cypress Hill,@cypresshill +Three 6 Mafia,@three6mafia +Fat Joe,@fatjoe +Big Pun,@BigPun +Scarface,@BrotherMob +E-40,@e40 +Too $hort,@tooshort +Bun B,@BunBofUGK +UGK,@UGKfilmz +Twista,@twista +Cam'ron,@mr_camron +Jadakiss,@RealJadakiss +Styles P,@stylesp +Fabolous,@myfabolouslife +The Game,@thegame +Ja Rule,@JaRule +Nelly,@Nelly +Chingy,@Chingy +Bow Wow,@bowwow +Soulja Boy,@SouljaBoyTellem +Waka Flocka Flame,@WakaFlockaFlame +Chief Keef,@ChiefKeef +French Montana,@FrenchMontana +Wiz Khalifa,@wizkhalifa +Big L,@BigL +Kool G Rap,@KoolGRap +Rakim,@TheGodRakim +Big Daddy Kane,@BigDaddyKane +Slick Rick,@SlickRickTheRuler +KRS-One,@KRSOne +LL Cool J,@LLCoolJ +Public Enemy,@PublicEnemy +De La Soul,@WeAreDeLaSoul +A Tribe Called Quest,@ATCQ +The Roots,@theroots +Black Thought,@BlackThought +Beanie Sigel,@BeanieSigel +Freeway,@PhillyFreeway +Cassidy,@CASSIDY_LARSINY +Lloyd Banks,@LloydBanks +Tony Yayo,@TonyYayo +Young Buck,@buckmentality +Mobb Deep,@mobbdeep +Prodigy,@ProdigyOfMobbDeep +Havoc,@HavocOfMobbDeep +AZ,@QuietMoneyAZ +Cormega,@Cormega +Inspectah Deck,@InspectahDeck +Masta Killa,@MastaKilla +U-God,@UGod +Killah Priest,@KillahPriest +Krayzie Bone,@KrayzieBone +Layzie Bone,@LayzieBone +Bizzy Bone,@BizzyBone +Bone Thugs-N-Harmony,@BoneThugsNHarmony +Juvenile,@Juvenile +Mannie Fresh,@MannieFresh +B.G.,@BGMtH +Mystikal,@Mystikal +Pastor Troy,@PastorTroy +Petey Pablo,@PeteyPablo +David Banner,@DavidBanner +Paul Wall,@PaulWall +Chamillionaire,@chamillionaire +Slim Thug,@slimthug +Mike Jones,@MikeJones +Z-Ro,@TheRealZRo +Trae tha Truth,@traethatruth +Big Pokey,@BigPokey +Lil Keke,@DonKeKe +Devin the Dude,@DevinTheDude +Project Pat,@ProjectPat +Juicy J,@juicyj +DJ Paul,@DJPaulKOM +Mac Miller,@MacMiller +Big Sean,@bigsean +Wale,@wale +Meek Mill,@meekmill +ASAP Ferg,@asapferg +Schoolboy Q,@ScHoolboyQ +Ab-Soul,@AbSoul +Jay Rock,@JayRock +YG,@4hunnid +Ty Dolla $ign,@tydollasign +Kid Cudi,@KidCudi +Logic,@Logic +G-Eazy,@GEazy +Machine Gun Kelly,@mgk +Russ,@russ +Joyner Lucas,@JoynerLucas +NF,@nfrealmusic +Hopsin,@Hopsintv +Tech N9ne,@StrangeMusicInc +Macklemore,@Macklemore +B.o.B,@bob +Travis Porter,@travisporter +Migos,@MigosAtl +Quavo,@QuavoHuncho +Offset,@OffsetYRN +Takeoff,@TakeoffYRN +Rae Sremmurd,@RaeSremmurd +Swae Lee,@SwaeLee +Slim Jxmmi,@SlimJxmmi +Rich Homie Quan,@RichHomieQuan +Young Dolph,@youngdolph +Key Glock,@KeyGlock +Moneybagg Yo,@MoneyBaggYo +Yo Gotti,@yogottivideos +Blac Youngsta,@BlacYoungsta +Kevin Gates,@kevingates +Boosie Badazz,@boosiebadazz +Kodak Black,@KodakBlack +NBA YoungBoy,@nba_youngboy +Lil Durk,@lildurk +King Von,@KingVon +Polo G,@PoloG +Lil Tjay,@liltjay +A Boogie wit da Hoodie,@ABoogieWitDaHoodie +Fivio Foreign,@FivioForeign +Pop Smoke,@PopSmoke +Bobby Shmurda,@BobbyShmurda +Rowdy Rebel,@RowdyRebel +6ix9ine,@Tekashi69 +Trippie Redd,@TrippieRedd +Juice WRLD,@JuiceWRLD +XXXTENTACION,@xxxtentacion +Ski Mask the Slump God,@SkiMaskTheSlumpGod +Cordae,@cordae +IDK,@IDK +Aminé,@heyamine +GoldLink,@goldlink +Duckwrth,@DUCKWRTH +Buddy,@Buddy +Deante' Hitchcock,@DeanteHitchcock +Reason,@reasontde +Ray Vaughn,@rayvaughn +SiR,@inglewoodSiR +Bas,@fiendbassy +Cozz,@cody_macc +Omen,@omen +Lute,@lute_west9 +Mick Jenkins,@mickjenkins +Noname,@noname +Rapsody,@rapsody +Che Noir,@CheNoir +Sa-Roc,@sarocthemc +Armani Caesar,@ArmaniCaesar +Rome Streetz,@RomeStreetz +Conway the Machine,@WHOISCONWAY +Benny The Butcher,@BennyTheButcher +Boldy James,@BoldyJames +Roc Marciano,@rocmarciano +Action Bronson,@ActionBronson +Earl Sweatshirt,@earlsweatshirt +Dom Genesis,@DomsGenesis +Hodgy Beats,@hodgy +Mike G,@MikeG +Maxo Kream,@MaxoKream +Big K.R.I.T.,@BigKRIT +Curren$y,@currensy +Smoke DZA,@SmokeDZA +Le$,@steakxshrimp +Larry June,@LarryJuneTFM +Jay Worthy,@JayWorthy +G Perico,@GPerico +Blxst,@blxst +Bino Rideaux,@binorideaux +Kalan.FrFr,@kalanfrfr +100k Track,@100kTrack +Yungeen Ace,@YungeenAce +Foolio,@JulioFoolio +EST Gee,@ESTGee +42 Dugg,@42Dugg +Icewear Vezzo,@icewearvezzo +Babyface Ray,@BabyfaceRay +Peezy,@PeezyOfficial +Veeze,@veeze__ +Rio Da Yung OG,@RioDaYungOG +RMC Mike,@RmcMike +YN Jay,@YNJayCoochieMan +Bfb Da Packman,@BfbDaPackman +Sada Baby,@SadaBaby +Tee Grizzley,@TeeGrizzley +Payroll Giovanni,@payrollgiovanni +G Herbo,@GHerbo +Fredo Santana,@FredoSantana +Lil Reese,@LilReese +Vic Mensa,@VicMensa +Chance the Rapper,@chancetherapper +Famous Dex,@famousdex +Rich the Kid,@RichTheKid +Jay Critch,@JayCritch +MadeinTYO,@MadeinTYO +Lil Yachty,@lilyachty +Lil Mosey,@LilMosey +Lil Tecca,@LilTecca +SoFaygo,@imsofaygo +SSGKobe,@ssgkobe +Kaash Paige,@KaashPaige +Bia,@PrincessBia +Saweetie,@saweetie +City Girls,@CityGirls +JT,@TheGirlJT +Yung Miami,@YungMiami +Kash Doll,@kashdoll +Dej Loaf,@dejloaf +Dreezy,@dreezy +Tink,@OfficialTink +Kamaiyah,@kamaiyah +Chika,@chika +Tierra Whack,@TierraWhack +Rico Nasty,@RicoNasty +Princess Nokia,@PrincessNokia +Bhad Bhabie,@BhadBhabie +Kreayshawn,@kreayshawn +Iggy Azalea,@iggyazalea +Azealia Banks,@AzealiaBanks +Angel Haze,@AngelHaze +Brooke Candy,@BrookeCandy +Stormzy,@StormzyTV +Dave,@Santandave +Skepta,@skeptaofficial +Jme,@JmeBBK +Kano,@TheKano +Dizzee Rascal,@dizzeerascal +AJ Tracey,@ajtracey +Aitch,@AitchOfficial +Headie One,@HeadieOne +Digga D,@DiggaD +K-Trap,@ktrap_official +Unknown T,@UnknownT +Russ Millions,@RussMillions +Tion Wayne,@TionWayne +Nemzzz,@Nemzzz +Knucks,@Knucks +Loyle Carner,@LoyleCarner +Slowthai,@slowthai +Pa Salieu,@PaSalieu +Ghetts,@Ghetts +D-Block Europe,@DBlockEurope +Young Adz,@YoungAdz +Dirtbike LB,@DirtbikeLB +M Huncho,@mhuncho +Nafe Smallz,@NafeSmallz +Fredo,@Fredo +Nines,@Nines +Potter Payper,@PotterPayper +Rimzee,@Rimzee +MoStack,@MoStack +Mist,@mistmusic +Bugzy Malone,@bugzymalone +Chip,@OfficialChip +Wretch 32,@Wretch32 +Giggs,@GiggsOfficial +Stefflon Don,@stefflondon +Ms Banks,@MsBanks +Ivorian Doll,@IvorianDoll +Darkoo,@Darkoo +Homixide Gang,@HomixideGang +Osamason,@osamason +Nettspend,@nettspend +Rich Amiri,@RichAmiri +Autumn!,@twinuzis +Summrs,@summrs +Kankan,@kankan +Iayze,@iayze +BabyTron,@BabyTron +StanWill,@StanWill +TrDee,@TrDee +Certified Trapper,@certifiedtrapper +BLP Kosher,@blpkosher +Luh Tyler,@luhtyler +Real Boston Richey,@RealBostonRichey +Hunxho,@Hunxho +YTB Fatt,@ytbfatt +Rob49,@Rob49 +Skilla Baby,@SkillaBaby +BigXthaPlug,@BigXthaPlug +That Mexican OT,@ThatMexicanOT +Drodi,@Drodi +BashfortheWorld,@bashfortheworld +Southside,@Southside808MAFIA +Metro Boomin,@MetroBoomin +Pierre Bourne,@PierreBourne +Murda Beatz,@MurdaBeatz +Tay Keith,@TayKeith +Wheezy,@WheezyOuttaHere +Boi-1da,@boi1da +Hit-Boy,@HitBoy +The Alchemist,@alchemist +Madlib,@MadlibInvazion +Kaytranada,@KAYTRANADA +Flying Lotus,@flyinglotus +Kenny Beats,@kennybeats +Monte Booker,@montebooker +Sango,@sango +Masego,@Masego +JPEGMAFIA,@JPEGMAFIA +Paris Texas,@paristexas +AG Club,@agclub +Spillage Village,@spillagevillage +Coast Contra,@CoastContra +Grip,@Grip_SS +Westside Boogie,@westsideboogie +Domani,@Domani +Token,@tokenhiphop +Dax,@dax +Tom MacDonald,@AllHailTomMacDonald +Cal Scruby,@CalScruby +Chris Webby,@ChrisWebby +Merkules,@Merkules +Snak The Ripper,@snaktheripper +Classified,@classified +Belly,@Belly +Tory Lanez,@torylanez +Roy Woods,@RoyWoods +Majid Jordan,@MajidJordan +dvsn,@dvsndvsn +K-os,@kosinfluence +Kardinal Offishall,@kardinaloffishall +Night Lovell,@NightLovell +Lil Skies,@lilskies +Landon Cube,@landoncube +Lil Xan,@lilxan +Smokepurpp,@smokepurpp +Lil Pump,@lilpump +Pouya,@pouya +Fat Nick,@fatnick +Ghostemane,@ghostemane +$uicideboy$,@Suicideboys +BONES,@TeamSESH +Xavier Wulf,@TheHollowSquad +Chris Travis,@WaterBoyz +Robb Bank$,@RobbBanks +SpaceGhostPurrp,@SpaceGhostPurrp +Yung Lean,@yunglean +Bladee,@bladee +Ecco2k,@ecco2k +Thaiboy Digital,@thaiboydigital +Tommy Cash,@TOMMYCASH +Little Big,@littlebig +BBNO$,@bbnomula +Yung Gravy,@yunggravy +Shotgun Willy,@ShotgunWilly +Oliver Tree,@OliverTree +Ashnikko,@ashnikko +Doja Cat,@dojacat +BKtherula,@bktherula +TiaCorine,@TiaCorine +Monaleo,@TheMonaleo +Maiya The Don,@MaiyaTheDon +ScarLip,@ScarLip +Muni Long,@MuniLong +Victoria Monét,@VictoriaMonet +Chlöe,@chloe +Halle,@halle +Coco Jones,@cocojones +Summer Walker,@SummerWalker +Kehlani,@Kehlani +Jhené Aiko,@JheneAiko +Tinashe,@Tinashe +SZA,@sza +Snoh Aalegra,@SnohAalegra +Brent Faiyaz,@brentfaiyaz +Giveon,@Giveon +Lucky Daye,@LuckyDaye +Leon Thomas,@LeonThomas +Arin Ray,@ArinRay +BJ The Chicago Kid,@bjthechicagokid +Anthony Hamilton,@AnthonyHamilton +Anderson .Paak,@andersonpaak +NxWorries,@NxWorries +Knxwledge,@knxwledge +Quelle Chris,@quellechris +Open Mike Eagle,@OpenMikeEagle +billy woods,@backwoodzstudioz +Elucid,@elucid +Armand Hammer,@ArmandHammer +Moor Mother,@MoorMother +Pink Siifu,@pinksiifu +Fly Anakin,@flyanakin +Lord Apex,@LordApex +Cakes da Killa,@cakesdakilla +Mykki Blanco,@mykkiblanco +Zebra Katz,@zebrakatz +Leikeli47,@Leikeli47 +Junglepussy,@junglepussy +Oshun,@oshunnyc +The Underachievers,@TheUnderachievers +Flatbush Zombies,@TheGloriousDead +Meechy Darko,@MeechyDarko +Zombie Juice,@ZombieJuice +Erick the Architect,@erickarchitect +Pro Era,@PROERA +Kirk Knight,@kirkknight +Nyck Caution,@nyckcaution +CJ Fly,@flyhighteam +Bishop Nehru,@BishopNehru +Dillon Cooper,@TheDillonCooper +Your Old Droog,@YourOldDroog +Wiki,@wikset +Ratking,@ratkingnyc +Hak,@haknyc +Sporting Life,@sportinglife +Despot,@despotnyc +Heems,@himanshusuri +Kool A.D.,@koolad +Das Racist,@dasracist +Chaz French,@chazfrench +Phil Ade,@philade +Fat Trel,@FatTrel +Shy Glizzy,@ShyGlizzy +NoCap,@NoCap +Rylo Rodriguez,@RyloRodriguez +LiBand,@LiBand +Yung Manny,@yungmanny +Xanman,@xanman +Q Da Fool,@qdafool +Goonew,@goonew +Lil Dude,@lildude +Big Flame,@bigflame +BabySmoove,@babysmoove +KrispyLife Kidd,@krispylife_kidd +Kasher Quon,@kasherquon diff --git a/enriched_artists.csv b/enriched_artists.csv index ed68775..c838cfe 100644 --- a/enriched_artists.csv +++ b/enriched_artists.csv @@ -1,11 +1,501 @@ -UID,Name,Youtube,Instagram,Location,yt_subscribers,yt_lifetime_views,yt_video_count,yt_recent_avg_views,yt_momentum_30d,yt_status,mb_verified,mb_id,wd_verified,wd_id,composite_confidence,confidence_tier,norm_subscribers,norm_lifetime_views,norm_video_count,norm_recent_avg_views,norm_momentum_30d,base_rank_score,hiffi_score,hiffi_rank -9f76913bf5a8996b14c37563fdff9751,$ILKMONEY,https://www.youtube.com/channel/UCA1PZKy6XNQ-TsXWbQW2vyw,https://instagram.com/silkbooty,,46900,14878731,15,0,0.0,cached,True,309da629-06af-4453-85f4-9c1868a2fbbc,True,Q136428352,0.97,High,0.8776752758308687,0.9062496400532577,0.6717951158281678,0.0,0.0,0.5570445043453918,54.37,1 -4f9cc677d46d75f9709608f0668442fe,$hyfromdatre,https://www.youtube.com/channel/UCHRl8OQoAAUghnEJmsoiP5A,https://instagram.com/shyfromdatre,,210000,82140745,33,0,0.0,cached,True,db59266e-cd49-4f8c-98d2-e4b630251135,False,,0.75,High,1.0,1.0,0.8544331721773178,0.0,0.0,0.6354433172177318,50.84,2 -fb669f1ff32d3a7bbdef274872cbe0fd,+/-,https://www.youtube.com/channel/UCBOxSirnH1-_-xKtqX051lg,https://instagram.com/plusminusnyc,New York,739,164806,31,3477,0.0,cached,False,,False,Q260387,0.36,Low / Emerging,0.539104168005253,0.6591619178536015,0.8397438947852097,1.0,0.0,0.6604961193434973,32.23,3 -0f8e17a71adc4b60b61f9bf8f09605fb,$hoey,https://www.youtube.com/channel/UCkRNQjK0d70NqvLI57JmfeA,https://instagram.com/shoeyrussell,,594,653569,10,0,0.0,cached,False,1144f22d-fb1f-41a7-9822-05dab5edff25,False,,0.36,Low / Emerging,0.5213080735653491,0.7347588629481051,0.5810073162355173,0.0,0.0,0.3981828694301827,19.43,4 -405c893b17cdd7a486fc074f722671ab,$eLL,https://www.youtube.com/channel/UCVhJhIHih93-X-NzZeXX6bA,https://instagram.com/localcel_,,421,56299,61,0,0.0,cached,False,735f2b10-a267-4cd2-990f-f91702be9130,False,Q114274902,0.36,Low / Emerging,0.493273817829613,0.6002240439751241,1.0,0.0,0.0,0.39803815634266493,19.42,5 -e6351059c8846a51fe492ebb6365e4b0,$hamrock,https://www.youtube.com/channel/UCenklnIchLhgF2ELHfLqpmQ,,,125,33862,0,0,0.0,cached,True,771e21e8-78f6-4d06-a495-ddcaa08b469b,False,,0.63,Medium,0.3946417110342386,0.5723282415425062,0.0,0.0,0.0,0.2614745736958981,18.41,6 -c977cafbeabf67c0956bb0d1ce0188d7,$avage,https://www.youtube.com/channel/UCxtI7DyGJwUnAOywPSvf2OQ,https://instagram.com/mobshitsavage,,43300,0,0,0,0.0,cached,True,21b57a2b-9300-45b8-99bb-b970cb229f22,False,,0.63,Medium,0.8711584148945921,0.0,0.0,0.0,0.0,0.2613475244683776,18.4,7 -1cd4f7d2b1b902a677d0d6fba4096240,$'Edout,https://www.youtube.com/channel/UC6Sj8g3C4Qb9I3bl9xcQDXQ,https://instagram.com/Kid_soja,,21,12683,0,0,0.0,cached,False,,False,,0.28,Low / Emerging,0.2522297719906333,0.5184441001135359,0.0,0.0,0.0,0.20527995662557397,8.7,8 -33f12aeb1989989480885e6a4ed1637f,$ Eli,https://www.youtube.com/channel/UClmpQYORihn-nTO77x3XIpg,https://instagram.com/dollarsigneli,,0,0,0,0,0.0,not_found,False,,False,,0.0,Low / Emerging,0.0,0.0,0.0,0.0,0.0,0.0,0.0,9 -73502f922e4bfbad14f321aa0415f301,$hrames,https://www.youtube.com/channel/UCfwF7qNJylFoSIMi7KTKPdA,https://instagram.com/iPissGreatness,,0,0,0,0,0.0,cached,True,61c33b23-37a9-43a3-9ccd-9b12944ded5b,False,,0.55,Medium,0.0,0.0,0.0,0.0,0.0,0.0,0.0,10 +name,identifier,channel_id,channel_title,subscriber_count,lifetime_views,video_count,recent_avg_views,daily_view_velocity,momentum_30d,status_flag,data_complete,updated_at,confidence_score,confidence_tier,mb_verified,wd_verified,cross_referenced,breakout_velocity_index,is_rank_eligible,hiffi_score,hiffi_rank,breakout_rank,health_status,is_zombie,health_notes +Megan Thee Stallion,@megantheestallion,UCKrdjiuS66yXOdEZ_cOD_TA,Megan Thee Stallion,7490000.0,4150615406.0,383.0,2105527.25,59535.32970320314,7086.099829351537,COMPLETE,1,2026-10-22 10:35:50,1.0,High Confidence,True,True,False,82.56,True,92.71,1,13,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Latto,@Latto777,UCRQ6wJbGwbF9Wmvp5HfT7Pg,Latto,2820000.0,1717248605.0,593.0,190555.4,12889.591254494146,660.4087854554741,COMPLETE,1,2026-10-22 10:36:57,1.0,High Confidence,True,True,False,87.05,True,88.73,2,6,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Kodak Black,@KodakBlack,UChEYVadfkMCfrKUi6qr3I1Q,Kodak Black,9960000.0,8667475213.0,711.0,1944393.0,5839.291781123619,362.27051624038916,COMPLETE,1,2026-10-22 11:00:33,1.0,High Confidence,True,True,False,80.8,True,88.44,3,14,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Meek Mill,@meekmill,UC9HlWVtENbiMQzVRmnbJxtw,Meek Mill,5950000.0,4845516488.0,381.0,363292.5,10363.763197297121,313.2891178034817,COMPLETE,1,2026-10-22 10:58:10,1.0,High Confidence,True,True,False,83.21,True,88.13,4,10,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +French Montana,@FrenchMontana,UC-4mIX9ls8ROVk9ApfeYf5w,French Montana,5990000.0,4703121228.0,681.0,134346.54545454544,3987.039117589532,1121.867429535251,COMPLETE,1,2026-10-22 10:57:49,1.0,High Confidence,True,True,False,83.11,True,86.84,5,12,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +That Mexican OT,@ThatMexicanOT,UC4cvpsB_dAX8i5vdaBB-96w,That Mexican OT,1770000.0,1322775383.0,1380.0,92659.90909090909,2647.6282487520475,600.0645626566846,COMPLETE,1,2026-10-22 11:18:37,1.0,High Confidence,True,True,False,89.27,True,85.97,6,4,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Mac Miller,@MacMiller,UC3SEvBYhullC-aaEmbEQflg,Mac Miller,5060000.0,5032537108.0,274.0,256519.44444444444,5538.977074017849,1142.0511523811574,COMPLETE,1,2026-10-22 10:57:59,1.0,High Confidence,True,True,False,83.93,True,85.79,7,9,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Busta Rhymes,@BustaRhymes,UCCWKLP04ZkaVpxb6l5BKZOw,Busta Rhymes,2480000.0,2049999007.0,120.0,69995.60869565218,10291.466021848071,7875.324482314475,COMPLETE,1,2026-10-22 10:55:25,1.0,High Confidence,True,True,False,87.68,True,84.96,8,5,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Gunna,@GunnaOfficial,UCAkIMkEaa9sZmjcy7mfd5lQ,Gunna,3740000.0,3725802705.0,465.0,578597.0,16614.308171638426,11443.082294264339,COMPLETE,1,2026-10-22 10:46:07,0.75,Medium Confidence,True,False,False,85.63,True,84.87,9,7,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Snoop Dogg,@SnoopDogg,UC-OO324clObi3H-U0bP77dw,SnoopDoggTV,11300000.0,4981447419.0,1880.0,195196.0,2351.3182995610455,257.2384826204126,COMPLETE,1,2026-10-22 10:55:04,0.94,High Confidence,True,True,False,71.6,True,83.19,10,15,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Ghostemane,@ghostemane,UCsyBVa0eTR-lL0sRnKpIe8w,GHOSTEMANE,4000000.0,986394685.0,71.0,426047.0,4842.041171242727,801.2480697226747,COMPLETE,1,2026-10-22 11:22:49,1.0,High Confidence,True,True,False,85.08,True,82.09,11,8,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Russ Millions,@RussMillions,UCGDawZyaXbMbcr15My67wmw,Russ Millions,555000.0,271257489.0,64.0,815333.3333333334,8696.962289413772,367.26204689813267,COMPLETE,1,2026-10-22 11:07:06,1.0,High Confidence,True,True,False,97.07,True,81.64,12,2,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Wu-Tang Clan,@WuTangClan,UCl0q_XqiWDMA-Q9SzUO3y-Q,Wu-Tang Clan,2060000.0,1219796180.0,376.0,80399.125,1761.0552652571591,276.27488489911485,COMPLETE,1,2026-10-22 10:55:35,1.0,High Confidence,True,True,False,83.15,True,80.34,13,11,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Roy Woods,@RoyWoods,UCN_uuL0yjn9H5fnFqpo2S1w,Roy Woods,304000.0,120651354.0,403.0,146453.0,973.0417094293531,4580.504953659316,COMPLETE,1,2026-10-22 11:22:08,1.0,High Confidence,True,True,False,100.0,True,79.02,14,1,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Oliver Tree,@OliverTree,UCHcb3FQivl6xCRcHC2zjdkQ,Oliver Tree,11800000.0,5027457672.0,280.0,4722244.0,79897.76908648516,100.0,COMPLETE,1,2026-10-22 11:23:39,1.0,High Confidence,True,True,False,40.22,True,75.65,15,54,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Fat Joe,@fatjoe,UCdq3IqQwiWQfjdjwxTLO-qQ,Fat Joe,2020000.0,1700116153.0,220.0,124549.0,3488.9042928210943,209.88575267297125,COMPLETE,1,2026-10-22 10:56:33,1.0,High Confidence,True,True,False,68.56,True,75.3,16,16,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Gucci Mane,@guccimane,UCSugZEYrWbzqIWGD195V-YA,Gucci Mane,6010000.0,5168869290.0,575.0,126198.94117647059,14678.434486812183,100.0,COMPLETE,1,2026-10-22 10:55:55,1.0,High Confidence,True,True,False,41.47,True,72.32,17,50,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Bhad Bhabie,@BhadBhabie,UC7rVvFP90pl7tAtPsVIhfww,Bhad Bhabie,8000000.0,1602802587.0,218.0,235925.55555555556,20889.33114341348,100.0,COMPLETE,1,2026-10-22 11:06:07,1.0,High Confidence,True,True,False,40.82,True,71.1,18,52,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +"Tyler, The Creator",@tylerthecreator,UCsQBsZJltmLzlsJNG7HevBg,"Tyler, The Creator",8260000.0,4319305041.0,113.0,948067.0,14115.234188285052,100.0,COMPLETE,1,2026-10-22 10:35:27,1.0,High Confidence,True,True,False,40.69,True,69.15,19,53,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +50 Cent,@50Cent,UC8zJedg1f4sKnyuHWeS6vyw,50 Cent,18700000.0,15388385211.0,441.0,38441.0,2992.8528339307945,100.0,COMPLETE,1,2026-10-22 10:55:08,1.0,High Confidence,True,True,False,38.82,True,68.84,20,56,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Tee Grizzley,@TeeGrizzley,UCz015ho6P0Ooo7IZFyQU7fw,Tee Grizzley,2870000.0,1857822227.0,558.0,88326.8,5263.220303513859,100.0,COMPLETE,1,2026-10-22 11:04:26,1.0,High Confidence,True,True,False,43.23,True,68.81,21,47,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Doja Cat,@dojacat,UCzpl23pGTHVYqvKsgY0A-_w,Doja Cat,14200000.0,11620421412.0,66.0,32432.0,10145.846735039593,100.0,COMPLETE,1,2026-10-22 11:23:45,1.0,High Confidence,True,True,False,39.43,True,67.93,22,55,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Vic Mensa,@VicMensa,UCCkJuLH3pjjyDAuzbSky55g,Vic Mensa,381000.0,134030107.0,450.0,11970.16,6987.9191103345365,100.0,COMPLETE,1,2026-10-22 11:04:42,1.0,High Confidence,True,True,False,50.35,True,66.9,23,30,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Rio Da Yung OG,@RioDaYungOG,UCjUy5GbylYJC6kxJZYRwwVA,Rio Da Yung OG,746000.0,659365293.0,340.0,55189.36842105263,2183.0280193714752,128.68689071598368,COMPLETE,1,2026-10-22 11:04:10,1.0,High Confidence,True,True,False,53.81,True,66.86,24,20,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Method Man,@MethodMan,UClsmea6T_IrOqTI-DOwso5g,Method Man,745000.0,475439169.0,263.0,83971.75,2348.5647443745934,130.3514727565751,COMPLETE,1,2026-10-22 10:55:29,1.0,High Confidence,True,True,False,54.22,True,66.58,25,17,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Logic,@Logic,UCoDcFZ5KZ0KwBC_omalJuiA,Logic,3530000.0,1858275156.0,479.0,117074.0,304.24732199274104,146.0416535317235,COMPLETE,1,2026-10-22 10:58:45,1.0,High Confidence,True,True,False,52.49,True,65.42,26,24,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +BigXthaPlug,@BigXthaPlug,UCEJdOGwm6CNtc_kIa_Qjy6A,BigXthaPlug,1870000.0,1842811715.0,593.0,174375.8947368421,13953.52996099237,30.40713780212185,COMPLETE,1,2026-10-22 11:18:31,1.0,High Confidence,True,True,False,29.21,True,65.03,27,68,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Masego,@Masego,UCmfMTajxmbEKe0A1rQJ4p0A,Masego,1010000.0,550194493.0,147.0,110773.5,4950.097171379931,100.0,COMPLETE,1,2026-10-22 11:20:15,1.0,High Confidence,True,True,False,46.28,True,64.92,28,43,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Russ,@russ,UCiIETTq2It3OzW8_WYRPTyQ,Russ,6400000.0,4344762933.0,389.0,182719.66666666666,3207.2147136777303,100.0,COMPLETE,1,2026-10-22 10:59:00,0.75,Medium Confidence,True,False,False,41.19,True,64.26,29,51,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Coco Jones,@cocojones,UC0RzM4Oe2H4pxAYuk-hr1xA,Coco Jones,1210000.0,469745143.0,211.0,44337.0,2417.8568865491798,100.0,COMPLETE,1,2026-10-22 11:24:23,1.0,High Confidence,True,True,False,45.55,True,63.87,30,45,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Bugzy Malone,@bugzymalone,UCLd_hRzn-yr9Nh73XNviNWg,Bugzy Malone,724000.0,542783895.0,184.0,678121.0,2964.426444044485,100.0,COMPLETE,1,2026-10-22 11:08:08,1.0,High Confidence,True,True,False,47.21,True,63.83,31,42,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Victoria Monét,@VictoriaMonet,UCF-Gj_k3Uk4WnK2UhJcSzYg,Victoria Monét,667000.0,417411317.0,253.0,43724.36,2424.173715381624,100.0,COMPLETE,1,2026-10-22 11:24:13,1.0,High Confidence,True,True,False,47.42,True,63.8,32,40,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Fivio Foreign,@FivioForeign,UCm7gu9KfQ6oAg0Z1halgEnA,Fivio Foreign,1190000.0,696992105.0,372.0,127801.6,3799.110402985044,67.78469213601154,COMPLETE,1,2026-10-22 11:01:00,1.0,High Confidence,True,True,False,38.29,True,63.44,33,57,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Lil Mosey,@LilMosey,UCZ3FuC9xpPnSErHJqMg5_EQ,Lil Mosey,2570000.0,816757652.0,109.0,30248.5,2020.0607061409662,100.0,COMPLETE,1,2026-10-22 11:05:08,1.0,High Confidence,True,True,False,43.44,True,62.79,34,46,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Snoh Aalegra,@SnohAalegra,UChVibCOlzk9GwJZfbYJOY8A,Snoh Aalegra,590000.0,383092694.0,39.0,258526.0,7195.585507450485,100.0,COMPLETE,1,2026-10-22 11:24:42,1.0,High Confidence,True,True,False,48.45,True,62.79,34,36,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Kendrick Lamar,https://www.youtube.com/@KendrickLamarVEVO,UCoYfzC2zMlc9M-Odgaf6OSg,KendrickLamarVEVO,6820000.0,5403312208.0,61.0,,74854.42576525887,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 09:35:52,0.94,High Confidence,True,True,False,21.01,True,62.6,36,155,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Certified Trapper,@certifiedtrapper,UCwTa-rvU9G-pralFjeqvFfw,Certified Trapper,127000.0,56442056.0,1278.0,9950.315789473685,1165.2789427056582,88.84072157740177,COMPLETE,1,2026-10-22 11:18:03,1.0,High Confidence,True,True,False,50.57,True,62.41,37,29,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Your Old Droog,@YourOldDroog,UC47rmMk5fsa1HgE30TrkPXA,Your Old Droog,35400.0,8826910.0,98.0,13764.875,280.343203377182,204.90364381437593,COMPLETE,1,2026-10-22 11:26:45,1.0,High Confidence,True,True,False,89.52,True,62.41,37,3,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Eminem,@eminem,UCfM3zsQsOnfWNUppiycmBuw,EminemMusic,67400000.0,38760804274.0,210.0,,9816.92596840884,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:35:05,0.94,High Confidence,True,True,False,17.95,True,62.03,39,187,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Lil Durk,@lildurk,UCaxOQZrF5llUMp-JjesUz1A,Lil Durk,7820000.0,7860200885.0,506.0,,7854.888480466487,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:00:40,1.0,High Confidence,True,True,False,20.19,True,62.0,40,167,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Juice WRLD,@JuiceWRLD,UC0BletW9phE4xHFM44q4qKA,Juice WRLD,14000000.0,8931718358.0,191.0,,13642.117976478625,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:01:21,1.0,High Confidence,True,True,False,19.55,True,61.91,41,179,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Tory Lanez,@torylanez,UCbfUA3UGxAWL3muD004g0WQ,Tory Lanez,5110000.0,3848908499.0,1150.0,,3671.8805074009224,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:22:05,1.0,High Confidence,True,True,False,20.67,True,61.18,42,161,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Wiz Khalifa,@wizkhalifa,UCVp3nfGRxmMadNDuVbJSk8A,Wiz Khalifa,30900000.0,16488363807.0,952.0,,2159.31863496771,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:57:52,1.0,High Confidence,True,True,False,18.68,True,61.12,43,184,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +BLP Kosher,@blpkosher,UCrmzNldeNrajgVg_0VLNRkA,BLP KOSHER,288000.0,105754496.0,116.0,19499.81818181818,1303.458853581182,114.68477575490677,COMPLETE,1,2026-10-22 11:18:06,1.0,High Confidence,True,True,False,53.89,True,60.96,44,19,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Lil Uzi Vert,@LILUZIVERT,UCqwxMqUcL-XC3D9-fTP93Mg,LIL UZI VERT,10400000.0,6152925017.0,254.0,,8139.917420113339,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:36:14,1.0,High Confidence,True,True,False,19.86,True,60.84,45,173,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Yung Gravy,@yunggravy,UCLQPinZNWKlLBF7C_m2YP3g,Yung Gravy,1810000.0,915347578.0,592.0,63091.53333333333,3117.268694587971,28.69589695331241,COMPLETE,1,2026-10-22 11:23:33,1.0,High Confidence,True,True,False,28.47,True,60.8,46,76,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Drake,@DrakeOfficial,UCByOQJjav0CUDwxCk-jVNRQ,Drake,33200000.0,24441713812.0,112.0,3946272.0,126976.0049249581,-78.49564109006833,COMPLETE,1,2026-10-22 09:35:53,1.0,High Confidence,True,True,False,3.89,True,60.57,47,200,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Xanman,@xanman,UCaFFpY9BFJq2c4Do1gBQ1xw,Xanman,130000.0,46981997.0,193.0,117279.0,1358.9720852731882,100.0,COMPLETE,1,2026-10-22 11:27:34,1.0,High Confidence,True,True,False,53.56,True,59.98,48,21,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Central Cee,@CentralCee,UCV_CsAy5CNBX_uwDQ7RMe1Q,Central Cee,7140000.0,2738806078.0,92.0,,15050.145683517516,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 09:35:57,1.0,High Confidence,True,True,False,20.37,True,59.88,49,164,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Ty Dolla $ign,@tydollasign,UClVY6MdQxTZUaMDL-dLQDcw,Ty Dolla $ign,3830000.0,2225314489.0,231.0,3567.3333333333335,902.7262245223419,100.0,COMPLETE,1,2026-10-22 10:58:38,0.75,Medium Confidence,True,False,False,42.39,True,59.67,50,49,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Polo G,@PoloG,UC0ifXd2AVf1LMYbqwB5GH4g,Polo G,6520000.0,4589293113.0,116.0,,9536.359715027484,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:00:46,1.0,High Confidence,True,True,False,20.43,True,59.28,51,162,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Kehlani,@Kehlani,UCuE1A4MDBt8YkgUkRAKMtjw,Kehlani,4720000.0,3012117932.0,280.0,,5481.401722623155,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:24:29,1.0,High Confidence,True,True,False,20.79,True,59.26,52,157,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Yungeen Ace,@YungeenAce,UCf1Q757aKSmywQDQhiTtGFA,Yungeen Ace,1950000.0,891194469.0,297.0,,7606.187369930817,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:03:43,1.0,High Confidence,True,True,False,22.11,True,59.23,53,140,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Lil Wayne,@LilWayne,UCO9zJy7HWrIS3ojB4Lr7Yqw,Lil Wayne,14700000.0,9819093204.0,327.0,,3042.579334963458,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:35:45,1.0,High Confidence,True,True,False,19.45,True,59.21,54,180,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Teezo Touchdown,@TeezoTouchdown,UCjFEF43RfwXUu1rwXxm4eZQ,Teezo Touchdown,167000.0,36421964.0,53.0,106647.28571428571,2636.4681002257103,100.0,COMPLETE,1,2026-10-22 10:36:54,1.0,High Confidence,True,True,False,53.06,True,59.21,54,23,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +XXXTENTACION,@xxxtentacion,UCM9r1xn6s30OnlJWb-jc3Sw,XXXTENTACION,43500000.0,12901726223.0,137.0,,4351.873519974076,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:01:24,1.0,High Confidence,True,True,False,18.36,True,59.21,54,186,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +BKtherula,@bktherula,UCqEpkhhjzs37FX1b4d3yUqw,BKTHERULA,302000.0,97025417.0,257.0,52323.0,574.2010093808783,100.0,COMPLETE,1,2026-10-22 11:23:50,1.0,High Confidence,True,True,False,49.82,True,59.15,57,32,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Little Simz,@littlesimz,UC89IYKXyf15qNezA7IuFG1A,Little Simz,560000.0,142212941.0,167.0,20172.166666666668,608.6225053788249,100.0,COMPLETE,1,2026-10-22 09:35:54,1.0,High Confidence,True,True,False,47.76,True,58.98,58,38,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Lil Yachty,@lilyachty,UCNTu7P3IyRRKJtibrrXG0Yg,lil boat,3260000.0,1473706050.0,136.0,110781.5,2490.8082262072985,100.0,COMPLETE,1,2026-10-22 11:05:05,0.6,Medium Confidence,True,True,False,42.83,True,58.98,58,48,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Don Toliver,@DonToliver,UCgT01FILdWB9BsXBXKjpQ7A,Don Toliver,3040000.0,2970930038.0,261.0,,5298.9333555762505,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:37:18,1.0,High Confidence,True,True,False,21.37,True,58.74,60,145,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Nicki Minaj,@NickiMinaj,UC3jOd7GUMhpgJRBhiLzuLsg,Nicki Minaj,28400000.0,12957679432.0,67.0,,6737.723808690361,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:35:15,1.0,High Confidence,True,True,False,18.78,True,58.64,61,182,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Joey Bada$$,@joeybadass,UCG8R0ZMHBkRzBT1DWK9wT5w,Joey Bada$$,601000.0,342717274.0,36.0,42611.0,1411.2486770016158,100.0,COMPLETE,1,2026-10-22 10:37:29,1.0,High Confidence,True,True,False,47.64,True,58.45,62,39,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Playboi Carti,@PlayboiCarti,UC652oRUvX1onwrrZ8ADJRPw,Playboi Carti,4990000.0,2841848127.0,70.0,,10652.755040583823,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:35:57,1.0,High Confidence,True,True,False,20.79,True,58.24,63,157,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +G Herbo,@GHerbo,UCV0pIPt5HFfulonNog3cz1A,G Herbo,2050000.0,1778385783.0,412.0,,3606.4520627438346,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:04:32,1.0,High Confidence,True,True,False,21.89,True,58.23,64,141,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Travis Scott,@TravisScottXX,UCtxdfwb9wfkoGocVUAJ-Bmg,Travis Scott,20800000.0,12627449851.0,20.0,,15447.109278571212,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:35:00,1.0,High Confidence,True,True,False,19.12,True,58.2,65,181,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +The Notorious B.I.G.,@notoriousbig,UCIZGqIYkST36dLp0uf9o9nw,The Notorious B.I.G.,5080000.0,4448312178.0,105.0,48538.333333333336,1578.086121441178,40.544166473631385,COMPLETE,1,2026-10-22 10:55:11,1.0,High Confidence,True,True,False,29.19,True,57.88,66,69,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Lil Tecca,@LilTecca,UCOlxqtcKc-HBEQJgDsylyhA,Lil Tecca,3330000.0,1490107798.0,174.0,,5338.891039170453,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:05:11,1.0,High Confidence,True,True,False,21.25,True,57.79,67,150,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Lil Tjay,@liltjay,UCEB4a5o_6KfjxHwNMnmj54Q,Lil Tjay,6560000.0,3607654054.0,210.0,,3398.0989328467595,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:00:51,1.0,High Confidence,True,True,False,20.36,True,57.75,68,165,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +21 Savage,@21savage,UCOjEHmBKwdS7joWpW0VrXkg,21 Savage,10100000.0,6785207356.0,166.0,,3210.9505305038683,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:35:32,1.0,High Confidence,True,True,False,19.86,True,57.63,69,173,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +YTB Fatt,@ytbfatt,UCqfqdCqPHxgtdJ0m32obDiw,YTB Fatt ,451000.0,465643798.0,212.0,,7869.7705685443825,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:18:21,1.0,High Confidence,True,True,False,25.32,True,57.46,70,97,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Pierre Bourne,@PierreBourne,UCN27za3wzItmyRV2O3N91vw,PierreBourne,409000.0,236364956.0,113.0,46045.857142857145,2477.787578318517,100.0,COMPLETE,1,2026-10-22 11:19:02,0.65,Medium Confidence,False,True,False,49.15,True,57.43,71,34,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Machine Gun Kelly,@mgk,UCUs8sGiP4avNaYNVO22INhQ,mgk,9540000.0,6954381825.0,392.0,,9275.456146176897,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:58:53,0.6,Medium Confidence,True,True,False,19.97,True,57.05,72,170,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +TiaCorine,@TiaCorine,UC9suUyHpN7Gzk8l7j3qSrIg,TiaCorine,124000.0,52683115.0,118.0,160101.0,614.9438604047872,100.0,COMPLETE,1,2026-10-22 11:23:54,1.0,High Confidence,True,True,False,53.27,True,57.0,73,22,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Murda Beatz,@MurdaBeatz,UCWz4zK-Oal6uIiVxVuRWh8A,Murda Beatz,214000.0,53871516.0,66.0,73358.0,818.1447271166605,100.0,COMPLETE,1,2026-10-22 11:19:06,1.0,High Confidence,True,True,False,51.17,True,56.95,74,27,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Icewear Vezzo,@icewearvezzo,UC00wbhsfrcZAElIw1Q9VRlw,Icewear Vezzo,585000.0,744543885.0,233.0,,4957.282485543911,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:03:57,1.0,High Confidence,True,True,False,24.2,True,56.79,75,108,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Fabolous,@myfabolouslife,UCPGTwnuYHJ0nb6osWd9v7gg,MyFabolousLife,1190000.0,1110780051.0,194.0,,5887.636523789568,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:57:12,0.94,High Confidence,True,True,False,22.87,True,56.78,76,133,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +J. Cole,@JColeVEVO,UCnzJFckvQBA5nn9lMu08LWQ,JColeVEVO,1690000.0,1837373881.0,33.0,,16023.352790077835,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 09:35:53,0.94,High Confidence,True,True,False,22.7,True,56.27,77,136,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Public Enemy,@PublicEnemy,UCAR-wsCZ0Xn9KPqX_l2fVzQ,Channel ZERO,266000.0,213838649.0,1529.0,887.16,274.522753396345,100.0,COMPLETE,1,2026-10-22 11:13:56,0.6,Medium Confidence,True,True,False,50.18,True,56.11,78,31,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Post Malone,@PostMalone,UCeLHszkByNZtPKcaVXOCOQQ,Post Malone,29000000.0,21288950637.0,190.0,,977.5253943977743,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:35:36,1.0,High Confidence,True,True,False,18.74,True,55.94,79,183,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Cypress Hill,@cypresshill,UCoO96UN3gv5WohJA8QuMgXQ,Cypress Hill,2030000.0,1689044104.0,345.0,24328.714285714286,756.8622579064025,21.606220946423598,COMPLETE,1,2026-10-22 10:56:25,1.0,High Confidence,True,True,False,26.6,True,55.77,80,83,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Kanye West,@kanyewest,UCs6eXM7s8Vl5WcECcRHc2qQ,Kanye West,12700000.0,10317879051.0,42.0,,20349.925333641124,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:35:11,0.65,Medium Confidence,False,True,False,19.69,True,55.74,81,177,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Migos,@MigosAtl,UC9YcTIQuhwgoOQqYMKYqW9A,Migos ATL,13100000.0,8456422168.0,99.0,,2625.741389535104,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:59:33,0.94,High Confidence,True,True,False,19.57,True,55.67,82,178,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Rapsody,@rapsody,UCCobft4AUIDzRaKp1xEHa5w,Rapsody,170000.0,38876179.0,166.0,2003.0,228.74538135048846,100.0,COMPLETE,1,2026-10-22 11:02:23,1.0,High Confidence,True,True,False,51.79,True,55.26,83,25,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +SZA,@sza,UCO5IQ70V7l-XpHW40HwaGsw,SZA,6800000.0,5695629013.0,38.0,,13227.511780193214,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:24:39,0.75,Medium Confidence,True,False,False,20.41,True,55.13,84,163,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Sexyy Red,@SexyyRed,UC28rc3PHWPJib68G-VqpJ3w,Sexyy Red,1450000.0,903938520.0,481.0,,1128.9340825805314,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:36:41,1.0,High Confidence,True,True,False,22.28,True,55.12,85,138,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Anderson .Paak,@andersonpaak,UCVMSK1i_uksa4FrXZZqGYvw,Anderson Paak,912000.0,415309107.0,66.0,,6523.938369179792,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:07,1.0,High Confidence,True,True,False,23.42,True,55.11,86,120,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Macklemore,@Macklemore,UCXYRdIXDdeZIf816EWAr5zQ,Macklemore,10100000.0,6524076872.0,311.0,,691.7757397177468,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:59:22,1.0,High Confidence,True,True,False,19.84,True,54.95,87,175,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Jack Harlow,@JackHarlow,UC6vZl7Qj7JglLDmN_7Or-ZQ,Jack Harlow,3180000.0,2304111123.0,173.0,,1673.6120246890312,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:36:05,1.0,High Confidence,True,True,False,21.23,True,54.93,88,152,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Ashnikko,@ashnikko,UCprhwr86ckrMC2q9jX8qMnw,Ashnikko,2820000.0,1454561438.0,285.0,70118.0,1266.2684484936703,-1.891702812368826,COMPLETE,1,2026-10-22 11:23:42,1.0,High Confidence,True,True,False,20.97,True,54.81,89,156,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Leon Thomas,@LeonThomas,UCOHM33mfIkFOy3bDfKhPyVQ,Leon Thomas,482000.0,326833613.0,122.0,26659.0,436.2163456636026,100.0,COMPLETE,1,2026-10-22 11:24:53,0.75,Medium Confidence,True,False,False,48.22,True,54.8,90,37,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Roddy Ricch,@RoddyRicch,UChQdA1rid5kKZh6oIc6DLNg,Roddy Ricch,7650000.0,4066649683.0,94.0,,1705.5165416126222,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:36:32,1.0,High Confidence,True,True,False,20.16,True,54.54,91,168,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +NF,@nfrealmusic,UCoRR6OLuIZ2-5VxtnQIaN2w,NFrealmusic,10500000.0,6234726143.0,41.0,,11380.180398255812,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:59:11,0.69,Medium Confidence,True,False,False,19.87,True,54.51,92,172,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Offset,@OffsetYRN,UCLRm9H9a-2bAna0E-r5n8pg,OFFSETYRN,1160000.0,1003390203.0,70.0,699280.0,15291.937268061403,1.6130977550898822,COMPLETE,1,2026-10-22 10:59:39,0.69,Medium Confidence,True,False,False,23.88,True,54.39,93,113,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Ken Carson,@kencarson,UCtjO8cix9XxwOcAv6nww-TQ,Ken Carson,899000.0,550673391.0,49.0,,5958.665167398936,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:36:47,1.0,High Confidence,True,True,False,23.4,True,54.38,94,122,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Denzel Curry,@denzelcurryph,UCiKxNv_MHAShqT2lATxG_Wg,Denzel Curry,1610000.0,686698487.0,275.0,15509.0,1818.5286563604102,-15.500708292470305,COMPLETE,1,2026-10-22 09:35:55,1.0,High Confidence,True,True,False,18.67,True,53.85,95,185,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Tech N9ne,@StrangeMusicInc,UC87iZ03xDe8csLCjWyV2E0A,Strange Music Inc,2880000.0,1945359953.0,1468.0,,1339.3668438688953,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:59:18,0.6,Medium Confidence,True,True,False,21.35,True,53.8,96,147,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +A Boogie wit da Hoodie,@ABoogieWitDaHoodie,UCfgsFOdVScKetBXYrFNr5LQ,A Boogie Wit da Hoodie,5340000.0,4201606943.0,543.0,20996.25,516.8253065426438,-12.712022948366176,COMPLETE,1,2026-10-22 11:00:56,1.0,High Confidence,True,True,False,17.9,True,53.63,97,188,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Ray Vaughn,@rayvaughn,UCr4UjKmsi8FlnqJ8yLIfTtQ,Ray Vaughn,176000.0,24804271.0,113.0,6723.7692307692305,502.1701246115227,100.0,COMPLETE,1,2026-10-22 11:02:00,0.75,Medium Confidence,True,False,False,51.79,True,53.56,98,25,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Blxst,@blxst,UCTozeRVDkVwCPXJIUeoN_Xg,BLXST,639000.0,522269179.0,175.0,,1747.8298867521291,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:03:29,1.0,High Confidence,True,True,False,23.62,True,53.51,99,117,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Monaleo,@TheMonaleo,UCeQk0DthP_Se7hU0S2V_m1w,Monaleo,471000.0,233589142.0,176.0,,2070.2578912418467,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:23:59,1.0,High Confidence,True,True,False,24.23,True,53.48,100,106,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Summer Walker,@SummerWalker,UCSpNS4dJ8wIScwMqatIdiQw,Summer Walker,2920000.0,3275232745.0,628.0,,329.0917828921748,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:24:26,1.0,High Confidence,True,True,False,21.31,True,53.4,101,148,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Baby Keem,@babykeem,UCq0Hi7HpCBCNeKpdKKcQqGQ,Baby Keem,1110000.0,803291048.0,33.0,,4779.61481581562,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:46:08,1.0,High Confidence,True,True,False,22.92,True,53.31,102,131,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Big Sean,@bigsean,UCYFyHJMMKd7C8M0_TsleUQA,Big Sean,4530000.0,2674565586.0,247.0,,558.8431614778916,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:58:03,1.0,High Confidence,True,True,False,20.77,True,53.12,103,159,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Chief Keef,@ChiefKeef,UC0032Wkd3aCT4rRi1YOV3gQ,BigGucci Sosa,2380000.0,1500304905.0,623.0,,1912.1052422210726,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:57:45,0.6,Medium Confidence,True,True,False,21.62,True,52.88,104,144,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Kardinal Offishall,@kardinaloffishall,UCNWrxU_dWo33qIKH99Xb-Yw,KardinalOffishall416,368000.0,582612756.0,190.0,5262.0,58.13723026941238,100.0,COMPLETE,1,2026-10-22 11:22:19,0.94,High Confidence,True,True,False,49.03,True,52.83,105,35,ZOMBIE_CHANNEL,True,"High subscriber base (368,000) with negligible viewership (58.1 views/day)." +Ms Banks,@MsBanks,UCfDjAp4wQg5BZIh6-q0EqYA,Ms Banks,209000.0,66717746.0,220.0,2171.25,111.94703419006626,81.3152400835073,COMPLETE,1,2026-10-22 11:08:24,1.0,High Confidence,True,True,False,46.18,True,52.68,106,44,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +LL Cool J,@LLCoolJ,UCDG8P-_qq4PuT0DtxzlQlsw,LL COOL J,1070000.0,782882641.0,62.0,,2196.197853626171,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:13:52,1.0,High Confidence,True,True,False,22.81,True,52.52,107,134,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Freddie Gibbs,@freddiegibbs,UCKAtbNtZNyqBWH1FG1Kvmnw,Freddie Gibbs,573000.0,414997351.0,198.0,,1111.534331915095,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:37:25,1.0,High Confidence,True,True,False,23.73,True,52.45,108,116,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Vince Staples,@vincestaples,UCDDx4lwzZk5uZBwTunBI2CA,Vince Staples,648000.0,422699754.0,72.0,18669.5,1190.0548173759607,17.203243526026682,COMPLETE,1,2026-10-22 10:37:41,1.0,High Confidence,True,True,False,27.63,True,52.22,109,81,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Darkoo,@Darkoo,UCazgYTvQCD6U6EZObXzY0Tw,Darkoo,345000.0,180051973.0,69.0,,2827.350139391935,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:08:30,1.0,High Confidence,True,True,False,25.04,True,52.14,110,102,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Destroy Lonely,@destroylonely,UCylvCifeaY7gi1zjhRfpcMg,Destroy Lonely,511000.0,280956900.0,60.0,,2579.944234881745,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:36:50,1.0,High Confidence,True,True,False,24.15,True,52.04,111,110,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Kid Cudi,@KidCudi,UCoNPsL8j28yfKRu6e7YUhPA,Kid Cudi,2810000.0,2487181707.0,130.0,,635.4314348175157,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:58:41,1.0,High Confidence,True,True,False,21.37,True,51.84,112,145,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Blac Youngsta,@BlacYoungsta,UCvjgPWQe35Wgw2aLpz9vjQQ,Blac Youngsta,992000.0,490816409.0,255.0,,569.5770587761309,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:00:21,1.0,High Confidence,True,True,False,22.8,True,51.67,113,135,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Slim Thug,@slimthug,UCP2rf54UzEehScugsx1auFw,Slim Thug,458000.0,301852252.0,266.0,,688.3832984293662,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:16:02,1.0,High Confidence,True,True,False,24.05,True,51.56,114,111,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Kaash Paige,@KaashPaige,UCqLcZ9ksQuE3QIf-pNCVSjA,Kaash Paige,628000.0,439270374.0,61.0,5698.0,51.45088042980945,100.0,COMPLETE,1,2026-10-22 11:05:19,1.0,High Confidence,True,True,False,47.33,True,51.19,115,41,ZOMBIE_CHANNEL,True,"High subscriber base (628,000) with negligible viewership (51.5 views/day)." +LiBand,@LiBand,UCV3vLUKVvGM78ZzBAxgiHRA,LiBand,97800.0,22362264.0,79.0,35876.0,289.5914300052349,100.0,COMPLETE,1,2026-10-22 11:27:27,0.75,Medium Confidence,True,False,False,54.02,True,51.16,116,18,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Flo Milli,@flomilli,UCylw9yLlhFVX_vIdjc6DjGQ,Flo Milli,784000.0,418548631.0,82.0,,1216.5302158988356,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:37:03,1.0,High Confidence,True,True,False,23.22,True,51.15,117,125,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Yeat,@yeat,UCV4UK9LNNLViFP4qZA_Wmfw,Yeat,1720000.0,1405195230.0,150.0,788390.0,10345.49831521508,-87.8946179654808,COMPLETE,1,2026-10-22 10:37:12,1.0,High Confidence,True,True,False,2.7,True,51.01,118,203,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Rico Nasty,@RicoNasty,UCINBvWZluLuV4VxNH32OO_Q,Rico Nasty,673000.0,232225958.0,315.0,,453.54103456014724,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:06:00,1.0,High Confidence,True,True,False,23.39,True,51.0,119,124,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Majid Jordan,@MajidJordan,UCiND3wemaDyaKjJAavm-h2A,MAJID JORDAN,341000.0,167567615.0,265.0,372.92,54.20043821375937,100.0,COMPLETE,1,2026-10-22 11:22:11,0.75,Medium Confidence,True,False,False,49.28,True,50.82,120,33,ZOMBIE_CHANNEL,True,"High subscriber base (341,000) with negligible viewership (54.2 views/day)." +Lloyd Banks,@LloydBanks,UCOKmAISP9lvmyPIbtEELoVQ,Lloyd Banks,622000.0,498483669.0,167.0,,606.4315511261304,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:14:25,1.0,High Confidence,True,True,False,23.53,True,50.68,121,118,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Skilla Baby,@SkillaBaby,UC4OWd0CnbvaiaozgLZO-L4Q,Skilla Baby,445000.0,327246455.0,318.0,,381.8343744562367,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:18:28,1.0,High Confidence,True,True,False,24.04,True,50.42,122,112,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Bobby Shmurda,@BobbyShmurda,UClSTuQObWlw56blWZiW-wcw,Bobby Shmurda,3010000.0,1378411472.0,21.0,,1381.510387257916,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:01:07,1.0,High Confidence,True,True,False,21.3,True,50.12,123,149,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Metro Boomin,@MetroBoomin,UCKC11MOR51CLg4JpYj8jb4g,Metro Boomin,3640000.0,3360591656.0,145.0,,259.44014920209656,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:18:57,1.0,High Confidence,True,True,False,21.03,True,50.04,124,154,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +De La Soul,@WeAreDeLaSoul,UCngimeRWT1E9ZlasMs-eQSg,WeAreDeLaSoul,331000.0,184406990.0,527.0,6336.111111111111,1955.0871501450217,-52.32342318239582,COMPLETE,1,2026-10-22 11:14:00,0.94,High Confidence,True,True,False,11.9,True,50.0,125,191,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +AJ Tracey,@ajtracey,UCPOW9rO7SqJBfikRKEvbI3Q,AJ Tracey,548000.0,321735777.0,68.0,,1015.1216756109875,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:06:47,1.0,High Confidence,True,True,False,23.79,True,50.0,125,114,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Coast Contra,@CoastContra,UCFNjjg_9XURYU2IcbfxXv0w,COAST CONTRA,665000.0,117591874.0,169.0,,541.8510605781765,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:20:50,1.0,High Confidence,True,True,False,23.41,True,49.99,127,121,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Little Big,@littlebig,UCu7TZ_ATWgjgD9IrNLdnYDA,Little Big,7320000.0,4357549154.0,214.0,74299.5,5714.402489857644,-76.74192202856881,COMPLETE,1,2026-10-22 11:23:25,0.75,Medium Confidence,True,False,False,4.41,True,49.89,128,199,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Nafe Smallz,@NafeSmallz,UC77sAm_mEiNRAlXvVAsck4w,Nafe Smallz,199000.0,145949622.0,149.0,,719.1505966901968,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:07:43,1.0,High Confidence,True,True,False,25.63,True,49.73,129,92,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +JPEGMAFIA,@JPEGMAFIA,UCnAbB39RDMkmkMLigykYvQw,JPEGMAFIA,370000.0,165139463.0,144.0,,617.554447050833,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:20:26,1.0,High Confidence,True,True,False,24.41,True,49.73,129,104,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Muni Long,@MuniLong,UCI0ID2m2N-kKswd7x9AeCgw,Muni Long,1220000.0,847414175.0,192.0,,269.0630926429883,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:24:10,1.0,High Confidence,True,True,False,22.48,True,49.51,131,137,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Nettspend,@nettspend,UC6CvS47L6uTuPSPhinE5jKA,Nettspend,200000.0,48426914.0,75.0,,1285.0794181900742,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:17:34,1.0,High Confidence,True,True,False,25.86,True,49.5,132,87,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Coi Leray,@CoiLeray,UCiHc6oRZnXXZHZlaxbNkfQg,Coi Leray,2160000.0,821927927.0,181.0,20071.666666666668,5481.624921960127,-90.90124721590101,COMPLETE,1,2026-10-22 10:37:21,1.0,High Confidence,True,True,False,1.75,True,49.47,133,204,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Lupe Fiasco,@LupeFiasco,UC-zD8J0RLWy3mNB7EMmT7Rg,Lupe Fiasco,865000.0,649568719.0,125.0,32137.5,990.7196900541903,-27.252045770941564,COMPLETE,1,2026-10-22 10:56:12,1.0,High Confidence,True,True,False,16.67,True,49.28,134,189,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Kash Doll,@kashdoll,UCx5D4Lkkp8aIUBsTfiLpb-g,Kash Doll,856000.0,378710103.0,175.0,90024.4,3392.036383316453,-70.94590625816925,COMPLETE,1,2026-10-22 11:05:37,1.0,High Confidence,True,True,False,6.66,True,49.06,135,195,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Wretch 32,@Wretch32,UCXZwsjh089km2RF9oyuxe3g,Wretch 32,189000.0,137402592.0,137.0,,577.44066707496,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:08:15,1.0,High Confidence,True,True,False,25.68,True,48.95,136,89,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Iggy Azalea,@iggyazalea,UCGtjnDLpKGWKU6xtjB0NeKA,Iggy Azalea,8340000.0,4534036014.0,14.0,,696.6899791771257,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:06:14,1.0,High Confidence,True,True,False,20.06,True,48.68,137,169,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Shotgun Willy,@ShotgunWilly,UCTg6Jny4X_LteWGccXf596Q,Shotgun Willy,837000.0,352638426.0,58.0,,1531.1275896746533,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:23:36,0.75,Medium Confidence,True,False,False,23.15,True,48.49,138,127,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Bone Thugs-N-Harmony,@BoneThugsNHarmony,UCjSkdzVdUS1crC89RI2cNWw,Bone Thugs-N-Harmony,2130000.0,1650649014.0,53.0,,381.40366216927714,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:15:21,1.0,High Confidence,True,True,False,21.72,True,48.45,139,143,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Domani,@Domani,UCOQhX1bB092Z_1D_gEhXgAA,Domani,467000.0,93846379.0,352.0,22579.5,945.0639797976249,-17.77462172939313,COMPLETE,1,2026-10-22 11:21:00,0.75,Medium Confidence,True,False,False,19.73,True,48.44,140,176,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Nemzzz,@Nemzzz,UC3ytAKP00gWDkiOrcKfOwTQ,Nemzzz,771000.0,367474763.0,180.0,27110.75,5901.461975415122,-98.39568141931221,COMPLETE,1,2026-10-22 11:07:13,1.0,High Confidence,True,True,False,0.51,True,48.04,141,209,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Headie One,@HeadieOne,UC6rlSDvtzpYWgKrYnpjoH5Q,Headie One,539000.0,404036865.0,238.0,295625.0,3321.7314892102045,-86.4970228361893,COMPLETE,1,2026-10-22 11:06:52,1.0,High Confidence,True,True,False,3.29,True,47.97,142,202,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Rich Amiri,@RichAmiri,UCoAlpsKqwk1nhC3HgaNmwmw,Rich Amiri,241000.0,140530824.0,91.0,,496.22097498540825,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:17:37,1.0,High Confidence,True,True,False,25.16,True,47.93,143,99,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Famous Dex,@famousdex,UCdGP_MdTu-4nv8KPe-pr2uw,Famous Dex,886000.0,336436340.0,156.0,,199.65042124388725,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:04:48,1.0,High Confidence,True,True,False,22.94,True,47.83,144,130,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Giveon,@Giveon,UCkIgbcsXIHz0DW2lqRh4M0g,GIVĒON,3510000.0,2431471052.0,25.0,,2138.5086397313057,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:24:48,0.6,Medium Confidence,True,True,False,21.12,True,47.71,145,153,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Kamaiyah,@kamaiyah,UC--zl6ugn42K16BJ_bPmAOQ,Kamaiyah,110000.0,60682344.0,109.0,,403.54442447340136,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:05:49,1.0,High Confidence,True,True,False,26.75,True,46.96,146,82,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Pro Era,@PROERA,UC42LFWlZf-ooul-Kghq9DlA,PRO ERA,841000.0,449369891.0,268.0,,232.800468224475,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:26:26,0.75,Medium Confidence,True,False,False,23.02,True,46.88,147,129,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Three 6 Mafia,@three6mafia,UCa-MexmcInkyWUzyyA3WUTw,Three 6 Mafia,911000.0,866763135.0,38.0,,349.7630813010539,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:56:29,1.0,High Confidence,True,True,False,22.91,True,46.81,148,132,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Ivorian Doll,@IvorianDoll,UCfsQaNOlC5INLmD4z40oYtw,IVORIAN DOLL,208000.0,18290825.0,31.0,,963.8238849177229,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:08:27,1.0,High Confidence,True,True,False,25.64,True,46.75,149,91,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Rae Sremmurd,@RaeSremmurd,UC9iDw30SeRSm18kT98F5iAA,Rae Sremmurd,8950000.0,5333377549.0,115.0,,160.12758435765699,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:59:50,0.75,Medium Confidence,True,False,False,19.97,True,46.65,150,170,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Landon Cube,@landoncube,UCBCOAI6rmskcEpcjXbj2wSA,Landon Cube,197000.0,38025665.0,83.0,5243.0,30.781415226734726,100.0,COMPLETE,1,2026-10-22 11:22:33,0.75,Medium Confidence,True,False,False,51.16,True,46.49,151,28,ZOMBIE_CHANNEL,True,"High subscriber base (197,000) with negligible viewership (30.8 views/day)." +Lil Reese,@LilReese,UCZDsx30mTTobhsMczPVRM9A,Lil Reese,211000.0,60161578.0,85.0,,328.6220322123589,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:04:39,1.0,High Confidence,True,True,False,25.36,True,46.38,152,95,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Rich the Kid,@RichTheKid,UCvTEOPrdg8f_mufsqH3VGQw,Rich The Kid,2630000.0,1336789620.0,171.0,3651.0,1954.8993462976443,-98.15515681924984,COMPLETE,1,2026-10-22 11:04:51,1.0,High Confidence,True,True,False,0.01,True,46.38,152,211,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +EST Gee,@ESTGee,UCz_QWRP1UzcV10sfML8Gbxw,EST Gee,981000.0,1424855357.0,121.0,19357.285714285714,2791.584494384478,-94.5687651387039,COMPLETE,1,2026-10-22 11:03:51,1.0,High Confidence,True,True,False,1.03,True,46.29,154,207,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Tink,@OfficialTink,UCZgDQHB5j-Hhey5lRsJbP6Q,Tink ,797000.0,582961809.0,17.0,,1481.1246027566322,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:05:46,0.75,Medium Confidence,True,False,False,23.22,True,46.29,154,125,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Nelly,@Nelly,UCOnzS9RKEhSvfUCsFbSrJ_A,Nelly,6420000.0,6416097302.0,5.0,,1296.0148129239894,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:57:24,0.75,Medium Confidence,True,False,False,20.36,True,45.96,156,165,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +IDK,@IDK,UCyzWvqEm4w0HTS6OGemsZCA,idk,240000.0,104549643.0,519.0,,158.5091633512508,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:01:34,0.75,Medium Confidence,True,False,False,25.06,True,45.95,157,101,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Chris Webby,@ChrisWebby,UCISVviKwSuJLSyLwUKrbP8w,ForTheBurbs,819000.0,894805686.0,668.0,34062.0,711.9989851644756,-48.72497365648051,COMPLETE,1,2026-10-22 11:21:40,0.6,Medium Confidence,True,True,False,11.66,True,45.94,158,192,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Azealia Banks,@AzealiaBanks,UCD4UMQ7oryQQq5gqZStJQ6g,Azealia Banks,680000.0,497522794.0,11.0,,696.1777682099028,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:06:17,1.0,High Confidence,True,True,False,23.4,True,45.84,159,122,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +DMX,@dmx,UCQcTmBevae2jDeFEZ6VEQPw,DMX,3080000.0,2715459995.0,7.0,,514.6727511953404,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:55:42,1.0,High Confidence,True,True,False,21.25,True,45.83,160,150,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Chance the Rapper,@chancetherapper,UCeXp3EC97_rUl_e2vgM3gLg,Chance The Rapper,1730000.0,756001617.0,278.0,5087.5,173.86769008555143,-41.357846809982135,COMPLETE,1,2026-10-22 11:04:45,1.0,High Confidence,True,True,False,12.72,True,45.7,161,190,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +City Girls,@CityGirls,UCMKv9a5OeqElzuWy1WOR0kA,City Girls,2040000.0,1109112353.0,77.0,,248.3170123790347,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:05:28,0.75,Medium Confidence,True,False,False,21.78,True,45.54,162,142,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Slowthai,@slowthai,UCKHvQqJdl2cyPUmcXLFUeaQ,slowthai,416000.0,189327166.0,29.0,,388.50789504839935,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:07:23,1.0,High Confidence,True,True,False,24.16,True,45.53,163,109,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Ghostface Killah,@GhostfaceKillah,UCse6QIKj-dHMWgKSmag8JUA,Ghostface Killah,226000.0,168538226.0,9.0,,1076.1569836043548,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:56:15,1.0,High Confidence,True,True,False,25.5,True,45.5,164,93,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Rowdy Rebel,@RowdyRebel,UCLCcNXq8GZ5xKpG7wz2MzJQ,Rowdy Rebel,299000.0,145730360.0,103.0,,157.6437779444396,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:01:11,1.0,High Confidence,True,True,False,24.67,True,45.41,165,103,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Duckwrth,@DUCKWRTH,UCqCjmUIKpKe9bjoJKzP3ypA,duckwrth,205000.0,117475259.0,144.0,,130.5021836369795,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:01:46,1.0,High Confidence,True,True,False,25.33,True,45.27,166,96,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Skepta,@skeptaofficial,UCcfVrE3mmeQZ_RN3u5cUECA,SKEPTA,1010000.0,565913183.0,113.0,8168.666666666667,2289.508131007683,-97.71851507040614,COMPLETE,1,2026-10-22 11:06:32,1.0,High Confidence,True,True,False,0.25,True,45.09,167,210,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Pa Salieu,@PaSalieu,UCf2su0Eljvo9Uya9Ha1bhsA,Pa Salieu,154000.0,42185769.0,124.0,,163.2454593165061,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:07:26,1.0,High Confidence,True,True,False,25.89,True,45.01,168,86,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Knucks,@Knucks,UCU_8AjoQFl4KglLAVc1yhTg,Knucks,242000.0,119844661.0,111.0,,310.4964967947614,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:07:16,0.75,Medium Confidence,True,False,False,25.09,True,44.72,169,100,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Kenny Beats,@kennybeats,UCApPPpJ4d3ueW38lArwiWoA,Kenny Beats,802000.0,85982807.0,93.0,,260.0984176896025,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:20:03,0.75,Medium Confidence,True,False,False,23.1,True,44.62,170,128,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Common,@common,UCBGDlQIq1hx5nSTIpWTsGAQ,Common,508000.0,299524031.0,225.0,,85.32669411549671,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:56:02,0.75,Medium Confidence,True,False,False,23.78,True,43.69,171,115,ZOMBIE_CHANNEL,True,"High subscriber base (508,000) with negligible viewership (85.3 views/day)." +Bino Rideaux,@binorideaux,UC0c5KVbr5ENnvuSOWVYG_dQ,Bino Rideaux,134000.0,116110016.0,33.0,,524.9578131139592,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:03:33,0.75,Medium Confidence,True,False,False,26.39,True,43.35,172,84,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Kreayshawn,@kreayshawn,UCP4vIL84k78_tAM--K9hPtQ,kreayshawn,353000.0,182347874.0,127.0,,50.250885469099074,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:06:11,1.0,High Confidence,True,True,False,24.36,True,43.12,173,105,ZOMBIE_CHANNEL,True,"High subscriber base (353,000) with negligible viewership (50.3 views/day)." +Kalan.FrFr,@kalanfrfr,UCaS2A6-C4J38u7lWZ90ituQ,Kalan. FrFr,159000.0,148620240.0,175.0,1869.5,504.2801392130478,-68.18684591168213,COMPLETE,1,2026-10-22 11:03:37,1.0,High Confidence,True,True,False,8.15,True,43.02,174,194,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +B.o.B,@bob,UCpuvu8mrEO4jxjT6sRwE8tg,B.o.B,1470000.0,2537337150.0,488.0,,24.263792913153335,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:59:25,0.65,Medium Confidence,False,True,False,22.21,True,42.59,175,139,ZOMBIE_CHANNEL,True,"High subscriber base (1,470,000) with negligible viewership (24.3 views/day)." +GoldLink,@goldlink,UCLrYAuxT8pJjckotkBgvw1A,GoldLink,614000.0,495682406.0,47.0,,61.400530612862724,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:01:42,1.0,High Confidence,True,True,False,23.48,True,42.37,176,119,ZOMBIE_CHANNEL,True,"High subscriber base (614,000) with negligible viewership (61.4 views/day)." +Swae Lee,@SwaeLee,UCUJTvb20oc_15y3DRNvZlEA,Swae Lee,1000000.0,176172059.0,244.0,22342.0,428.68200705423294,-95.2776110317306,COMPLETE,1,2026-10-22 10:59:53,1.0,High Confidence,True,True,False,0.68,True,42.16,177,208,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +NxWorries,@NxWorries,UC33hb9_RLREo8h_Div8eryQ,NxWorries,76500.0,56129770.0,16.0,,664.9911289291866,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:10,0.75,Medium Confidence,True,False,False,27.92,True,42.03,178,79,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Loyle Carner,@LoyleCarner,UCSK1XOrBlCh1D8BPpUg-VvQ,Loyle Carner,175000.0,67735165.0,18.0,,199.41609841161812,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:07:19,1.0,High Confidence,True,True,False,25.66,True,42.02,179,90,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Maiya The Don,@MaiyaTheDon,UCqSAaO04_0hIu_y2ww8HIGg,Maiya The Don,44100.0,10153004.0,244.0,,47.10717203813847,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:24:02,1.0,High Confidence,True,True,False,28.42,True,41.92,180,77,ZOMBIE_CHANNEL,True,"High subscriber base (44,100) with negligible viewership (47.1 views/day)." +Knxwledge,@knxwledge,UCYiSYtOdVvX0M3JnVgBDlwQ,Knx.,193000.0,71744072.0,278.0,25838.0,374.9705952851086,-75.87195457898717,COMPLETE,1,2026-10-22 11:25:13,0.94,High Confidence,True,True,False,5.95,True,41.88,181,196,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +MadeinTYO,@MadeinTYO,UCd8yaXFD449WbtKVN3T6G4g,MadeinTYO,186000.0,111154995.0,131.0,,32.3563632772266,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:05:00,1.0,High Confidence,True,True,False,25.47,True,41.5,182,94,ZOMBIE_CHANNEL,True,"High subscriber base (186,000) with negligible viewership (32.4 views/day)." +Big L,@BigL,UClfc5w-snHQh9g_NkM3hfsA,Big L - Fishing Channel,41600.0,7319838.0,172.0,,48.03391073311159,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:13:34,0.94,High Confidence,True,True,False,28.56,True,40.64,183,74,ZOMBIE_CHANNEL,True,"High subscriber base (41,600) with negligible viewership (48.0 views/day)." +Westside Gunn,@GriseldaRecords,UCMd41AKqQhGVyEdQAjnzFUg,Griselda Records,210000.0,51888154.0,93.0,,122.15433375006808,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:37:58,0.6,Medium Confidence,True,True,False,25.28,True,40.47,184,98,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Le$,@steakxshrimp,UCnIkgwlzhtWUnkH7IVn-zwg,Le$,40500.0,76676210.0,71.0,,124.8838517760514,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:03:16,0.75,Medium Confidence,True,False,False,28.8,True,40.42,185,72,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Wiki,@wikset,UCNqBhMHw4XVzR0mPGb1sqxw,Wiki,40300.0,9695095.0,71.0,,144.45369590014337,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:26:48,0.75,Medium Confidence,True,False,False,28.86,True,40.12,186,71,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +BJ The Chicago Kid,@bjthechicagokid,UCQfYvnxjucGHJ2QZoNgPd8A,BJ THE CHICAGO KID,159000.0,62758735.0,120.0,,20.756213495007692,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:01,1.0,High Confidence,True,True,False,25.75,True,39.94,187,88,ZOMBIE_CHANNEL,True,"High subscriber base (159,000) with negligible viewership (20.8 views/day)." +Travis Porter,@travisporter,UC5Vqp4ptZ4jrqUXyk-Ps6RQ,Travis Porter,383000.0,431566903.0,493.0,,6.839644668128885,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:59:29,0.75,Medium Confidence,True,False,False,24.22,True,39.28,188,107,ZOMBIE_CHANNEL,True,"High subscriber base (383,000) with negligible viewership (6.8 views/day)." +Junglepussy,@junglepussy,UCzyRFjuI6Csk_pYqGkstgCQ,JUNGLEPUSSY,61600.0,11430128.0,40.0,,61.16396113004449,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:26:07,1.0,High Confidence,True,True,False,27.69,True,39.28,188,80,ZOMBIE_CHANNEL,True,"High subscriber base (61,600) with negligible viewership (61.2 views/day)." +Dillon Cooper,@TheDillonCooper,UCiIIKrTlCj7dzuJpocuopeg,The Dillon Cooper,126000.0,43139656.0,92.0,,26.10409065057022,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:26:42,0.94,High Confidence,True,True,False,26.19,True,39.22,190,85,ZOMBIE_CHANNEL,True,"High subscriber base (126,000) with negligible viewership (26.1 views/day)." +Kaytranada,@KAYTRANADA,UCJwaqVwGHi73m-WQWK3QODw,KAYTRANADA,478000.0,333388777.0,9.0,56946.0,979.1247654131028,-83.70224092040868,COMPLETE,1,2026-10-22 11:19:39,1.0,High Confidence,True,True,False,3.68,True,38.64,191,201,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +DJ Paul,@DJPaulKOM,UC-rRDx7NkObaaHmxEYsYhNQ,DJ Paul KOM,203000.0,91220482.0,615.0,1354.0,360.71279716286176,-98.83517863748591,COMPLETE,1,2026-10-22 11:16:41,0.59,Medium Confidence,False,True,False,0.0,True,38.53,192,212,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Danny Brown,@xdannyxbrownxVEVO,UCeGvYqb1ySghLFTz9DLvIJQ,xdannyxbrownxVEVO,42800.0,60595030.0,40.0,,125.19419534656488,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:46:10,0.6,Medium Confidence,True,True,False,28.66,True,38.08,193,73,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Peezy,@PeezyOfficial,UCwAAwrmGsZeaWveX3JXbt1Q,GHETTO ,329000.0,365797867.0,40.0,5750.0,1291.2065460180559,-92.87465590341397,COMPLETE,1,2026-10-22 11:04:04,0.6,Medium Confidence,True,True,False,1.64,True,37.84,194,205,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Waka Flocka Flame,@WakaFlockaFlame,UCtR2-AA3PJenlI1j3-4mixQ,WakaFlockaFlame,32700.0,27679826.0,115.0,,14.152387830163429,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:57:40,1.0,High Confidence,True,True,False,29.04,True,37.61,195,70,ZOMBIE_CHANNEL,True,"High subscriber base (32,700) with negligible viewership (14.2 views/day)." +Fly Anakin,@flyanakin,UCJDOkVhW-P2_gQymglj8zSg,Fly Anakin,13300.0,2963733.0,18.0,,94.22613185172862,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:47,1.0,High Confidence,True,True,False,31.96,True,37.37,196,58,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Pink Siifu,@pinksiifu,UCKt2e1_kJluunXqrmZwg73A,Pink Siifu,26100.0,5948278.0,86.0,,21.120039544563394,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:44,1.0,High Confidence,True,True,False,29.61,True,37.35,197,65,ZOMBIE_CHANNEL,True,"High subscriber base (26,100) with negligible viewership (21.1 views/day)." +Leikeli47,@Leikeli47,UCQnPkl4Wzw8sJlQnzNapMkw,Leikeli47,48400.0,53840110.0,3.0,,152.90242956286193,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:26:03,1.0,High Confidence,True,True,False,28.41,True,37.31,198,78,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Robb Bank$,@RobbBanks,UCwe3r6KPaqm4zmU3zcrzNmA,Robb Banks,77200.0,31222153.0,121.0,8349.0,190.18206453885753,-80.76045627376426,COMPLETE,1,2026-10-22 11:23:04,0.94,High Confidence,True,True,False,5.08,True,37.26,199,197,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Sa-Roc,@sarocthemc,UCdqK2Ak_aHHfUP0d9MSGx_g,Sa-Roc,69700.0,11649628.0,292.0,858.0,11.937516893952575,-23.902439024390244,COMPLETE,1,2026-10-22 11:02:29,1.0,High Confidence,True,True,False,20.71,True,37.17,200,160,ZOMBIE_CHANNEL,True,"High subscriber base (69,700) with negligible viewership (11.9 views/day)." +Monte Booker,@montebooker,UCGOyB6FLU0YJwFxDe7svfSQ,monte booker,43000.0,22392723.0,14.0,,57.87834470615598,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:20:06,1.0,High Confidence,True,True,False,28.5,True,37.12,201,75,ZOMBIE_CHANNEL,True,"High subscriber base (43,000) with negligible viewership (57.9 views/day)." +Bow Wow,@bowwow,UCbmukh7xJ3YJ5BYcTcUKD3g,bowwow,5740.0,3084923.0,7.0,,193.05873924251233,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:57:31,1.0,High Confidence,True,True,False,,True,36.92,202,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Mykki Blanco,@mykkiblanco,UCTlUMLdh0Po11lbKdyButOg,Mykki Blanco,23900.0,6315848.0,35.0,,34.56077574483203,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:56,1.0,High Confidence,True,True,False,29.88,True,36.77,203,64,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Moneybagg Yo,@MoneyBaggYo,UCuDKkfUbuUyOrxROp3imOtQ,Nless ENT,24900.0,11462645.0,34.0,,90.20945669106496,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:00:13,0.6,Medium Confidence,True,True,False,29.99,True,36.19,204,63,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Zombie Juice,@ZombieJuice,UCKGJCJ9qV-N6RDuTVWSp7GQ,Zombie 🤎 Juice,20200.0,2452942.0,20.0,,49.43999535791272,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:26:21,1.0,High Confidence,True,True,False,30.4,True,36.17,205,61,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Doechii,@iamdoechii,UCzhJcrh7fTbyxas7f_VUZCw,Iamdoechii,21300.0,1826360.0,19.0,,35.92250532104261,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 09:35:55,0.94,High Confidence,True,True,False,30.19,True,34.79,206,62,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Cormega,@Cormega,UCDr7PkdYaXaUsEbsbnq9wrA,Cormega,26900.0,10202408.0,21.0,,20.670652652412485,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:14:46,1.0,High Confidence,True,True,False,29.53,True,34.76,207,66,ZOMBIE_CHANNEL,True,"High subscriber base (26,900) with negligible viewership (20.7 views/day)." +Cakes da Killa,@cakesdakilla,UC-6mfQSP-XTly0HxJkPUkog,Cakes Da Killa,9930.0,1825568.0,17.0,,23.413367693653573,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:53,1.0,High Confidence,True,True,False,,True,33.44,208,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Zebra Katz,@zebrakatz,UCvLaOMuCZYPb7n3Efm6yhtQ,ZEBRA KATZ,26300.0,7208292.0,63.0,,4.8754878002000295,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:59,1.0,High Confidence,True,True,False,29.53,True,33.42,209,66,ZOMBIE_CHANNEL,True,"High subscriber base (26,300) with negligible viewership (4.9 views/day)." +billy woods,@backwoodzstudioz,UCsNN9hxtbHNWkN4OkVsPRmg,backwoodz studioz,22700.0,5279179.0,165.0,4803.0,92.34417938104993,-69.22633349351274,COMPLETE,1,2026-10-22 11:25:28,0.6,Medium Confidence,True,True,False,9.28,True,33.22,210,193,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Bishop Nehru,@BishopNehru,UCASDtXB7s9-px9N_2H22Maw,bishop nehru,60000.0,10905546.0,341.0,241.83333333333334,13.44324564449102,-82.37794510565945,COMPLETE,1,2026-10-22 11:26:39,1.0,High Confidence,True,True,False,4.53,True,32.51,211,198,ZOMBIE_CHANNEL,True,"High subscriber base (60,000) with negligible viewership (13.4 views/day)." +$uicideboy$,@Suicideboys,UC0Ej3md6NdNVAQ6bgFpYLEA,Kerem Yılmaz,2060.0,1892568.0,16.0,,39.18168968379894,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:22:52,0.6,Medium Confidence,True,True,False,,True,30.88,212,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Drodi,@Drodi,UCn08fOEp4vWi9hYJRSE2HyQ,DRODi,30600.0,17362354.0,65.0,568.6666666666666,63.60425916498281,-93.88146686990048,COMPLETE,1,2026-10-22 11:18:43,0.75,Medium Confidence,True,False,False,1.56,True,30.17,213,206,ZOMBIE_CHANNEL,True,"High subscriber base (30,600) with negligible viewership (63.6 views/day)." +Dax,@dax,UCbmbOwHmiI6v0y7LrCVnzAA,Dax Newman,13800.0,258573.0,54.0,,6.147743750330002,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:21:26,0.69,Medium Confidence,True,False,False,31.19,True,30.11,214,59,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Young Dolph,@youngdolph,UCuVMjVzveBK9tGKnUO3qofA,Starlife T.V.,60.0,6697.0,47.0,46.333333333333336,0.9570111319047332,100.0,COMPLETE,1,2026-10-22 11:00:06,0.6,Medium Confidence,True,True,False,,True,29.89,215,,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Dr. Dre,@drdre,UC-b8dfnUFzTPMw3P96aYJ5Q,drdreaftermath1,255.0,355824.0,1.0,,62.506057890114086,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:55:18,0.94,High Confidence,True,True,False,,True,28.19,216,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Babyface Ray,@BabyfaceRay,UCsirOC1PMaUbun_kcTZWYIg,Triple3,1140.0,598642.0,354.0,,0.3078842296286496,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:04:01,0.6,Medium Confidence,True,True,False,,True,27.68,217,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Tion Wayne,@TionWayne,UCniE_Mw3sM-RWymBS5YUFpg,Tion Wayne,14500.0,109610.0,3.0,,9.672503343950867,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:07:10,1.0,High Confidence,True,True,False,31.08,True,27.66,218,60,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Mike G,@MikeG,UCHOCaw0vJzbyjRCsITk6Esg,Mike G.,1540.0,1016071.0,152.0,,0.38080115108093193,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:03:02,0.75,Medium Confidence,True,False,False,,True,27.48,219,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Nas,@nas,UC5SAXwIWWMQu4l6Dy1II0Vw,NYCNastyNas,1330.0,505819.0,7.0,,13.87547062236042,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:54:58,0.69,Medium Confidence,True,False,False,,True,27.02,220,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Redman,@redman,UCR7shDso1IKq_6GqlAYa2QA,レッドマン REDMAN,312.0,349916.0,192.0,,0.6241817838287901,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:55:32,0.75,Medium Confidence,True,False,False,,True,26.98,221,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Anthony Hamilton,@AnthonyHamilton,UC9xiUG5vNVq8zP6zWqkWXlA,anthonyhamilton,972.0,230864.0,14.0,,2.8888047945946966,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:04,1.0,High Confidence,True,True,False,,True,26.16,222,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Kano,@TheKano,UC5m0MNzd8UrlaLQ592IlboA,TheKano,1360.0,378631.0,97.0,,0.03286884875305254,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:06:39,0.69,Medium Confidence,True,False,False,,True,25.23,223,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Classified,@classified,UCedXPEOU39D5aW2JkZt74lA,classified,52.0,167791.0,165.0,,0.2672978666681774,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:21:59,0.75,Medium Confidence,True,False,False,,True,24.74,224,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Ghetts,@Ghetts,UCOX0jCB0lR8FtyPYle8EqyA,ghetts,92.0,148133.0,1.0,,19.589880317144,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:07:29,1.0,High Confidence,True,True,False,,True,24.7,225,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Chamillionaire,@chamillionaire,UCRsbxjPGwyNdBptqXV7Pv-A,Chamillionaire,224.0,101447.0,4.0,,3.596962738661918,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:15:59,1.0,High Confidence,True,True,False,,True,23.16,226,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Ja Rule,@JaRule,UCNT16tMLjZ-UzH7eiF2ql5g,jarule,22.0,88294.0,20.0,,0.6100030603364249,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:57:20,1.0,High Confidence,True,True,False,,True,21.77,227,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Noname,@noname,UC9vLO5n3t353gLruylt5rqA,noname,150.0,6199.0,39.0,,0.016646111628975602,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:02:20,0.75,Medium Confidence,True,False,False,,True,21.15,228,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Rick Ross,@RickRoss,UCbTWNRyvFpcyybbJlFAsbUQ,rickross,106.0,12359.0,9.0,,0.18501933819735886,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:55:58,1.0,High Confidence,True,True,False,,True,19.89,229,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Armani Caesar,@ArmaniCaesar,UCTdbClj8Uz0FTZINKIJRP2A,Armanicaesar,279.0,10422.0,4.0,,0.57095562093227,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:02:32,1.0,High Confidence,True,True,False,,True,19.82,230,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Che Noir,@CheNoir,UCCPDWycF81zcmT33-g4UVDg,Griot David,65.0,41001.0,14.0,,0.5029355705295357,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:02:26,0.6,Medium Confidence,True,True,False,,True,19.67,231,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Action Bronson,@ActionBronson,UCocSg2BVl-dzF6Bqu4AGfOw,Domino Master,57.0,3389.0,34.0,,0.03162422947307707,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:02:49,0.6,Medium Confidence,True,True,False,,True,19.5,232,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Pop Smoke,@PopSmoke,UC9IaYM5dD5lx8vIa-H9bGsQ,Pop Smoke,136.0,2500.0,10.0,,0.04179247042715218,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:01:04,1.0,High Confidence,True,True,False,,True,19.39,233,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +The Game,@thegame,UCamcIB1XOOWcYsZQh2luIfQ,thegame,233.0,1184.0,13.0,,0.017854485736235434,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:57:15,0.75,Medium Confidence,True,False,False,,True,18.93,234,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Tommy Cash,@TOMMYCASH,UCfTT_8NBApXFDZOBiMpNMxw,tommycash,16.0,10005.0,6.0,,0.26199285785242904,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:23:22,1.0,High Confidence,True,True,False,,True,18.05,235,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Chaz French,@chazfrench,UCri50zksjHpiSGjyVqZjMXQ,Chaz French,4.0,1754.0,17.0,,0.015701076269775623,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:27:11,1.0,High Confidence,True,True,False,,True,17.99,236,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Dej Loaf,@dejloaf,UCC-zCFLurKWJq0wfTKcZK3g,DeJ Loaf,62.0,3019.0,1.0,,1.0395282121467389,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:05:40,1.0,High Confidence,True,True,False,,True,17.26,237,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +T.I.,@TI,UCqwttHwUNgg3pnqIxBBMZiA,T̈I,2210.0,279.0,1.0,,0.04218837929766944,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:55:48,1.0,High Confidence,True,True,False,,True,17.13,238,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Rakim,@TheGodRakim,UCxPnezcMwtaTqfXqZJEY6kw,RAKIM,36.0,1203.0,1.0,,1.410869450330989,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:13:40,1.0,High Confidence,True,True,False,,True,17.03,239,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Pastor Troy,@PastorTroy,UC4iK3jxieU6wf8ZMP6ct2pQ,pastortroy,1.0,6943.0,10.0,,0.09281360934060737,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:15:44,1.0,High Confidence,True,True,False,,True,17.03,239,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Paul Wall,@PaulWall,UCh4T0pQonIYPLMZpAWmkgbw,Paul Wall,410.0,3818.0,1.0,,0.5426765099541483,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:15:55,0.75,Medium Confidence,True,False,False,,True,16.98,241,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +The Alchemist,@alchemist,UCWOyFeAjY-h4zOi1Dq6H1Ig,alchemist,23.0,441.0,5.0,,0.05865740005851329,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:19:31,0.94,High Confidence,True,True,False,,True,16.3,242,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Bia,@PrincessBia,UCtGeAD1nHdttKrDilQYH3aA,Bianca Ferreira Santos,4.0,1280.0,9.0,,0.11790554879623397,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:05:22,0.69,Medium Confidence,True,False,False,,True,15.91,243,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Hodgy Beats,@hodgy,UCQU_mRYw78qdQ5Ro0iItwqw,Hodgy,14.0,6749.0,1.0,,0.9171673494414561,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:02:58,0.69,Medium Confidence,True,False,False,,True,15.39,244,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Tay Keith,@TayKeith,UCxnVohRp5AhAHPyZfhtv2mg,taykeith,6.0,3302.0,1.0,,0.7093204359509626,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:19:09,1.0,High Confidence,True,True,False,,True,15.37,245,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Black Thought,@BlackThought,UCE8DuVpxTvACnF6P5NpRnNA,Blackthought,6.0,1960.0,2.0,,0.3261482022399735,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:14:09,1.0,High Confidence,True,True,False,,True,15.36,246,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Outkast,@outkast,UC_EmR_tnB5Sgtfb6fi-Fe5g,outkast,57.0,1405.0,1.0,,0.18457493818359597,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:55:38,0.75,Medium Confidence,True,False,False,,True,14.79,247,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Princess Nokia,@PrincessNokia,UC6Cs4PgUqJYu-ColJkgQKTA,princessnokia,1.0,4846.0,1.0,,0.7532605767526876,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:06:04,1.0,High Confidence,True,True,False,,True,14.73,248,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Fat Nick,@fatnick,UC499HnWevdhXkM3QdMNOvAg,fatnick,4.0,2676.0,1.0,,0.35395118824280625,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:22:46,1.0,High Confidence,True,True,False,,True,14.49,249,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Southside,@Southside808MAFIA,UCZWB7Yt1LROd-4vK3WMlxEA,Southside,2.0,379.0,4.0,,0.08481547952790817,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:18:51,0.75,Medium Confidence,True,False,False,,True,14.03,250,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Petey Pablo,@PeteyPablo,UCevLDRQ1iyaVt7uOh4MB-kw,peteypablo,0.0,1386.0,2.0,,0.10464634209418122,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:15:50,1.0,High Confidence,True,True,False,,True,13.49,251,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Scarface,@BrotherMob,UC4A1VGe3DUe91rQSeLlAe9Q,Brothermob,6.0,973.0,2.0,,0.08279633922351967,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:56:40,0.6,Medium Confidence,True,True,False,,True,13.45,252,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +The Underachievers,@TheUnderachievers,UCphsrqhHhxrrRMMRgKE4ytQ,THEUNDERACHIEVERS,1.0,1696.0,2.0,,0.12017241488918179,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:26:13,0.75,Medium Confidence,True,False,False,,True,13.35,253,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Real Boston Richey,@RealBostonRichey,UCry9nlM1ohh3mkzUHIYXz8w,Amarizay Media,0.0,12.0,10.0,,0.0008541561559277939,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:18:12,0.6,Medium Confidence,True,True,False,,True,13.14,254,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Beanie Sigel,@BeanieSigel,UCgBnyQ5wQ3mP64YJwCB_FXg,Marvin F,6.0,100.0,2.0,,0.027273053844270756,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:14:13,0.6,Medium Confidence,True,True,False,,True,12.64,255,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Angel Haze,@AngelHaze,UC4K96jLWz4iTNLfgz43kuFQ,darksperm arias,2.0,926.0,1.0,,0.12665540339191148,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:06:20,0.6,Medium Confidence,True,True,False,,True,12.26,256,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Jadakiss,@RealJadakiss,UCFsXGOBWsnTbc1h76DBjuwQ,Jadakiss,0.0,3.0,2.0,,0.026183102898886618,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:57:05,1.0,High Confidence,True,True,False,,True,11.38,257,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Arin Ray,@ArinRay,UCWPgtckk3wJvj0Vq00vA7kw,arinray,0.0,164.0,1.0,,0.02464932905303363,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:24:57,0.75,Medium Confidence,True,False,False,,True,11.2,258,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Token,@tokenhiphop,UCDtQWudSjXfxyvnsdVyl4nQ,tokenhiphop,1170000.0,337749832.0,689.0,28339.0,5612.428526848735,100.0,COMPLETE,1,2026-10-22 11:21:08,0.34,Low / Emerging,False,False,False,45.85,False,59.23,,,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Dave,@Santandave,UC5-cg5RahETrjGu-r8zjYCQ,Santan Dave,2560000.0,1586015443.0,28.0,,56204.57596454707,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:06:29,0.34,Low / Emerging,False,False,False,23.01,False,52.14,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Chlöe,@chloe,UCha4JJMZFxiDM_w_xiinn9g,Chloé,71100.0,5368205.0,264.0,2749.88,272.7934630400919,100.0,COMPLETE,1,2026-10-22 11:24:16,0.0,Low / Emerging,False,False,False,55.39,False,44.32,,,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Halle,@halle,UCRY85L378qsvQf1cYhBPrzg,Halle,575000.0,101709894.0,34.0,,917.2185019484491,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:24:20,0.4,Low / Emerging,False,False,False,23.7,False,42.28,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Belly,@Belly,UCApVgpSBW-oKTHNBz4w9Lrg,Belly,426000.0,309186854.0,160.0,,227.17220253426552,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:22:02,0.4,Low / Emerging,False,False,False,24.09,False,41.97,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Armand Hammer,@ArmandHammer,UCQFrMmsCQ2gs2Q-FFZOMJRQ,ARM & HAMMER Baking Soda,97700.0,153467784.0,283.0,1013.8,6151.145504372419,-97.15119089100453,COMPLETE,1,2026-10-22 11:25:36,0.35,Low / Emerging,True,False,False,5.66,False,41.32,,,ACTIVE_HEALTHY,False,Consistent release schedule and steady audience engagement. +Saba,@sabapivot,UCSpnyV4h2tmp7G_mwyjrUMg,Saba Pivot,181000.0,80123988.0,202.0,,116.44493630123574,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:37:45,0.34,Low / Emerging,False,False,False,25.56,False,39.44,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Lord Apex,@LordApex,UCDZUyjSZSTuCPTJh0RhkOKQ,LawdAPEX,67900.0,15244987.0,63.0,,37.26264026840499,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:50,0.25,Low / Emerging,False,True,False,27.45,False,33.22,,,ZOMBIE_CHANNEL,True,"High subscriber base (67,900) with negligible viewership (37.3 views/day)." +2Pac,@2pac,UCyIDWVf-nwdO6yvGHw_53Qw,Tupac Shakur,17900.0,3286053.0,9.0,,64.89168902622308,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 10:55:15,0.35,Low / Emerging,True,False,False,30.83,False,30.79,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Tony Yayo,@TonyYayo,UCy_qlXYa5fOx63lbr960pSg,Tony Tony,10700.0,5879528.0,41.0,,19.437579112507365,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:14:29,0.25,Low / Emerging,False,True,False,32.03,False,29.84,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Buddy,@Buddy,UCHF2jvB2rQl4ouuO0N4kCbA,Buddy,8250.0,217465.0,84.0,,1.7870456114477415,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:01:50,0.4,Low / Emerging,False,False,False,,False,26.54,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Mist,@mistmusic,UCiAucC06h7VA6TMNV1-wLYg,Mist Music,1160.0,118081.0,18.0,,5.672971227643788,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:08:03,0.4,Low / Emerging,False,False,False,,False,24.56,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Heems,@himanshusuri,UCHk08OSG9C7TFRxCsAWdSXA,Himanshu Suri,57.0,10806.0,16.0,,0.4163710418279303,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:27:02,0.35,Low / Emerging,True,False,False,,False,18.23,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Omen,@omen,UCq8wK_22WcV0R1IYq2Uc4Kg,Ledge,100000.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:02:11,0.6,Medium Confidence,True,True,False,,False,15.03,,,ZOMBIE_CHANNEL,True,"High subscriber base (100,000) with negligible viewership (0.0 views/day)." +JT,@TheGirlJT,UCmYY4-4XfbpX5SxV2AXk6qw,THE_BLESSING,3.0,1132.0,2.0,,1.8786181228964818,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:05:31,0.25,Low / Emerging,False,True,False,,False,14.27,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Flying Lotus,@flyinglotus,UC6An_wEqusDnouBmzQtHheA,Flying Lotus,3590.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:19:49,1.0,High Confidence,True,True,False,,False,14.12,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Freeway,@PhillyFreeway,UCe-W3ZRbzDFspmcHIv4kvVg,PHILLY FREEWAY,20.0,110.0,1.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:14:16,0.94,High Confidence,True,True,False,,False,13.46,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Mike Jones,@MikeJones,UCccVLcC_mXMUQYtsWyeR8Og,mikejones,163.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:16:06,1.0,High Confidence,True,True,False,,False,12.07,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Yung Manny,@yungmanny,UCq2dIggerIf3yUptEyxyucg,ِ,2430.0,0.0,0.0,,0.0,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:27:31,0.35,Low / Emerging,True,False,False,,False,12.06,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Boi-1da,@boi1da,UC26B3MXy4S7Tj3YPpWHWvHg,boi1da,157.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:19:20,1.0,High Confidence,True,True,False,,False,12.04,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +SoFaygo,@imsofaygo,UCWr3KwXfuMyMIn_in0aEp0g,SoFaygo,135.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:05:14,1.0,High Confidence,True,True,False,,False,11.94,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Jay Rock,@JayRock,UChOFcVvoYzK6mKBNm-OHOGg,jayrock,88.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:58:30,1.0,High Confidence,True,True,False,,False,11.66,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Joyner Lucas,@JoynerLucas,UCBCeu9ddOBTY657g86rs3XA,joyner lucas,68.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:59:03,1.0,High Confidence,True,True,False,,False,11.49,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Iayze,@iayze,UCCSkzoIUxT2UO3O7e49CR6g,AkimaBOY,13.0,125.0,1.0,,0.033036155076491776,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:17:49,0.25,Low / Emerging,False,True,False,,False,11.46,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Lil Dude,@lildude,UCHoAfN5pPN5zyv1iFcwpJnQ,Colin,3.0,212.0,1.0,,0.15657540775268505,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:27:43,0.35,Low / Emerging,True,False,False,,False,11.4,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Ice Cube,@IceCube,UCt-Zv4EjvQBMoY8ohZ7361Q,icecube,51.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:55:21,1.0,High Confidence,True,True,False,,False,11.3,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Big Daddy Kane,@BigDaddyKane,UCZYAK-IDwg8cYV0ZNtdXXkg,bigdaddykane,44.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:13:43,1.0,High Confidence,True,True,False,,False,11.21,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Chip,@OfficialChip,UC0XCesM2KjAJXuaZwJqTmVw,Chip,290.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:08:11,0.4,Low / Emerging,False,False,False,,False,10.96,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Dreezy,@dreezy,UC9wXtR39GhbYMdjc9maJCPQ,dreezy,26.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:05:43,1.0,High Confidence,True,True,False,,False,10.87,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +E-40,@e40,UCUipCeRRkBrgc7i9Nj8eFNg,e40,64.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:56:43,0.65,Medium Confidence,False,True,False,,False,10.65,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Osamason,@osamason,UCi070EeStoEFw7qmRuDsEPA,osamason,18.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:17:30,1.0,High Confidence,True,True,False,,False,10.63,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Ice Spice,@IceSpicee,UCg_2uXqIYOI5gfO3k7lS1RQ,Icespicee,14.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 09:35:57,0.94,High Confidence,True,True,False,,False,10.35,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Snak The Ripper,@snaktheripper,UCA5vTxSaCAtMJ4urgXczT5w,SNAKTHERIPPER,9.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:21:50,1.0,High Confidence,True,True,False,,False,10.21,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Earl Sweatshirt,@earlsweatshirt,UCWZNQjbzof4ETDHVPOkJ-LA,EarlSweatshirt,8.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:02:53,1.0,High Confidence,True,True,False,,False,10.14,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +U-God,@UGod,UCQ8RfOm09o66EgNQ9oAWsUA,UGOD,7.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:14:57,1.0,High Confidence,True,True,False,,False,10.06,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +ASAP Ferg,@asapferg,UCUj7iYGlyUpk1QRJbB1BbIw,ASAP Ferg,24.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:58:16,0.65,Medium Confidence,False,True,False,,False,10.06,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Unknown T,@UnknownT,UC_yOn48nwI4-5zW_NNrRefQ,unknownT,7.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:07:02,1.0,High Confidence,True,True,False,,False,10.06,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Kankan,@kankan,UCoP0jKakdCTaWEoZOfIMHRQ,kankan,10.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:17:45,0.75,Medium Confidence,True,False,False,,False,9.76,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Big Pun,@BigPun,UCP0bFJYf8QC8MpgnPMROEGw,bigpun,4.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:56:36,1.0,High Confidence,True,True,False,,False,9.74,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Lil Xan,@lilxan,UCoquPm0tiGrOCOU-enQ-qGQ,lilxan,4.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:22:36,1.0,High Confidence,True,True,False,,False,9.74,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +G-Eazy,@GEazy,UCKv91xwk4M7AJSqNPeRh2rw,Baller Lyrics,16.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:58:49,0.6,Medium Confidence,True,True,False,,False,9.71,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Elucid,@elucid,UCZHhKEmLo3qTO3EX5-WgEbw,loki,0.0,25.0,1.0,,0.004701371234536349,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:25:32,0.35,Low / Emerging,True,False,False,,False,9.69,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +CJ Fly,@flyhighteam,UCtbXwhkQT8tLmiSjt6bJ8BA,Fly High,1.0,11.0,1.0,,0.011986903154848436,0.0,CATALOG_ACTIVE_NO_RECENT_UPLOAD,1,2026-10-22 11:26:36,0.25,Low / Emerging,False,True,False,,False,9.66,,,CATALOG_EVERGREEN,False,Strong passive catalog views despite release pause. +Sada Baby,@SadaBaby,UC_Y8JEw1kegRagyGcsvuhug,Sada Baby,3.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:04:23,1.0,High Confidence,True,True,False,,False,9.6,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Too $hort,@tooshort,UChjOFNGG5xm9eR9lN3X-lhA,tooshort,11.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:56:47,0.6,Medium Confidence,True,True,False,,False,9.5,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +D-Block Europe,@DBlockEurope,UCf2zm35V7sOu6xqpsLGApyw,D Block Europe,2.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:07:32,1.0,High Confidence,True,True,False,,False,9.4,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +GloRilla,@GloRillaOfficial,UCxA369Q3PQetW1_EHzT1jyA,GloRilla Official,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 09:35:56,1.0,High Confidence,True,True,False,,False,9.13,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Takeoff,@TakeoffYRN,UCL_75QAVD7FWmKxiuzez0Jg,TakeOff,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:59:47,1.0,High Confidence,True,True,False,,False,9.13,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Young Adz,@YoungAdz,UC9E_-3b3bNd1bPHJ3k5NT1g,youngadz,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:07:35,1.0,High Confidence,True,True,False,,False,9.13,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Hunxho,@Hunxho,UCaDby8c3cNu_4KTLRZHiBsw,Hunxho,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:18:17,1.0,High Confidence,True,True,False,,False,9.13,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +G Perico,@GPerico,UC-I9BB2qgwfgV79Pi-3UnMw,pedro picapiedra,4.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:03:25,0.6,Medium Confidence,True,True,False,,False,8.97,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +TrDee,@TrDee,UCxCiUUnbAaKtAyH17kUxVig,trdee,2.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:17:59,0.75,Medium Confidence,True,False,False,,False,8.93,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +StanWill,@StanWill,UCXtSW6bhRpaxTI2fBO4HX2g,Stan Williams,2.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:17:55,0.69,Medium Confidence,True,False,False,,False,8.82,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +42 Dugg,@42Dugg,UCjb762-ISoKEN2vaWDQTBMA,42dugg,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:03:54,1.0,High Confidence,True,True,False,,False,8.67,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Dirtbike LB,@DirtbikeLB,UCABR1s2XPINNv_U_-PGY0CQ,DirtbikeLB,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:07:38,1.0,High Confidence,True,True,False,,False,8.67,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Kool A.D.,@koolad,UC5c1wjl80-w6hf7fSuMylkw,koolad,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:27:05,1.0,High Confidence,True,True,False,,False,8.67,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Das Racist,@dasracist,UCIFAZqUwJSE83N-1lvMmEpg,Das Racist,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:27:08,1.0,High Confidence,True,True,False,,False,8.67,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +A$AP Rocky,@asvpxrocky,UCQvBJ3KsFv7rmdBb6m2yBZw,asvpxrocky,2.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:36:19,0.6,Medium Confidence,True,True,False,,False,8.65,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +A Tribe Called Quest,@ATCQ,UCvOHPF-DN1y9s_Tm6x2bRuA,Cheese Lover 67,2.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:14:03,0.6,Medium Confidence,True,True,False,,False,8.65,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +RMC Mike,@RmcMike,UCHG1_qTaCaSxcmnrtA9nlJA,Regina McMichael,2.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:04:14,0.6,Medium Confidence,True,True,False,,False,8.65,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Z-Ro,@TheRealZRo,UCQK0157RABjLC3ZN08tT9wg,TheRealZRo,2.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:16:10,0.59,Medium Confidence,False,True,False,,False,8.63,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +JID,@JIDsv,UCtutsNr3hicMg4uwbv9YzYQ,jidsv,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 09:35:56,0.69,Medium Confidence,True,False,False,,False,8.57,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +B.G.,@BGMtH,UCJ5RW38548BAovbpKtcsXTQ,BGMTH,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:15:37,0.94,High Confidence,True,True,False,,False,8.57,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Aminé,@heyamine,UCmEZ_XWUuac1G3wfO8kq0Lg,Hey Amine,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:01:38,0.94,High Confidence,True,True,False,,False,8.57,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Larry June,@LarryJuneTFM,UCKG9RcBxRNrQXccJMpk4iCQ,LarryjuneTFM,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:03:19,0.94,High Confidence,True,True,False,,False,8.57,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Jme,@JmeBBK,UC3zrGtvr6duMGxamLI-Yfow,jmebbk,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:06:35,0.69,Medium Confidence,True,False,False,,False,8.57,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Giggs,@GiggsOfficial,UCBQ6UIO1JAyYqzxlQIuZKuA,GiggsOfficial,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:08:18,0.94,High Confidence,True,True,False,,False,8.57,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +YG,@4hunnid,UCNGY-0d3PT2anaC81YUI5PQ,kat,4.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:58:34,0.35,Low / Emerging,True,False,False,,False,8.48,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Ludacris,@Ludacris,UCiRh4A7TnKMCbQcIK91ZXDA,im back,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:55:44,0.6,Medium Confidence,True,True,False,,False,8.4,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Slick Rick,@SlickRickTheRuler,UCxRHFoHJmLj0YJioh-XNDuA,Richard J Fury,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:13:46,0.6,Medium Confidence,True,True,False,,False,8.4,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Big Flame,@bigflame,UC5IGsTgwhYceqkb-fh0eliQ,ハート!?,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:27:46,0.6,Medium Confidence,True,True,False,,False,8.4,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Payroll Giovanni,@payrollgiovanni,UCGb6eqQpk2PXL1IF5IZnqYg,Payroll Giovanni,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:04:29,0.75,Medium Confidence,True,False,False,,False,8.24,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Paris Texas,@paristexas,UCVOXWwOI8OJV2jRT0Zc_hlQ,paristexas,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:20:29,0.75,Medium Confidence,True,False,False,,False,8.24,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Spillage Village,@spillagevillage,UCbNegc_Y69GOQwnjBdTKvSw,SpillageVillage,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:20:46,0.75,Medium Confidence,True,False,False,,False,8.24,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Phil Ade,@philade,UCoPamDUcoGEmoCn_xPLGQwQ,Philade,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:27:13,0.75,Medium Confidence,True,False,False,,False,8.24,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Wale,@wale,UCrcOEJR2M83DCO01aeDHeeQ,Wall,2.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:58:06,0.35,Low / Emerging,True,False,False,,False,8.18,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +dvsn,@dvsndvsn,UCQt3GeG337Cb-QGVH5NRO0w,Dvsn Dvsn,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:22:13,0.69,Medium Confidence,True,False,False,,False,8.14,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Ratking,@ratkingnyc,UCBS0yBTQxxBv6UMat-DP1tQ,Rat King NYC,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:26:51,0.69,Medium Confidence,True,False,False,,False,8.14,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Wheezy,@WheezyOuttaHere,UCP8aia-sQQqsL_aPjQcLciA,WHEEZY,1.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:19:13,0.4,Low / Emerging,False,False,False,,False,8.04,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +GZA,@TheGeniusGZA,UCEoPurCFRVmlMKbwBVlLZEw,Dale DaSilva,2.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:56:22,0.25,Low / Emerging,False,True,False,,False,7.99,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Future,@FutureOfficial,UCq0QYvEbA-VBfoXqfZM1euQ,Táo Office ,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:35:21,0.6,Medium Confidence,True,True,False,,False,7.98,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Cardi B,@iamcardib,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Young Thug,@youngthugonline,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +DaBaby,@DaBabyOfficial,UCwhXK-tgApWwJc-rQNCghdQ,Walter ,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 10:36:37,0.6,Medium Confidence,True,True,False,,False,7.98,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Pusha T,@pushat,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Smino,@Sminoofcl,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Isaiah Rashad,@IsaiahRashad,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Jay-Z,@JayZ,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Jeezy,@jeezy,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Talib Kweli,@TalibKweli,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Raekwon,@Raekwon,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Bun B,@BunBofUGK,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Twista,@twista,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Cam'ron,@mr_camron,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Styles P,@stylesp,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Chingy,@Chingy,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Soulja Boy,@SouljaBoyTellem,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Kool G Rap,@KoolGRap,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +KRS-One,@KRSOne,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +The Roots,@theroots,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Young Buck,@buckmentality,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Inspectah Deck,@InspectahDeck,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Masta Killa,@MastaKilla,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Killah Priest,@KillahPriest,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Krayzie Bone,@KrayzieBone,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Layzie Bone,@LayzieBone,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Bizzy Bone,@BizzyBone,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Mannie Fresh,@MannieFresh,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Big Pokey,@BigPokey,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Devin the Dude,@DevinTheDude,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Project Pat,@ProjectPat,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Juicy J,@juicyj,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Schoolboy Q,@ScHoolboyQ,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Ab-Soul,@AbSoul,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Hopsin,@Hopsintv,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Quavo,@QuavoHuncho,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Slim Jxmmi,@SlimJxmmi,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Rich Homie Quan,@RichHomieQuan,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Key Glock,@KeyGlock,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Yo Gotti,@yogottivideos,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Kevin Gates,@kevingates,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Boosie Badazz,@boosiebadazz,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +King Von,@KingVon,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Trippie Redd,@TrippieRedd,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Ski Mask the Slump God,@SkiMaskTheSlumpGod,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Cordae,@cordae,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Deante' Hitchcock,@DeanteHitchcock,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Mick Jenkins,@mickjenkins,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Rome Streetz,@RomeStreetz,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Conway the Machine,@WHOISCONWAY,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Benny The Butcher,@BennyTheButcher,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Boldy James,@BoldyJames,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Roc Marciano,@rocmarciano,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Maxo Kream,@MaxoKream,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Big K.R.I.T.,@BigKRIT,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Curren$y,@currensy,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Smoke DZA,@SmokeDZA,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Jay Worthy,@JayWorthy,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Veeze,@veeze__,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +YN Jay,@YNJayCoochieMan,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Bfb Da Packman,@BfbDaPackman,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Fredo Santana,@FredoSantana,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Jay Critch,@JayCritch,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +SSGKobe,@ssgkobe,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Saweetie,@saweetie,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Yung Miami,@YungMiami,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Tierra Whack,@TierraWhack,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Brooke Candy,@BrookeCandy,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Stormzy,@StormzyTV,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Dizzee Rascal,@dizzeerascal,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Aitch,@AitchOfficial,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Digga D,@DiggaD,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +K-Trap,@ktrap_official,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +M Huncho,@mhuncho,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Nines,@Nines,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Potter Payper,@PotterPayper,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Rimzee,@Rimzee,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +MoStack,@MoStack,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Stefflon Don,@stefflondon,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Summrs,@summrs,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +BabyTron,@BabyTron,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Luh Tyler,@luhtyler,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Rob49,@Rob49,UCI8kw6HS4-E3tnyl5-7SFlg,robofox,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:18:24,0.6,Medium Confidence,True,True,False,,False,7.98,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Hit-Boy,@HitBoy,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Westside Boogie,@westsideboogie,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Tom MacDonald,@AllHailTomMacDonald,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Merkules,@Merkules,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Night Lovell,@NightLovell,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Lil Skies,@lilskies,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Smokepurpp,@smokepurpp,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Lil Pump,@lilpump,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Xavier Wulf,@TheHollowSquad,UCI8TtbCN45bwg7LlX6B0nVQ,hollowsquad,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:22:59,0.6,Medium Confidence,True,True,False,,False,7.98,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Chris Travis,@WaterBoyz,UCXOKvQXx7h1QYrR52PzqmUA,waterboyz,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:23:01,0.6,Medium Confidence,True,True,False,,False,7.98,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Yung Lean,@yunglean,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Bladee,@bladee,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Ecco2k,@ecco2k,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Thaiboy Digital,@thaiboydigital,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +BBNO$,@bbnomula,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Jhené Aiko,@JheneAiko,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Tinashe,@Tinashe,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Brent Faiyaz,@brentfaiyaz,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Lucky Daye,@LuckyDaye,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Quelle Chris,@quellechris,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Open Mike Eagle,@OpenMikeEagle,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Moor Mother,@MoorMother,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Flatbush Zombies,@TheGloriousDead,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Meechy Darko,@MeechyDarko,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Kirk Knight,@kirkknight,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Nyck Caution,@nyckcaution,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Fat Trel,@FatTrel,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +NoCap,@NoCap,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Rylo Rodriguez,@RyloRodriguez,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Q Da Fool,@qdafool,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Goonew,@goonew,,,,,,,,,FAILED_LOOKUP,0,,0.6,Medium Confidence,True,True,False,,False,7.98,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Kasher Quon,@kasherquon,UCz4vFlS1BzT-KpYdlTRUT1A,David Margineantu,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:27:54,0.6,Medium Confidence,True,True,False,,False,7.98,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +ScarLip,@ScarLip,UCFUH5T1ddGVbha9otxp6rFg,pdc,5.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:24:06,0.0,Low / Emerging,False,False,False,,False,7.89,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Lil Baby,@LilBaby,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +EARTHGANG,https://www.youtube.com/@EarthgangOfficial,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +UGK,@UGKfilmz,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Cassidy,@CASSIDY_LARSINY,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Mobb Deep,@mobbdeep,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Havoc,@HavocOfMobbDeep,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +AZ,@QuietMoneyAZ,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Juvenile,@Juvenile,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Mystikal,@Mystikal,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +David Banner,@DavidBanner,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Lil Keke,@DonKeKe,UCHx6MENYjoqxP38F9SYFNRA,Don keke,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:16:27,0.35,Low / Emerging,True,False,False,,False,7.55,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +NBA YoungBoy,@nba_youngboy,UCXkT3vaYMF80LKZIMRLkHEg,YoungBoy Never Broke Again,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:00:36,0.35,Low / Emerging,True,False,False,,False,7.55,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Reason,@reasontde,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Bas,@fiendbassy,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Cozz,@cody_macc,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Lute,@lute_west9,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +100k Track,@100kTrack,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Foolio,@JulioFoolio,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Chika,@chika,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Fredo,@Fredo,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +BashfortheWorld,@bashfortheworld,UChTS28SfhsV0AORN80S6crw,cooler ice,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:18:48,0.35,Low / Emerging,True,False,False,,False,7.55,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +Madlib,@MadlibInvazion,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Sango,@sango,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +AG Club,@agclub,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Grip,@Grip_SS,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Cal Scruby,@CalScruby,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Pouya,@pouya,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +BONES,@TeamSESH,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Oshun,@oshunnyc,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Erick the Architect,@erickarchitect,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Hak,@haknyc,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Sporting Life,@sportinglife,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Despot,@despotnyc,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Shy Glizzy,@ShyGlizzy,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +KrispyLife Kidd,@krispylife_kidd,,,,,,,,,FAILED_LOOKUP,0,,0.35,Low / Emerging,True,False,False,,False,7.55,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Trae tha Truth,@traethatruth,,,,,,,,,FAILED_LOOKUP,0,,0.25,Low / Emerging,False,True,False,,False,7.37,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +6ix9ine,@Tekashi69,,,,,,,,,FAILED_LOOKUP,0,,0.25,Low / Emerging,False,True,False,,False,7.37,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Autumn!,@twinuzis,,,,,,,,,FAILED_LOOKUP,0,,0.25,Low / Emerging,False,True,False,,False,7.37,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +K-os,@kosinfluence,,,,,,,,,FAILED_LOOKUP,0,,0.25,Low / Emerging,False,True,False,,False,7.37,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +SpaceGhostPurrp,@SpaceGhostPurrp,,,,,,,,,FAILED_LOOKUP,0,,0.25,Low / Emerging,False,True,False,,False,7.37,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Mos Def,@yasiinbey,,,,,,,,,FAILED_LOOKUP,0,,0.0,Low / Emerging,False,False,False,,False,6.94,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Prodigy,@ProdigyOfMobbDeep,,,,,,,,,FAILED_LOOKUP,0,,0.0,Low / Emerging,False,False,False,,False,6.94,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +SiR,@inglewoodSiR,,,,,,,,,FAILED_LOOKUP,0,,0.0,Low / Emerging,False,False,False,,False,6.94,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Dom Genesis,@DomsGenesis,,,,,,,,,FAILED_LOOKUP,0,,0.0,Low / Emerging,False,False,False,,False,6.94,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. +Homixide Gang,@HomixideGang,UCXqRBWZBjd-cNsUumTj-1Ug,Naomi Flores,0.0,0.0,0.0,,,,INACTIVE_OR_DORMANT,0,2026-10-22 11:17:27,0.0,Low / Emerging,False,False,False,,False,6.94,,,DORMANT_CATALOG,False,Zero recent uploads and stalled catalog velocity. +BabySmoove,@babysmoove,,,,,,,,,FAILED_LOOKUP,0,,0.0,Low / Emerging,False,False,False,,False,6.94,,,UNRESOLVED,False,Channel could not be resolved via YouTube API. diff --git a/identity_verification_audit.xlsx b/identity_verification_audit.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ecf8349b89c81565c279aeb583a6927ca3f61807 GIT binary patch literal 37851 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index f43baa4..4885c71 100644 --- a/main.py +++ b/main.py @@ -1,91 +1,196 @@ +""" +main.py +Production CSV-driven batch pipeline: +- Loads seed artists from data/seed_artists_500.csv via RosterLoader +- Checkpoint-aware batch execution (saves every CHUNK_SIZE artists) +- tqdm progress tracking with ETA +- Exports: + 1. enriched_artists.csv (Full master dataset) + 2. identity_verification_audit.xlsx (Separate multi-tab Excel workbook) +""" + import os -import argparse +import sys +import time import pandas as pd from dotenv import load_dotenv +from tqdm import tqdm from collectors.youtube_collector import YouTubeCollector from verifiers.musicbrainz_verifier import MusicBrainzVerifier from verifiers.wikidata_verifier import WikidataVerifier from core.confidence_scorer import ConfidenceScorer -from core.ranking_engine import RankingEngine +from core.ranking_engine import HIFFIRankingEngine +from core.health_detector import ChannelHealthDetector +from data.roster_loader import RosterLoader -def run_pipeline(input_csv: str = "cleaned_artists_inventory.csv", limit: int = 10, output_csv: str = "enriched_artists.csv"): - load_dotenv() - api_key = os.getenv("YOUTUBE_API_KEY") +load_dotenv() - if not api_key: - print("[Notice] No YOUTUBE_API_KEY found in .env. Running YouTube in offline fallback mode.") +CSV_ROSTER_PATH = "data/seed_artists_500.csv" +OUTPUT_CSV_PATH = "enriched_artists.csv" +OUTPUT_EXCEL_PATH = "identity_verification_audit.xlsx" +CHUNK_SIZE = 25 - print(f"Loading data from {input_csv}...") - df = pd.read_csv(input_csv) + +def export_verification_excel(df: pd.DataFrame, excel_path: str = OUTPUT_EXCEL_PATH): + """ + Exports a clean, multi-tab Excel workbook dedicated to identity verification audits. + """ + # Columns relevant for identity verification + audit_cols = [ + "name", + "channel_title", + "identifier", + "confidence_score", + "confidence_tier", + "status_flag", + "mb_verified", + "wd_verified", + "cross_referenced", + ] - # Process only the selected sample batch limit - batch_df = df.head(limit).copy() - print(f"Processing sample batch of {len(batch_df)} artists...\n") + # Filter available columns defensively + existing_cols = [c for c in audit_cols if c in df.columns] + audit_df = df[existing_cols].copy() - # Initialize all services - yt_collector = YouTubeCollector(api_keys=[api_key] if api_key else None) + # Sort by confidence score descending + if "confidence_score" in audit_df.columns: + audit_df = audit_df.sort_values(by="confidence_score", ascending=False) + + # Flagged subset for low confidence or failed lookups + flagged_df = audit_df[ + (audit_df["confidence_score"] < 0.50) + | (audit_df["status_flag"].isin(["FAILED_LOOKUP", "LOOKUP_ERROR"])) + ].copy() + + with pd.ExcelWriter(excel_path, engine="openpyxl") as writer: + audit_df.to_excel(writer, sheet_name="Identity Verification Audit", index=False) + flagged_df.to_excel(writer, sheet_name="Flagged & Unresolved", index=False) + + print(f"📊 Separate Identity Verification workbook exported to '{excel_path}'") + + +def run_batch_pipeline(roster_path: str = CSV_ROSTER_PATH, force_refresh: bool = False): + print(f"\n========================================================") + print(f" HIFFI PRODUCTION INGESTION PIPELINE") + print(f" Source: {roster_path} | Checkpoint Chunk: {CHUNK_SIZE}") + print(f"========================================================\n") + + loader = RosterLoader(file_path=roster_path) + artists = loader.load_roster() + total_artists = len(artists) + + collector = YouTubeCollector() mb_verifier = MusicBrainzVerifier() wd_verifier = WikidataVerifier() - scorer = ConfidenceScorer() - ranking_engine = RankingEngine() + conf_scorer = ConfidenceScorer() + ranking_engine = HIFFIRankingEngine() + health_detector = ChannelHealthDetector() - results = [] + all_records = [] - for idx, row in batch_df.iterrows(): - name = str(row.get("Name", "")).strip() - yt_url = str(row.get("Youtube", "")).strip() - print(f"[{idx + 1}/{len(batch_df)}] Analyzing Artist: '{name}'") + progress_bar = tqdm( + total=total_artists, + desc="Processing Roster", + unit="artist", + ncols=95, + bar_format="{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}, {rate_fmt}]" + ) - # 1. Collect YouTube 5 metrics - yt_data = yt_collector.get_channel_metrics(yt_url, fetch_recent_videos=False) + for i, artist in enumerate(artists): + name = artist["name"] + ident = artist["identifier"] + progress_bar.set_postfix_str(f"Analyzing: {name[:18]}") - # 2. Verify against MusicBrainz - mb_data = mb_verifier.verify_artist(name) + record = {**artist} - # 3. Verify against Wikidata - wd_data = wd_verifier.verify_artist(name) + try: + # 1. Fetch channel metrics + yt = collector.get_channel_metrics( + ident, + fetch_recent_videos=True, + force_refresh=force_refresh, + ) + record.update(yt) - # 4. Compute composite confidence score - score_data = scorer.calculate_score(yt_data, mb_data, wd_data) + # 2. Verify identity across MusicBrainz & Wikidata + mb = mb_verifier.verify_artist(name) + wd = wd_verifier.verify_artist(name) - # Merge results into record - results.append({ - "UID": row.get("UID", ""), - "Name": name, - "Youtube": yt_url, - "Instagram": row.get("Instagram", ""), - "Location": row.get("Location", ""), - "yt_subscribers": yt_data.get("subscribers", 0), - "yt_lifetime_views": yt_data.get("lifetime_views", 0), - "yt_video_count": yt_data.get("video_count", 0), - "yt_recent_avg_views": yt_data.get("recent_avg_views", 0), - "yt_momentum_30d": yt_data.get("momentum_30d", 0.0), - "yt_status": yt_data.get("status", ""), - "mb_verified": mb_data.get("verified", False), - "mb_id": mb_data.get("mbid", ""), - "wd_verified": wd_data.get("verified", False), - "wd_id": wd_data.get("wikidata_id", ""), - "composite_confidence": score_data.get("composite_confidence", 0.0), - "confidence_tier": score_data.get("confidence_tier", "Low") - }) + yt_with_name = {**yt, "name": name} + conf_result = conf_scorer.calculate_score( + yt_metrics=yt_with_name, mb_result=mb, wd_result=wd + ) - raw_out_df = pd.DataFrame(results) + # Record verification sub-metrics for Excel export + record["confidence_score"] = float(conf_result.get("composite_confidence", 0.0)) + record["confidence_tier"] = conf_result.get("confidence_tier", "Unknown") + sub_scores = conf_result.get("sub_scores", {}) + record["mb_verified"] = bool(sub_scores.get("musicbrainz", 0.0) == 1.0) + record["wd_verified"] = bool(sub_scores.get("wikidata", 0.0) == 1.0) + record["cross_referenced"] = bool(sub_scores.get("cross_referenced", False)) - # 5. Apply Log-Transformation + Min-Max Scaling Ranking Engine - print("\nApplying logarithmic normalization & Min-Max ranking...") - out_df = ranking_engine.normalize_metrics(raw_out_df) + except Exception as e: + record.update({ + "channel_id": None, + "channel_title": None, + "subscriber_count": None, + "lifetime_views": None, + "video_count": None, + "recent_avg_views": None, + "daily_view_velocity": None, + "momentum_30d": None, + "status_flag": "LOOKUP_ERROR", + "data_complete": 0, + "confidence_score": 0.0, + "confidence_tier": "Error / Unresolved", + "mb_verified": False, + "wd_verified": False, + "cross_referenced": False, + "error_notes": str(e), + }) + + all_records.append(record) + progress_bar.update(1) + + # Intermediate checkpoint every CHUNK_SIZE + if (i + 1) % CHUNK_SIZE == 0 or (i + 1) == total_artists: + temp_df = pd.DataFrame(all_records) + ranked_temp = ranking_engine.score_and_rank(temp_df) + health_temp = health_detector.evaluate_dataframe(ranked_temp) + health_temp.to_csv(OUTPUT_CSV_PATH, index=False) + + progress_bar.close() + + # Final scoring and health detection + print("\n--- Finalizing Official HIFFI Ranks & Breakout Indices ---") + df_raw = pd.DataFrame(all_records) + ranked_df = ranking_engine.score_and_rank(df_raw) + final_df = health_detector.evaluate_dataframe(ranked_df) + + # 1. Save Master CSV + final_df.to_csv(OUTPUT_CSV_PATH, index=False) + print(f"✅ Master dataset written to '{OUTPUT_CSV_PATH}'") + + # 2. Save Separate Identity Verification Excel + export_verification_excel(final_df, excel_path=OUTPUT_EXCEL_PATH) + + # Summary Leaderboard + print("\n--- Top 10 HIFFI Market Leaders ---") + hiffi_top10 = final_df[final_df["is_rank_eligible"] == True].sort_values( + by="hiffi_rank", ascending=True + ).head(10) + summary_cols = [ + "hiffi_rank", + "name", + "hiffi_score", + "breakout_rank", + "breakout_velocity_index", + "daily_view_velocity", + "health_status", + ] + print(hiffi_top10[summary_cols].to_string(index=False)) - out_df.to_csv(output_csv, index=False) - print(f"Pipeline run complete. Results saved to '{output_csv}'.\n") - - # Display the final ranked overview table - summary_cols = ["hiffi_rank", "Name", "hiffi_score", "yt_subscribers", "composite_confidence", "confidence_tier"] - print(out_df[summary_cols].to_string(index=False)) if __name__ == "__main__": - parser = argparse.ArgumentParser(description="HIFFI Artist Intelligence Pipeline") - parser.add_argument("--limit", type=int, default=10, help="Number of records to test") - args = parser.parse_args() - - run_pipeline(limit=args.limit) \ No newline at end of file + run_batch_pipeline(roster_path=CSV_ROSTER_PATH, force_refresh=False) \ No newline at end of file diff --git a/~$identity_verification_audit.xlsx b/~$identity_verification_audit.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b4ca301bc1253defaba8537c5675c758c2df4747 GIT binary patch literal 165 qcmd;bbn@`@bBuIU2vQ&ca4|SCI5BuIcry3_S&=}jzz_t)w1EJUG7xhB literal 0 HcmV?d00001