Tutorial

How to Audit YouTube Content for Spam Signals

Detect spam signals on a YouTube channel before termination: view-like ratio, comment patterns, and community complaints via Scavio.

r/PartneredYoutube threads show creators blindsided by termination for 'spammy, misleading, scammy' content. This tutorial builds a self-audit that surfaces the same signals YouTube's classifiers use, so a creator can fix issues before enforcement.

Prerequisites

  • Python 3.10+
  • A Scavio API key
  • A target YouTube channel handle

Walkthrough

Step 1: Pull the channel's recent uploads

Scavio's YouTube platform returns structured video lists.

Python
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']

def recent_uploads(handle):
    r = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY},
        json={'query': handle, 'platform': 'youtube', 'num_results': 50})
    return r.json().get('videos', [])

Step 2: Check view-to-like ratio

Spam classifiers flag videos with abnormal engagement ratios.

Python
def view_like_ratio(v):
    views = v.get('view_count', 0)
    likes = v.get('like_count', 0)
    return likes / views if views else 0

Step 3: Scan community complaints on Reddit

Search r/PartneredYoutube and r/youtube for the channel name.

Python
def complaints(handle):
    r = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY},
        json={'query': f'{handle} spam', 'platform': 'reddit'})
    return r.json().get('posts', [])

Step 4: Check for clickbait in titles

Classifier signals: ALL CAPS, excessive emojis, 'SHOCKING' triggers.

Python
import re
CLICKBAIT = [r'\b(SHOCKING|INSANE|YOU WONT BELIEVE)\b', r'!{3,}', r'[A-Z]{6,}']

def clickbait_score(title):
    return sum(1 for p in CLICKBAIT if re.search(p, title))

Step 5: Compose the audit report

Aggregate scores and flag high-risk videos.

Python
def audit(handle):
    videos = recent_uploads(handle)
    flags = [v for v in videos if clickbait_score(v['title']) > 1 or view_like_ratio(v) < 0.005]
    return {'handle': handle, 'flagged_videos': flags, 'complaints': complaints(handle)}

Python Example

Python
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']

def audit(handle):
    r = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY},
        json={'query': handle, 'platform': 'youtube', 'num_results': 50})
    return r.json().get('videos', [])

print(len(audit('@somecreator')))

JavaScript Example

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function audit(handle) {
  const r = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: handle, platform: 'youtube', num_results: 50 })
  });
  return (await r.json()).videos || [];
}

Expected Output

JSON
Risk report per channel with flagged videos (low engagement ratio or clickbait title) plus community complaint threads.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Python 3.10+. A Scavio API key. A target YouTube channel handle. A Scavio API key gives you 500 free credits per month.

Yes. The free tier includes 500 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Detect spam signals on a YouTube channel before termination: view-like ratio, comment patterns, and community complaints via Scavio.