Amazon Best Sellers Rank (BSR) es una métrica fundamental para vendedores e investigadores de mercado. El BSR de un producto indica su velocidad de ventas en relación con otros productos de la misma categoría. El seguimiento de los cambios de BSR a lo largo del tiempo revela tendencias estacionales, el impacto de las promociones y la dinámica competitiva. Este tutorial crea un canal de seguimiento de BSR que consulta datos de productos de Amazon a través de la API de Scavio, almacena instantáneas de BSR diarias y detecta cambios significativos en la clasificación.
Requisitos previos
- Python 3.8 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Una lista de ASIN para rastrear
Guia paso a paso
Paso 1: Definir ASIN para rastrear
Cree una lista de ASIN de Amazon con sus nombres para identificarlos fácilmente en los informes.
PRODUCTS = {
"B09G9FPHY6": "Echo Dot 5th Gen",
"B07FZ8S74R": "Fire TV Stick 4K",
"B09XS7JWHH": "Sony WH-1000XM5",
}Paso 2: Obtener datos del producto, incluido BSR
Consulte el punto final de Scavio Amazon para cada ASIN y extraiga la clasificación de best seller de la respuesta del producto.
def get_product_data(asin: str) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"}
)
r.raise_for_status()
product = r.json().get("product", {})
return {
"asin": asin,
"title": product.get("title", ""),
"bsr": product.get("bestseller_rank"),
"price": product.get("price"),
"rating": product.get("rating"),
}Paso 3: Almacenar instantáneas diarias
Adjunte los datos BSR de cada día a un archivo CSV para realizar un análisis histórico. Incluya una marca de tiempo para cada lectura.
import csv
from datetime import date
def save_bsr(data: dict) -> None:
with open("bsr_history.csv", "a", newline="") as f:
writer = csv.writer(f)
writer.writerow([
date.today().isoformat(),
data["asin"],
data["title"],
data["bsr"],
data["price"],
])Paso 4: Detectar cambios significativos
Compare el BSR actual con la lectura anterior y marque los productos con grandes movimientos de clasificación.
def detect_changes(current: dict, previous: dict, threshold: float = 0.2) -> str | None:
if not current.get("bsr") or not previous.get("bsr"):
return None
curr_bsr = int(current["bsr"])
prev_bsr = int(previous["bsr"])
change_pct = (prev_bsr - curr_bsr) / prev_bsr
if abs(change_pct) >= threshold:
direction = "improved" if change_pct > 0 else "dropped"
return f"{current['title']}: BSR {direction} from #{prev_bsr} to #{curr_bsr} ({change_pct*100:+.0f}%)"
return NoneEjemplo en Python
import os
import csv
import requests
from datetime import date
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
PRODUCTS = {"B09G9FPHY6": "Echo Dot 5th Gen", "B07FZ8S74R": "Fire TV Stick 4K"}
def get_bsr(asin: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"})
r.raise_for_status()
p = r.json().get("product", {})
return {"asin": asin, "bsr": p.get("bestseller_rank"), "price": p.get("price")}
if __name__ == "__main__":
today = date.today().isoformat()
with open("bsr_history.csv", "a", newline="") as f:
w = csv.writer(f)
for asin, name in PRODUCTS.items():
data = get_bsr(asin)
w.writerow([today, asin, name, data["bsr"], data["price"]])
print(f"{name}: BSR #{data['bsr']} | {data['price']}")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 fs = require("fs");
const PRODUCTS = { B09G9FPHY6: "Echo Dot 5th Gen", B07FZ8S74R: "Fire TV Stick 4K" };
async function getBSR(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();
return { bsr: data.product?.bestseller_rank, price: data.product?.price };
}
async function main() {
const today = new Date().toISOString().slice(0, 10);
for (const [asin, name] of Object.entries(PRODUCTS)) {
const data = await getBSR(asin);
const line = `${today},${asin},${name},${data.bsr},${data.price}\n`;
fs.appendFileSync("bsr_history.csv", line);
console.log(`${name}: BSR #${data.bsr} | ${data.price}`);
}
}
main().catch(console.error);Salida esperada
Echo Dot 5th Gen: BSR #3 | $29.99
Fire TV Stick 4K: BSR #7 | $24.99
bsr_history.csv:
2026-04-19,B09G9FPHY6,Echo Dot 5th Gen,3,$29.99
2026-04-19,B07FZ8S74R,Fire TV Stick 4K,7,$24.99
2026-04-18,B09G9FPHY6,Echo Dot 5th Gen,5,$29.99
2026-04-18,B07FZ8S74R,Fire TV Stick 4K,6,$24.99