El seguimiento de precios en los ASIN de Amazon es esencial para los vendedores de comercio electrónico, los buscadores de ofertas y los equipos de inteligencia de mercado. El scraping directo de las páginas de productos de Amazon activa la detección de bots rápidamente y requiere un mantenimiento constante. La API de Scavio proporciona un punto final de producto estable que devuelve el precio actual, la calificación, el recuento de reseñas y la disponibilidad para cualquier ASIN. Este tutorial crea un script de sondeo que verifica una lista de ASIN, compara precios con líneas base almacenadas e imprime una alerta cuando un precio cae por debajo de un umbral configurado.
Requisitos previos
- Python 3.8 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Una lista de ASIN de Amazon para monitorear
Guia paso a paso
Paso 1: Defina su lista de seguimiento de ASIN
Cree un diccionario que asigne ASIN a umbrales de precios objetivo. El script alertará cuando el precio en vivo caiga al umbral o por debajo de él.
WATCHLIST = {
"B09G9FPHY6": {"name": "Echo Dot 5th Gen", "threshold": 35.0},
"B07FZ8S74R": {"name": "Fire TV Stick 4K", "threshold": 25.0},
}Paso 2: Obtener el precio actual de un ASIN
PUBLICAR en el punto final de Scavio con la plataforma amazon y el ASIN como consulta. La respuesta incluye un campo de precio debajo del objeto del producto.
def get_amazon_price(asin: str) -> dict:
response = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"}
)
response.raise_for_status()
return response.json()Paso 3: Comparar el precio con el umbral
Extraiga el precio actual de la respuesta y compárelo con el umbral almacenado. Maneje con elegancia los precios faltantes o ninguno.
def check_price(asin: str, meta: dict, data: dict) -> None:
product = data.get("product", {})
price_str = product.get("price", "")
if not price_str:
return
price = float(price_str.replace("$", "").replace(",", ""))
if price <= meta["threshold"]:
print(f"ALERT: {meta['name']} is ${price} (threshold ${meta['threshold']})")Paso 4: Ejecute el bucle de monitoreo
Itere sobre todos los ASIN, obtenga precios y verifique umbrales. Duerma entre encuestas para mantenerse dentro de los límites de tarifas.
import time
while True:
for asin, meta in WATCHLIST.items():
data = get_amazon_price(asin)
check_price(asin, meta, data)
print("Cycle complete. Sleeping 3600s...")
time.sleep(3600)Ejemplo en Python
import os
import time
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
WATCHLIST = {
"B09G9FPHY6": {"name": "Echo Dot 5th Gen", "threshold": 35.0},
"B07FZ8S74R": {"name": "Fire TV Stick 4K", "threshold": 25.0},
}
def get_price(asin: str) -> float | None:
r = requests.post(
ENDPOINT,
headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"}
)
r.raise_for_status()
price_str = r.json().get("product", {}).get("price", "")
if price_str:
return float(price_str.replace("$", "").replace(",", ""))
return None
def monitor():
for asin, meta in WATCHLIST.items():
price = get_price(asin)
if price and price <= meta["threshold"]:
print(f"[ALERT] {meta['name']}: ${price}")
else:
print(f"[OK] {meta['name']}: ${price}")
if __name__ == "__main__":
while True:
monitor()
time.sleep(3600)Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
const WATCHLIST = {
"B09G9FPHY6": { name: "Echo Dot 5th Gen", threshold: 35.0 },
"B07FZ8S74R": { name: "Fire TV Stick 4K", threshold: 25.0 },
};
async function getPrice(asin) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform: "amazon", query: asin, marketplace: "US" })
});
const data = await res.json();
const priceStr = data?.product?.price || "";
return priceStr ? parseFloat(priceStr.replace(/[$,]/g, "")) : null;
}
async function monitor() {
for (const [asin, meta] of Object.entries(WATCHLIST)) {
const price = await getPrice(asin);
if (price !== null && price <= meta.threshold) {
console.log(`[ALERT] ${meta.name}: $${price}`);
} else {
console.log(`[OK] ${meta.name}: $${price}`);
}
}
}
monitor().catch(console.error);Salida esperada
{
"product": {
"asin": "B09G9FPHY6",
"title": "Echo Dot (5th Gen)",
"price": "$29.99",
"original_price": "$49.99",
"rating": "4.7",
"reviews_count": 284521,
"availability": "In Stock",
"marketplace": "US"
}
}