The Problem
YouTube growth teams manually check competitor channels, track video performance, research trending topics, and monitor niche benchmarks. This research takes hours per week, produces inconsistent data depending on who does it, and the insights arrive too late to act on. A video idea that was trending three days ago is already saturated by the time the research lands. Teams need automated, consistent data pipelines that surface opportunities in real time, not weekly reports assembled by hand.
The Scavio Solution
Scavio's YouTube search endpoint returns structured video metadata including view counts, publish dates, channel subscribers, and engagement metrics. You build a pipeline that runs daily, searches for niche keywords, tracks which topics are gaining velocity, and compares your metrics against competitors. The data arrives in JSON ready for dashboards or Slack digests. Research that took a team member four hours per week now runs in two minutes on autopilot.
Before
Before Scavio, YouTube research was a manual weekly task that produced stale insights. Growth teams spent hours on data collection instead of content creation.
After
After Scavio, a daily automated pipeline surfaces trending topics, competitor performance, and niche benchmarks. The team spends zero time on data collection and all time on content strategy.
Who It Is For
YouTube growth teams, content strategists, and channel managers who spend hours weekly on manual competitor and topic research. Anyone who wants automated daily insights instead of stale weekly reports.
Key Benefits
- Structured video metadata with views, likes, and publish dates
- Daily automated research replaces hours of manual checking
- Competitor channel tracking with performance benchmarks
- Topic velocity scoring reveals trending opportunities early
- JSON output feeds dashboards, Slack, or content planning tools
Python Example
import requests
import json
from datetime import datetime
from pathlib import Path
API_KEY = "your_scavio_api_key"
def research_topic(keyword: str) -> list[dict]:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "youtube", "query": keyword},
timeout=15,
)
res.raise_for_status()
videos = res.json().get("organic", [])
return [{
"title": v.get("title", ""),
"channel": v.get("channel", ""),
"views": v.get("views", 0),
"published": v.get("published", ""),
"link": v.get("link", ""),
} for v in videos[:10]]
def daily_growth_research(keywords: list[str]) -> dict:
report = {"date": datetime.utcnow().isoformat(), "topics": {}}
for kw in keywords:
videos = research_topic(kw)
total_views = sum(v["views"] for v in videos)
report["topics"][kw] = {
"video_count": len(videos),
"total_views_top_10": total_views,
"top_video": videos[0] if videos else None,
}
return report
keywords = ["react tutorial 2026", "nextjs app router", "ai coding assistant review"]
report = daily_growth_research(keywords)
Path(f"yt_research_{datetime.utcnow().strftime('%Y-%m-%d')}.json").write_text(json.dumps(report, indent=2))
for topic, data in report["topics"].items():
print(f"{topic}: {data['total_views_top_10']:,} total views in top 10")JavaScript Example
const API_KEY = "your_scavio_api_key";
async function researchTopic(keyword) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform: "youtube", query: keyword }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
const data = await res.json();
return (data.organic ?? []).slice(0, 10).map((v) => ({
title: v.title ?? "",
channel: v.channel ?? "",
views: v.views ?? 0,
published: v.published ?? "",
link: v.link ?? "",
}));
}
async function dailyGrowthResearch(keywords) {
const report = { date: new Date().toISOString(), topics: {} };
for (const kw of keywords) {
const videos = await researchTopic(kw);
const totalViews = videos.reduce((sum, v) => sum + v.views, 0);
report.topics[kw] = {
videoCount: videos.length,
totalViewsTop10: totalViews,
topVideo: videos[0] ?? null,
};
}
return report;
}
const keywords = ["react tutorial 2026", "nextjs app router", "ai coding assistant review"];
const report = await dailyGrowthResearch(keywords);
const fs = await import("fs/promises");
await fs.writeFile(`yt_research_${new Date().toISOString().slice(0, 10)}.json`, JSON.stringify(report, null, 2));
for (const [topic, data] of Object.entries(report.topics)) {
console.log(`${topic}: ${data.totalViewsTop10.toLocaleString()} total views in top 10`);
}Platforms Used
YouTube
Video search with transcripts and metadata