Aperçu
Ce workflow s'exécute tous les jours à 7h UTC, interroge Scavio pour le nom de marque de chaque concurrent sur Google et Reddit, envoie les résultats bruts à Groq Llama 8B pour résumer, et envoie le digest par email à votre équipe. Coût quotidien total pour 5 concurrents : ~0,03 $ (Scavio) + ~0,005 $ (Groq) = ~0,035 $.
Déclencheur
Planification Cron (tous les jours à 7h UTC)
Planification
Tous les jours à 7h UTC
Étapes du workflow
Charger la liste des concurrents
Lire les noms des concurrents et les mots-clés de suivi depuis un fichier de configuration JSON ou une variable d'environnement.
Rechercher sur Google et Reddit pour chaque concurrent
Pour chaque concurrent, appeler la recherche Google et Reddit de Scavio avec le nom du concurrent. Collecter les résultats organiques et les fils Reddit.
Résumer avec Groq Llama 8B
Envoyer les extraits SERP combinés et les titres Reddit à Groq Llama 8B avec une invite de résumé. Demander 3 à 5 points par concurrent.
Formater le digest email
Compiler les résumés dans un email HTML avec des sections par concurrent, des points et des liens sources.
Envoyer l'email
Envoyer le digest via SMTP, SendGrid ou Resend. Inclure un texte brut de secours pour les clients email qui suppriment le HTML.
Implémentation Python
import requests, os, smtplib
from email.mime.text import MIMEText
SCAVIO_KEY = os.environ["SCAVIO_API_KEY"]
GROQ_KEY = os.environ["GROQ_API_KEY"]
COMPETITORS = ["Tavily", "Serper", "Exa"]
def search_competitor(name):
H = {"x-api-key": SCAVIO_KEY}
serp = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google", "query": f"{name} news 2026"}, timeout=10).json()
reddit = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "reddit", "query": name}, timeout=10).json()
snippets = [r.get("snippet", "") for r in serp.get("organic", [])[:5]]
threads = [r.get("title", "") for r in reddit.get("organic", [])[:5]]
return "\n".join(snippets + threads)
def summarize(text, name):
resp = requests.post("https://api.groq.com/openai/v1/chat/completions",
headers={"Authorization": f"Bearer {GROQ_KEY}"},
json={"model": "llama-3.1-8b-instant", "messages": [
{"role": "user", "content": f"Summarize {name} updates in 3-5 bullets:\n{text}"}
]}).json()
return resp["choices"][0]["message"]["content"]
digest = []
for comp in COMPETITORS:
raw = search_competitor(comp)
summary = summarize(raw, comp)
digest.append(f"## {comp}\n{summary}")
body = "\n\n".join(digest)
msg = MIMEText(body)
msg["Subject"] = "Daily Competitor Digest"
print(body)Implémentation JavaScript
const COMPETITORS = ["Tavily", "Serper", "Exa"];
async function searchCompetitor(name) {
const headers = { "x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json" };
const [serp, reddit] = await Promise.all([
fetch("https://api.scavio.dev/api/v1/search", { method: "POST", headers,
body: JSON.stringify({ platform: "google", query: `${name} news 2026` }) }).then(r => r.json()),
fetch("https://api.scavio.dev/api/v1/search", { method: "POST", headers,
body: JSON.stringify({ platform: "reddit", query: name }) }).then(r => r.json())
]);
const snippets = (serp.organic || []).slice(0, 5).map(r => r.snippet || "");
const threads = (reddit.organic || []).slice(0, 5).map(r => r.title || "");
return [...snippets, ...threads].join("\n");
}
async function summarize(text, name) {
const resp = await fetch("https://api.groq.com/openai/v1/chat/completions", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.GROQ_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ model: "llama-3.1-8b-instant", messages: [
{ role: "user", content: `Summarize ${name} updates in 3-5 bullets:\n${text}` }
]})
}).then(r => r.json());
return resp.choices[0].message.content;
}
for (const comp of COMPETITORS) {
const raw = await searchCompetitor(comp);
const summary = await summarize(raw, comp);
console.log(`## ${comp}\n${summary}\n`);
}Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA
Communauté, publications et commentaires imbriqués de n'importe quel subreddit