Aperçu
Ce workflow s'exécute tous les dimanches soir et analyse Reddit pour détecter les signaux de demande liés aux idées de projets parallèles. Il recherche des fils où les gens décrivent des besoins non satisfaits, demandent des outils ou se plaignent de solutions existantes. Les résultats sont classés par engagement et regroupés par domaine de problème. Le résultat est un rapport hebdomadaire des 10 meilleurs signaux de demande avec les scores d'engagement et les URL sources.
Déclencheur
Planification Cron (hebdomadaire, dimanche à 20h UTC)
Planification
Hebdomadaire (dimanche à 20h UTC)
Étapes du workflow
Définir les requêtes de recherche
Maintenir une liste de requêtes de signal de demande : 'J'aurais aimé qu'il existe', 'quelqu'un connaît un outil pour', 'j'ai créé un outil qui', 'à la recherche d'une alternative à'. Chacune capture un modèle de demande différent.
Rechercher sur Reddit via Scavio
Pour chaque requête, appelez la recherche Scavio Reddit avec tri par nouveau. Collectez les fils avec titres, scores, nombre de commentaires et noms de subreddit.
Filtrer et classer
Filtrer les fils des 7 derniers jours. Classer par score d'engagement : votes positifs + 2 * commentaires. Regrouper par subreddit pour identifier les communautés avec la plus forte demande.
Dédoublonner les fils similaires
Fusionner les fils traitant du même sujet (correspondance floue des titres) en un seul signal de demande avec des scores d'engagement combinés.
Générer un rapport hebdomadaire
Produire les 10 premiers signaux de demande sous forme de rapport en markdown avec description du problème, score d'engagement, URL des fils principaux et répartition par subreddit.
Implémentation Python
import requests, os, json
SCAVIO_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": SCAVIO_KEY}
DEMAND_QUERIES = [
"I wish there was a tool for",
"anyone know a tool for",
"looking for alternative to",
"need a better way to",
"built a tool that",
]
def search_reddit(query: str) -> list:
resp = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "reddit", "query": query, "sort": "new"}, timeout=10)
threads = resp.json().get("organic", [])
return [{"title": t["title"], "score": t.get("score", 0),
"comments": t.get("comments", 0),
"engagement": t.get("score", 0) + 2 * t.get("comments", 0),
"url": t.get("link", ""), "query": query}
for t in threads]
all_signals = []
for q in DEMAND_QUERIES:
all_signals.extend(search_reddit(q))
all_signals.sort(key=lambda x: x["engagement"], reverse=True)
print("=== Weekly Demand Report ===")
for i, s in enumerate(all_signals[:10], 1):
print(f"{i}. [{s['engagement']}] {s['title']}")
print(f" Source: {s['url']}")
print(f" Query: {s['query']}\n")Implémentation JavaScript
const DEMAND_QUERIES = [
"I wish there was a tool for",
"anyone know a tool for",
"looking for alternative to",
"need a better way to",
"built a tool that",
];
async function searchReddit(query) {
const resp = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform: "reddit", query, sort: "new" })
});
const threads = (await resp.json()).organic || [];
return threads.map(t => ({
title: t.title, score: t.score || 0, comments: t.comments || 0,
engagement: (t.score || 0) + 2 * (t.comments || 0),
url: t.link || "", query
}));
}
const allSignals = [];
for (const q of DEMAND_QUERIES) {
allSignals.push(...await searchReddit(q));
}
allSignals.sort((a, b) => b.engagement - a.engagement);
console.log("=== Weekly Demand Report ===");
allSignals.slice(0, 10).forEach((s, i) => {
console.log(`${i + 1}. [${s.engagement}] ${s.title}`);
console.log(` Source: ${s.url}`);
console.log(` Query: ${s.query}\n`);
});Plateformes utilisées
Communauté, publications et commentaires imbriqués de n'importe quel subreddit