Resumen
Businesses con multiples ubicaciones necesita to rastrear Google resena ratings y nuevo resena volume diario, pero manualmente checking cada ubicacion es tedious y error-prone. Este flujo de trabajo searches Google for cada of your business ubicaciones at 8 AM diario, extrae actual ratings y resena counts de el resultados de busqueda, compara contra el anterior day's datos to detectar cambios, y envia alertas cuando ratings caida o nuevo negative resenas appear. Early deteccion means faster respuesta to reputation problemas.
Desencadenador
Cron programar (diario at 8 AM UTC)
Programación
Diario at 8 AM UTC
Pasos del flujo de trabajo
Search business ubicaciones
Consulta Google for cada business nombre y ubicacion. Extraer el panel de conocimiento datos including star rating y resena conteo.
Extraer ratings y counts
Analizar el resultados de busqueda for actual star rating, total resena conteo, y cualquier featured resena fragmentos.
Comparar contra history
Cargar el anterior day's ratings de storage. Calcular el delta for star rating y resena conteo per ubicacion.
Generar cambio informe
Crear un resumen showing cual ubicaciones tenia rating cambios, nuevo resena volume, y cualquier featured negative fragmentos.
Alert on significativo cambios
Enviar notificaciones cuando un ubicacion drops below 4.0 stars, loses mas than 0.2 stars in un dia, o obtiene flagged resenas.
Implementacion en Python
import requests, os, json
from datetime import datetime
H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}
LOCATIONS = [
{"name": "Acme Corp", "location": "San Francisco"},
{"name": "Acme Corp", "location": "New York"},
{"name": "Acme Corp", "location": "Austin"},
]
# Previous day's data (load from your storage in production)
PREVIOUS_DATA = {
"San Francisco": {"rating": 4.5, "reviews": 230},
"New York": {"rating": 4.2, "reviews": 185},
"Austin": {"rating": 4.7, "reviews": 95},
}
def check_location(business):
"""Search for a business location and extract review data."""
query = f"{business['name']} {business['location']} reviews"
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google", "query": query}, timeout=10).json()
# Extract from knowledge graph or organic results
kg = r.get("knowledge_graph", {})
organic = r.get("organic", [])[:3]
snippets = [o.get("snippet", "") for o in organic]
return {
"location": business["location"],
"business": business["name"],
"search_snippets": snippets,
"knowledge_graph": bool(kg),
"checked_at": datetime.utcnow().isoformat()
}
alerts = []
for loc in LOCATIONS:
result = check_location(loc)
prev = PREVIOUS_DATA.get(loc["location"], {})
print(f"[CHECK] {loc['name']} {loc['location']}")
print(f" Snippets: {result['search_snippets'][0][:100] if result['search_snippets'] else 'N/A'}")
if prev:
print(f" Previous: {prev.get('rating', 'N/A')} stars, {prev.get('reviews', 'N/A')} reviews")
print(f"\nLocations checked: {len(LOCATIONS)}")
print(f"Alerts generated: {len(alerts)}")Implementacion en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
const LOCATIONS = [
{name: "Acme Corp", location: "San Francisco"},
{name: "Acme Corp", location: "New York"},
{name: "Acme Corp", location: "Austin"},
];
const PREVIOUS_DATA = {
"San Francisco": {rating: 4.5, reviews: 230},
"New York": {rating: 4.2, reviews: 185},
"Austin": {rating: 4.7, reviews: 95},
};
async function checkLocation(business) {
const query = `${business.name} ${business.location} reviews`;
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query})
}).then(r => r.json());
const organic = (r.organic || []).slice(0, 3);
return {
location: business.location,
business: business.name,
searchSnippets: organic.map(o => o.snippet || ""),
knowledgeGraph: !!r.knowledge_graph,
checkedAt: new Date().toISOString()
};
}
(async () => {
const alerts = [];
for (const loc of LOCATIONS) {
const result = await checkLocation(loc);
const prev = PREVIOUS_DATA[loc.location] || {};
console.log(`[CHECK] ${loc.name} ${loc.location}`);
console.log(` Snippets: ${result.searchSnippets[0]?.slice(0, 100) || "N/A"}`);
if (prev.rating) console.log(` Previous: ${prev.rating} stars, ${prev.reviews} reviews`);
}
console.log(`\nLocations checked: ${LOCATIONS.length}`);
console.log(`Alerts generated: ${alerts.length}`);
})();Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA