Resumen
Ecommerce sellers lose Buy Box placement y sales velocity cuando competidores caida prices y they do no react for dias. Este flujo de trabajo verifica competidor prices cada manana a traves de Amazon, Walmart, y Google Shopping. Alerts fire cuando prices cambio by mas than 5%. Monitoreo 100 productos a traves de 2 plataformas costs $1/dia.
Desencadenador
Diario cron at 7 AM UTC.
Programación
Diario at 7 AM UTC
Pasos del flujo de trabajo
Cargar Competidor Producto Watchlist
Leer el watchlist of competidor productos de base de datos o JSON. Cada entrada tiene el producto consulta de busqueda y plataformas to monitorear.
Verificar Actual Prices Across Plataformas
For cada producto, search Amazon, Walmart, o Google Shopping. Extraer actual price, titulo, y listing URL.
Comparar Against Baseline Prices
Cargar yesterday's prices de storage. Calcular absolute y porcentaje cambio for cada producto.
Alert on Significativo Cambios
Enviar Slack o correo electronico alertas for productos donde price changed mas than el umbral (default 5%).
Actualizar Baseline for Tomorrow
Escribir today's prices to storage as el nuevo linea base for tomorrow's comparacion.
Implementacion en Python
import requests, os, json
from pathlib import Path
API_KEY = os.environ["SCAVIO_API_KEY"]
THRESHOLD = 0.05
def check_price(query: str, platform: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY, "Content-Type": "application/json"},
json={"query": query, "platform": platform},
timeout=15,
)
data = resp.json()
top = (data.get("organic_results") or [{}])[0]
return {"title": top.get("title", ""), "price": top.get("price"), "url": top.get("link", "")}
watchlist = [
{"query": "sony wh-1000xm6", "platforms": ["amazon", "walmart"]},
{"query": "apple airpods pro 3", "platforms": ["amazon", "google-shopping"]},
]
baseline = json.loads(Path("baseline.json").read_text()) if Path("baseline.json").exists() else {}
alerts = []
for item in watchlist:
for p in item["platforms"]:
result = check_price(item["query"], p)
key = f"{item['query']}_{p}"
if result["price"] and baseline.get(key):
change = abs(result["price"] - baseline[key]) / baseline[key]
if change >= THRESHOLD:
alerts.append(f"{item['query']} ({p}): {baseline[key]} -> {result['price']} ({change*100:.1f}%)")
if result["price"]:
baseline[key] = result["price"]
Path("baseline.json").write_text(json.dumps(baseline, indent=2))
for a in alerts:
print(f"ALERT: {a}")Implementacion en JavaScript
const fs = require('fs');
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function checkPrice(query, platform) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query, platform})});
const d = await r.json();
const top = (d.organic_results||[])[0]||{};
return {title:top.title, price:top.price, url:top.link};
}
const watchlist = [{query:'sony wh-1000xm6', platforms:['amazon','walmart']}];
const baseline = fs.existsSync('baseline.json') ? JSON.parse(fs.readFileSync('baseline.json','utf8')) : {};
for (const item of watchlist) {
for (const p of item.platforms) {
const r = await checkPrice(item.query, p);
const key = item.query+'_'+p;
if (r.price && baseline[key] && Math.abs(r.price-baseline[key])/baseline[key] > 0.05) console.log('ALERT: '+item.query+' ('+p+'): '+baseline[key]+'->'+r.price);
if (r.price) baseline[key] = r.price;
}
}
fs.writeFileSync('baseline.json', JSON.stringify(baseline,null,2));Plataformas utilizadas
Amazon
Búsqueda de productos con precios, calificaciones y reseñas
Walmart
Búsqueda de productos con precios y datos de cumplimiento
Google Shopping
Resultados de compras con precios de múltiples minoristas