Saber cuándo un producto se agota en Amazon pero permanece disponible en Walmart (o viceversa) es fundamental para los vendedores, revendedores y equipos de adquisiciones de arbitraje. Este tutorial crea un rastreador de productos multiplataforma que verifica la disponibilidad y el precio tanto en Amazon como en Walmart a través de la API de Scavio, registra los cambios a lo largo del tiempo y alerta cuando cambia el estado del stock o surgen diferencias de precio significativas entre plataformas. Dos llamadas API por producto y por cheque, $0,01 en total por producto.
Requisitos previos
- Python 3.8+ o Node.js 18+
- Una clave API de Scavio de scavio.dev
- solicita biblioteca instalada (Python)
- Nombres de productos o identificadores para rastrear
Guia paso a paso
Paso 1: Definir productos a seguir
Crea una lista de productos con términos de búsqueda. Se utilizará la misma consulta para las búsquedas de Amazon y Walmart.
import os, json, requests
from datetime import datetime
API_KEY = os.environ['SCAVIO_API_KEY']
ENDPOINT = 'https://api.scavio.dev/api/v1/search'
HEADERS = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
PRODUCTS = [
'PlayStation 5 Digital Edition',
'Nintendo Switch OLED',
'Dyson V15 Detect',
]Paso 2: Obtener datos de productos de ambas plataformas
Consulta a Amazon y Walmart para cada producto. Extraiga el precio, la disponibilidad, el título y la calificación del resultado que mejor se adapte a la consulta.
def fetch_product(query, platform):
body = {'platform': platform, 'query': query}
if platform == 'amazon':
body['marketplace'] = 'US'
resp = requests.post(ENDPOINT, headers=HEADERS, json=body).json()
products = resp.get('products', [])
if not products:
return None
p = products[0]
raw_price = str(p.get('price', '')).replace('$', '').replace(',', '')
try:
price = float(raw_price)
except (ValueError, TypeError):
price = None
return {
'title': p.get('title', ''),
'price': price,
'availability': p.get('availability', 'Unknown'),
'rating': p.get('rating', ''),
'platform': platform,
}Paso 3: Compara plataformas y detecta cambios
Cargue el estado anterior desde un archivo JSON, compárelo con los datos actuales y marque cambios de precios, cambios de acciones y diferencias de precios entre plataformas.
def track_products():
state_file = 'product_state.json'
try:
with open(state_file) as f:
prev_state = json.load(f)
except FileNotFoundError:
prev_state = {}
current_state = {}
for product in PRODUCTS:
amazon = fetch_product(product, 'amazon')
walmart = fetch_product(product, 'walmart')
current_state[product] = {'amazon': amazon, 'walmart': walmart,
'checked_at': datetime.now().isoformat()}
prev = prev_state.get(product, {})
for platform, data in [('amazon', amazon), ('walmart', walmart)]:
if not data:
print(f'[MISSING] {product} not found on {platform}')
continue
prev_data = prev.get(platform)
if prev_data and prev_data.get('price') and data['price']:
diff = data['price'] - prev_data['price']
if abs(diff) > 1.0:
direction = 'UP' if diff > 0 else 'DOWN'
print(f'[PRICE {direction}] {product} on {platform}: '
f'${prev_data["price"]} -> ${data["price"]}')
print(f'[{platform.upper()}] {product}: ${data["price"]} - {data["availability"]}')
if amazon and walmart and amazon['price'] and walmart['price']:
gap = abs(amazon['price'] - walmart['price'])
if gap > 10:
cheaper = 'amazon' if amazon['price'] < walmart['price'] else 'walmart'
print(f' GAP: ${gap:.2f} difference, {cheaper} is cheaper')
with open(state_file, 'w') as f:
json.dump(current_state, f, indent=2)
return current_state
track_products()Ejemplo en Python
import os, json, requests
from datetime import datetime
API_KEY = os.environ['SCAVIO_API_KEY']
ENDPOINT = 'https://api.scavio.dev/api/v1/search'
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
PRODUCTS = ['PlayStation 5 Digital Edition', 'Nintendo Switch OLED']
def fetch(query, platform):
body = {'platform': platform, 'query': query}
if platform == 'amazon': body['marketplace'] = 'US'
items = requests.post(ENDPOINT, headers=H, json=body).json().get('products', [])
if not items: return None
raw = str(items[0].get('price', '')).replace('$', '').replace(',', '')
try: price = float(raw)
except ValueError: price = None
return {'title': items[0].get('title', ''), 'price': price,
'availability': items[0].get('availability', 'Unknown')}
def track():
for p in PRODUCTS:
amz = fetch(p, 'amazon')
wmt = fetch(p, 'walmart')
for name, data in [('Amazon', amz), ('Walmart', wmt)]:
if data:
print(f'{name}: {p} -> ${data["price"]} ({data["availability"]})')
else:
print(f'{name}: {p} -> not found')
if amz and wmt and amz['price'] and wmt['price']:
gap = abs(amz['price'] - wmt['price'])
if gap > 5:
print(f' Price gap: ${gap:.2f}')
track()Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
const PRODUCTS = ['PlayStation 5 Digital Edition', 'Nintendo Switch OLED'];
async function fetchProduct(query, platform) {
const body = { platform, query };
if (platform === 'amazon') body.marketplace = 'US';
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify(body)
}).then(r => r.json());
const items = data.products || [];
if (!items[0]) return null;
const price = parseFloat(String(items[0].price || '').replace(/[$,]/g, ''));
return { title: items[0].title, price: isNaN(price) ? null : price,
availability: items[0].availability || 'Unknown' };
}
async function track() {
for (const p of PRODUCTS) {
const amz = await fetchProduct(p, 'amazon');
const wmt = await fetchProduct(p, 'walmart');
console.log(`Amazon: ${p} -> $${amz?.price} (${amz?.availability})`);
console.log(`Walmart: ${p} -> $${wmt?.price} (${wmt?.availability})`);
if (amz?.price && wmt?.price) {
const gap = Math.abs(amz.price - wmt.price);
if (gap > 5) console.log(` Price gap: $${gap.toFixed(2)}`);
}
}
}
track().catch(console.error);Salida esperada
[AMAZON] PlayStation 5 Digital Edition: $449.99 - In Stock
[WALMART] PlayStation 5 Digital Edition: $449.99 - In Stock
[AMAZON] Nintendo Switch OLED: $349.99 - In Stock
[WALMART] Nintendo Switch OLED: $339.99 - In Stock
GAP: $10.00 difference, walmart is cheaper
[PRICE DOWN] Dyson V15 Detect on amazon: $649.99 -> $599.99