Resumen
Este flujo de trabajo refreshes competidor precios datos cada semana by busqueda Google for cada competitor's pagina de precios y extracting actual plan detalles de search fragmentos y AI Overviews. El salida actualiza comparacion paginas, sales collateral, y internal precios sheets. Cada actualizacion incluye un 'last verified' marca de tiempo for credibility. Flags son raised cuando precios appears to tienen changed significativamente.
Desencadenador
Cron programar (cada Monday at 7:00 AM UTC)
Programación
Ejecuta cada Monday at 7:00 AM UTC
Pasos del flujo de trabajo
Cargar competidor precios objetivos
Leer el lista of competidores y their associated precios consultas de busqueda.
Search for actual precios
Consulta Scavio Google for cada competitor's pagina de precios to obtener actual plan y price informacion.
Extraer precios senales
Analizar search fragmentos y AI Overviews for precios figures, plan names, y caracteristica menciones.
Comparar contra almacenado precios
Verificar extraido precios contra previously almacenado valores y marcar significativo cambios.
Actualizar precios datos almacenar
Escribir actualizado precios datos con 'last verified' marcas de tiempo y cambio flags.
Implementacion en Python
import requests
import json
from datetime import datetime
from pathlib import Path
API_KEY = "your_scavio_api_key"
COMPETITORS = [
{"name": "SerpAPI", "query": "SerpAPI pricing plans 2026"},
{"name": "Tavily", "query": "Tavily API pricing 2026"},
{"name": "Brave Search API", "query": "Brave Search API pricing 2026"},
{"name": "Exa", "query": "Exa search API pricing 2026"},
{"name": "DataForSEO", "query": "DataForSEO pricing 2026"},
]
def fetch_pricing(competitor: dict) -> dict:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": competitor["query"], "ai_overview": True},
timeout=15,
)
res.raise_for_status()
data = res.json()
snippets = [r.get("snippet", "") for r in data.get("organic", [])[:5]]
return {
"competitor": competitor["name"],
"query": competitor["query"],
"ai_overview": data.get("ai_overview", {}).get("text", "")[:500],
"pricing_snippets": snippets,
"verified_at": datetime.utcnow().isoformat(),
}
def run():
date = datetime.utcnow().strftime("%Y-%m-%d")
results = []
for comp in COMPETITORS:
pricing = fetch_pricing(comp)
results.append(pricing)
print(f" {pricing['competitor']}: {len(pricing['pricing_snippets'])} snippets found")
output = {"date": date, "competitors_checked": len(COMPETITORS), "results": results}
Path(f"pricing_refresh_{date}.json").write_text(json.dumps(output, indent=2))
print(f"Pricing refresh {date}: {len(COMPETITORS)} competitors updated")
if __name__ == "__main__":
run()Implementacion en JavaScript
const API_KEY = "your_scavio_api_key";
const COMPETITORS = [
{ name: "SerpAPI", query: "SerpAPI pricing 2026" },
{ name: "Tavily", query: "Tavily API pricing 2026" },
{ name: "DataForSEO", query: "DataForSEO pricing 2026" },
];
async function fetchPricing(comp) {
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: "google", query: comp.query, ai_overview: true }),
});
const data = await res.json();
return {
competitor: comp.name,
snippets: (data.organic ?? []).slice(0, 5).map((r) => r.snippet ?? ""),
aiOverview: (data.ai_overview?.text ?? "").slice(0, 500),
};
}
for (const comp of COMPETITORS) {
const r = await fetchPricing(comp);
console.log(`${r.competitor}: ${r.snippets.length} pricing snippets`);
}Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA