El seguimiento diario de los precios de los productos de Google Shopping es esencial para la inteligencia competitiva, las oportunidades de arbitraje y el momento de las compras. La verificación manual de precios es tediosa y pasa por alto los cambios nocturnos. Un canal automatizado que consulta Google Shopping a través de API, almacena el historial de precios y detecta cambios significativos capta cada movimiento de precios. Este tutorial muestra cómo crear un rastreador de precios diario de Google Shopping utilizando la API de Scavio. Configurará el monitoreo de productos, almacenará instantáneas diarias, calculará tendencias de precios y generará alertas para cambios significativos de precios.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Una lista de productos para rastrear
Guia paso a paso
Paso 1: Definir productos a seguir
Configure la lista de productos y el almacenamiento del historial de precios.
import os, requests, json
from datetime import date
API_KEY = os.environ["SCAVIO_API_KEY"]
HISTORY_FILE = "shopping_price_history.json"
PRODUCTS = [
"MacBook Air M4",
"Sony WH-1000XM5",
"iPad Pro 13 inch",
"Samsung Galaxy S25",
]Paso 2: Obtener precios diarios
Consulta Google Shopping para cada producto y extrae los precios actuales.
def fetch_price(product):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": product, "type": "shopping"})
results = resp.json().get("shopping_results", [])[:10]
prices = []
for r in results:
price_str = r.get("price", "").replace("$","").replace(",","")
try:
prices.append({"title": r["title"][:60], "price": float(price_str),
"seller": r.get("source",""), "link": r.get("link","")})
except (ValueError, KeyError):
continue
return sorted(prices, key=lambda x: x["price"]) if prices else []Paso 3: Almacenar instantáneas diarias
Guarde datos de precios con fechas para una comparación histórica.
def load_history():
try:
with open(HISTORY_FILE) as f:
return json.load(f)
except FileNotFoundError:
return {}
def save_daily(product, prices):
history = load_history()
if product not in history:
history[product] = []
if prices:
history[product].append({
"date": date.today().isoformat(),
"lowest": prices[0]["price"],
"seller": prices[0]["seller"],
"avg": round(sum(p["price"] for p in prices) / len(prices), 2),
})
with open(HISTORY_FILE, "w") as f:
json.dump(history, f, indent=2)Paso 4: Detectar cambios de precios y alertar
Compare los precios de hoy con los de ayer y observe caídas significativas.
def daily_tracker(products, alert_threshold=5.0):
history = load_history()
alerts = []
for product in products:
prices = fetch_price(product)
if not prices: continue
lowest = prices[0]["price"]
prev_entries = history.get(product, [])
prev_price = prev_entries[-1]["lowest"] if prev_entries else lowest
change_pct = ((lowest - prev_price) / prev_price * 100) if prev_price else 0
save_daily(product, prices)
status = "DROP" if change_pct <= -alert_threshold else "RISE" if change_pct >= alert_threshold else "STABLE"
print(f"{status}: {product} ${lowest:.2f} ({change_pct:+.1f}%)")
if status == "DROP":
alerts.append({"product": product, "price": lowest, "change": round(change_pct,1)})
return alerts
alerts = daily_tracker(PRODUCTS)Paso 5: Generar resumen de tendencias de precios
Resuma las tendencias de precios durante el período rastreado.
def price_trends():
history = load_history()
for product, entries in history.items():
if len(entries) < 2: continue
first = entries[0]["lowest"]
last = entries[-1]["lowest"]
change = ((last - first) / first) * 100
lowest_ever = min(e["lowest"] for e in entries)
print(f"{product}:")
print(f" Current: ${last:.2f} | Low: ${lowest_ever:.2f} | Trend: {change:+.1f}%")
price_trends()Ejemplo en Python
import os, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
def price(product):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": product, "type": "shopping"})
items = resp.json().get("shopping_results", [])[:5]
for i in items:
print(f"{i.get('title','')[:40]} - {i.get('price','N/A')} ({i.get('source','')})")
price("MacBook Air M4")Ejemplo en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function price(product) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query: product, type: "shopping"})
});
const items = (await r.json()).shopping_results || [];
items.slice(0,5).forEach(i =>
console.log(i.title?.slice(0,40), i.price, i.source)
);
}
price("MacBook Air M4");Salida esperada
A daily price tracking pipeline that monitors Google Shopping products, stores price history, detects significant drops, and generates trend summaries.