Resumen
Este flujo de trabajo monitorea Reddit diario for discussions coincidencia your palabras clave objetivo. It puntuaciones publicaciones by engagement, identifies recurring questions y puntos de dolor, y surfaces el highest-signal discussions as contenido creation oportunidades. El salida feeds en contenido calendars con data-driven topic prioritization.
Desencadenador
Cron programar (diario at 7 AM UTC)
Programación
Ejecuta diario at 7 AM UTC
Pasos del flujo de trabajo
Cargar palabra clave configuracion
Leer palabras clave objetivo y minimo engagement umbrales de configuracion.
Search Reddit for cada palabra clave
Call Scavio con plataforma reddit for cada palabra clave to obtener reciente discussions.
Puntuacion y filtrar publicaciones
Puntuacion publicaciones by upvotes, comentario conteo, y recency. Filtrar out low-signal resultados.
Extraer contenido angles
Analizar publicacion titles y fragmentos to identificar el especifico question o punto de dolor siendo discussed.
Deduplicate y clasificar
Eliminar duplicate topics a traves de palabras clave y clasificar by combined engagement senal.
Salida contenido oportunidades
Save ranked oportunidades as contenido briefs con fuente enlaces y engagement datos.
Implementacion en Python
import requests
import json
from pathlib import Path
from datetime import datetime
API_KEY = "your_scavio_api_key"
KEYWORDS = ["search api", "web scraping alternative", "SERP data", "google results api"]
MIN_SCORE = 5
MIN_COMMENTS = 3
def search_reddit(keyword: str) -> list[dict]:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "reddit", "query": keyword},
timeout=15,
)
res.raise_for_status()
return res.json().get("organic", [])
def score_post(post: dict) -> float:
score = post.get("score", 0)
comments = post.get("comments", 0)
return score + (comments * 2) # Weight comments higher
def run():
all_opportunities = []
seen_titles = set()
for keyword in KEYWORDS:
posts = search_reddit(keyword)
for post in posts:
title = post.get("title", "")
if title in seen_titles:
continue
post_score = post.get("score", 0)
post_comments = post.get("comments", 0)
if post_score >= MIN_SCORE and post_comments >= MIN_COMMENTS:
seen_titles.add(title)
all_opportunities.append({
"keyword": keyword,
"title": title,
"subreddit": post.get("subreddit", ""),
"score": post_score,
"comments": post_comments,
"signal_score": score_post(post),
"link": post.get("link", ""),
"content_angle": post.get("snippet", "")[:200],
})
# Rank by signal score
all_opportunities.sort(key=lambda x: x["signal_score"], reverse=True)
top_opportunities = all_opportunities[:15]
date = datetime.utcnow().strftime("%Y-%m-%d")
report = {
"date": date,
"keywords_searched": len(KEYWORDS),
"total_posts_found": len(all_opportunities),
"top_opportunities": top_opportunities,
}
Path(f"reddit_signals_{date}.json").write_text(json.dumps(report, indent=2))
print(f"Found {len(all_opportunities)} content opportunities, top {len(top_opportunities)} saved")
for opp in top_opportunities[:5]:
print(f" [{opp['subreddit']}] {opp['title'][:60]} (signal: {opp['signal_score']:.0f})")
if __name__ == "__main__":
run()Implementacion en JavaScript
const API_KEY = "your_scavio_api_key";
const KEYWORDS = ["search api", "web scraping alternative", "SERP data", "google results api"];
const MIN_SCORE = 5;
const MIN_COMMENTS = 3;
async function searchReddit(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: "reddit", query: keyword }),
});
if (!res.ok) throw new Error(`scavio ${res.status}`);
return (await res.json()).organic ?? [];
}
function scorePost(post) {
return (post.score ?? 0) + (post.comments ?? 0) * 2;
}
async function run() {
const fs = await import("fs/promises");
const allOpportunities = [];
const seenTitles = new Set();
for (const keyword of KEYWORDS) {
const posts = await searchReddit(keyword);
for (const post of posts) {
const title = post.title ?? "";
if (seenTitles.has(title)) continue;
const postScore = post.score ?? 0;
const postComments = post.comments ?? 0;
if (postScore >= MIN_SCORE && postComments >= MIN_COMMENTS) {
seenTitles.add(title);
allOpportunities.push({
keyword,
title,
subreddit: post.subreddit ?? "",
score: postScore,
comments: postComments,
signalScore: scorePost(post),
link: post.link ?? "",
contentAngle: (post.snippet ?? "").slice(0, 200),
});
}
}
}
allOpportunities.sort((a, b) => b.signalScore - a.signalScore);
const topOpportunities = allOpportunities.slice(0, 15);
const date = new Date().toISOString().slice(0, 10);
const report = { date, keywordsSearched: KEYWORDS.length, totalPostsFound: allOpportunities.length, topOpportunities };
await fs.writeFile(`reddit_signals_${date}.json`, JSON.stringify(report, null, 2));
console.log(`Found ${allOpportunities.length} opportunities, top ${topOpportunities.length} saved`);
for (const opp of topOpportunities.slice(0, 5)) {
console.log(` [${opp.subreddit}] ${opp.title.slice(0, 60)} (signal: ${opp.signalScore})`);
}
}
run();Plataformas utilizadas
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit