Resumen
Este workflow de n8n se ejecuta con un cron diario, extrae datos de SERP en vivo para una lista de keywords a través de Scavio y convierte cada resultado en un brief de contenido sin ningún traspaso manual. El nodo central es un solo HTTP Request que llama a POST /api/v1/google con light_request=false, que cuesta 2 créditos ($0.01 por keyword) y devuelve organic_results, people_also_ask, knowledge_graph y related_searches en una sola respuesta. A partir de ahí extraes las preguntas de People Also Ask, las búsquedas relacionadas y los títulos orgánicos principales, y pasas ese mapa de demanda a un nodo LLM que redacta el brief: keyword objetivo, intención, preguntas a responder, títulos de la competencia y H2 sugeridos. De forma opcional, una segunda rama llama a POST /api/v1/reddit/search para comprobar si hay gente real preguntando sobre el tema en Reddit, así no escribes briefs para keywords que nadie discute. El compromiso honesto: Scavio te da features de SERP en vivo y demanda de Reddit con una sola clave, pero no devuelve cifras históricas de volumen de búsqueda. Si necesitas volumen, combina este pipeline con DataForSEO (tras su depósito mínimo de $50) u otra fuente de volumen. La ventaja de Scavio aquí es un solo nodo HTTP, features de SERP en vivo y datos multiplataforma bajo un mismo pool de créditos. El plan Starter de n8n cuesta 20 EUR/mes por 2.500 ejecuciones, o puedes autohospedar la Community Edition gratis.
Desencadenador
Cron diario / nodo Schedule Trigger en n8n
Programación
Daily
Pasos del flujo de trabajo
El Schedule Trigger se dispara una vez al día
Añade un nodo Schedule Trigger con un cron diario (por ejemplo a las 06:00). Es lo único que arranca la ejecución, así que no hay traspaso manual. Mantén la lista de keywords objetivo en un nodo Set o en una Google Sheet que el workflow lee al inicio.
Recorre tus keywords objetivo
Usa un nodo Split In Batches (Loop Over Items) sobre tu lista de keywords para que cada una pase por el resto del pipeline de una en una. Así te mantienes bajo el límite de tasa (1 req/s en gratis/PAYG, 2 req/s en Project) y los errores son por keyword, no de todo o nada.
HTTP Request al SERP de Google de Scavio
Añade un nodo HTTP Request: POST https://api.scavio.dev/api/v1/google, cabecera Authorization: Bearer {{ $env.SCAVIO_API_KEY }}, cuerpo JSON {"query": "{{ $json.keyword }}", "light_request": false}. Con light_request=false (2 créditos) la respuesta incluye people_also_ask, knowledge_graph y related_searches junto a organic_results en una sola llamada.
Mapea el hueco de contenido con un nodo Function
Un nodo Function (Code) extrae las preguntas de people_also_ask, los términos de related_searches y los 10 títulos orgánicos principales de la respuesta y los moldea en un mapa de huecos JSON compacto. Esa es la entrada estructurada que el LLM convertirá en brief, así no le pides al modelo que adivine qué está posicionando.
Opcional: contrasta la demanda en Reddit
Añade un segundo nodo HTTP Request que llama a POST https://api.scavio.dev/api/v1/reddit/search con cuerpo {"query": "{{ $json.keyword }}"} (1 crédito). Si vuelven hilos reales, la gente sí discute el tema. Fusiona esos títulos de hilos en el mapa de huecos para que el brief refleje preguntas reales, no solo lo que muestra Google.
El nodo LLM redacta el brief
Pasa el mapa de huecos a un nodo LLM (OpenAI, Anthropic o cualquier nodo de modelo) con un prompt que devuelve un brief estructurado: keyword objetivo, intención de búsqueda, las preguntas PAA a responder, títulos de la competencia y H2 sugeridos. Escribe el resultado en un Google Doc, Notion o un nodo de base de datos, y la ejecución termina sin humanos en el bucle.
Implementacion en Python
import os, requests
H = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}", "Content-Type": "application/json"}
def build_brief(keyword: str) -> dict:
# Live SERP with full features: 2 credits ($0.01)
serp = requests.post("https://api.scavio.dev/api/v1/google", headers=H,
json={"query": keyword, "light_request": False}).json()
paa = [q.get("question") for q in serp.get("people_also_ask", [])]
related = [r.get("query") for r in serp.get("related_searches", [])]
titles = [row["title"] for row in serp.get("organic_results", [])[:10]]
# Optional: cross-check real demand on Reddit (1 credit)
reddit = requests.post("https://api.scavio.dev/api/v1/reddit/search", headers=H,
json={"query": keyword}).json()
threads = [t.get("title") for t in reddit.get("results", [])][:5]
return {
"keyword": keyword,
"people_also_ask": paa,
"related_searches": related,
"competing_titles": titles,
"reddit_threads": threads,
}
if __name__ == "__main__":
keywords = ["best serp api", "reddit api for sentiment", "google paa scraper"]
for kw in keywords:
gap_map = build_brief(kw)
# hand gap_map to your LLM call to draft the brief
print(gap_map["keyword"], len(gap_map["people_also_ask"]), "PAA questions")Implementacion en JavaScript
// n8n Function-node style fetch
const H = {
Authorization: `Bearer ${process.env.SCAVIO_API_KEY}`,
"Content-Type": "application/json",
};
async function buildBrief(keyword) {
// Live SERP with full features: 2 credits ($0.01)
const serpRes = await fetch("https://api.scavio.dev/api/v1/google", {
method: "POST",
headers: H,
body: JSON.stringify({ query: keyword, light_request: false }),
});
const serp = await serpRes.json();
const paa = (serp.people_also_ask || []).map((q) => q.question);
const related = (serp.related_searches || []).map((r) => r.query);
const titles = (serp.organic_results || []).slice(0, 10).map((row) => row.title);
// Optional: cross-check real demand on Reddit (1 credit)
const redditRes = await fetch("https://api.scavio.dev/api/v1/reddit/search", {
method: "POST",
headers: H,
body: JSON.stringify({ query: keyword }),
});
const reddit = await redditRes.json();
const threads = (reddit.results || []).slice(0, 5).map((t) => t.title);
return { keyword, people_also_ask: paa, related_searches: related, competing_titles: titles, reddit_threads: threads };
}
const keyword = $json.keyword;
return [{ json: await buildBrief(keyword) }];Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA
Comunidad, publicaciones y comentarios en hilos de cualquier subreddit