Los Precios Cambian Cada Hora — ¿Estás Mirando?
En el e-commerce moderno, los precios fluctúan constantemente. Un producto que hoy cuesta 50€ puede bajar a 35€ mañana — y volver a subir. Si no tienes un sistema de monitoreo, estás comprando caro y vendiendo barato sin saberlo.
En esta guía completa, te muestro cómo construir un sistema de monitoreo de precios desde cero usando Node.js, Apify, y automatización inteligente.
¿Por Qué Necesitas Monitoreo de Precios?
- Resellers: Comprar al precio más bajo, vender al más alto
- Consumers: Esperar el momento perfecto para comprar
- Businesses: Vigilar los precios de la competencia
- Analysts: Entender tendencias de mercado con datos históricos
Arquitectura del Sistema
[Scheduler (Apify/Cron)] → [Scraper] → [Base de Datos]
↓ ↓
[Cada 6 horas] [Comparar con precio anterior]
↓
[¿Cambió > 5%?] → [Alerta]
Paso 1: Configura el Scraper
Usa el Vinted Smart Scraper para marketplace de segunda mano:
const Apify = require('apify');
const runScraper = async (query) => {
const client = Apify.newClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('kazkn/vinted-smart-scraper').call({
search: query,
maxItems: 100,
sort: 'newest_first',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
return items;
};
Paso 2: Almacena Historial de Precios
const sqlite3 = require('better-sqlite3');
const db = sqlite3('prices.db');
// Crear tabla
db.exec(`
CREATE TABLE IF NOT EXISTS price_history (
id INTEGER PRIMARY KEY,
product_id TEXT,
title TEXT,
price REAL,
currency TEXT,
country TEXT,
scraped_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
`);
// Insertar nuevos precios
const insertPrice = db.prepare(`
INSERT INTO price_history (product_id, title, price, currency, country)
VALUES (?, ?, ?, ?, ?)
`);
items.forEach(item => {
insertPrice.run(item.id, item.title, item.price, item.currency, item.country);
});
Paso 3: Detecta Cambios de Precio
const detectChanges = (productId) => {
const history = db.prepare(`
SELECT price, scraped_at
FROM price_history
WHERE product_id = ?
ORDER BY scraped_at DESC
LIMIT 2
`).all(productId);
if (history.length < 2) return null;
const [current, previous] = history;
const change = ((current.price - previous.price) / previous.price) * 100;
return {
productId,
currentPrice: current.price,
previousPrice: previous.price,
changePct: change.toFixed(1),
direction: change > 0 ? '📈' : '📉',
};
};
Paso 4: Sistema de Alertas
const sendAlert = async (change) => {
if (Math.abs(change.changePct) < 5) return; // Ignorar cambios pequeños
const message = `${change.direction} Precio ${change.changePct > 0 ? 'subió' : 'bajó'} ${Math.abs(change.changePct)}%\n` +
`Antes: ${change.previousPrice}€ → Ahora: ${change.currentPrice}€`;
// Discord webhook
await fetch(process.env.DISCORD_WEBHOOK, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ content: message }),
});
};
Paso 5: Automatiza Con Apify Scheduler
En Apify, puedes programar tu scraper para ejecutarse automáticamente:
- Ve a tu Actor en Apify Console
- Configura un Schedule:
0 */6 * * *(cada 6 horas) - Añade un Webhook que envíe los resultados a tu servidor
Costo: ~$0.05/día para 400 productos monitoreados.
Paso 6: Análisis Con IA
Conecta el Vinted MCP Server a Claude para análisis inteligente:
"Analiza las tendencias de precio de zapatillas Nike en los últimos 30 días. ¿Es buen momento para comprar?"
Instala desde npm:
npm install -g vinted-mcp-server
Código fuente en GitHub.
Caso Real: PS5 Price Tracking
Monitoreamos precios de PS5 en Vinted durante 30 días:
- Francia: Precio promedio 385€, mínimo 310€
- Polonia: Precio promedio 250€, mínimo 210€
- Spread promedio: 46%
- Mejor momento para comprar: Lunes por la mañana (menos competencia)
Dashboard de Visualización
// Consulta para gráfico de tendencias
const trends = db.prepare(`
SELECT
DATE(scraped_at) as date,
AVG(price) as avg_price,
MIN(price) as min_price,
MAX(price) as max_price,
COUNT(*) as listings
FROM price_history
WHERE title LIKE '%Nike Air Max%'
GROUP BY DATE(scraped_at)
ORDER BY date
`).all();
Exporta a Google Sheets, Grafana, o cualquier herramienta de BI.
FAQ
¿Con qué frecuencia debo scrapear?
Para la mayoría de productos, cada 6-12 horas es suficiente. Para items muy demandados (sneakers, electrónica), cada 2-4 horas. El Vinted Smart Scraper maneja rate limiting automáticamente.
¿Puedo monitorear productos específicos por URL?
Sí. Pasa URLs directas al scraper en lugar de búsquedas. Esto es útil para watchlists personalizadas.
¿Qué base de datos recomiendas?
SQLite para proyectos pequeños (<100K registros). PostgreSQL para escala. Ambos funcionan bien con el pipeline descrito.
¿Cuánto almacenamiento necesito?
Cada registro usa ~200 bytes. 1000 productos × 4 scrapeos/día × 365 días = ~280MB. Muy manejable.
¿Puedo monitorear más allá de Vinted?
Sí. Combina el Vinted scraper con el App Store Scraper para monitorear precios de apps, o crea scrapers custom para otros marketplaces.
Empieza Hoy
No esperes a que los precios suban para lamentarte. Construye tu sistema de monitoreo ahora:
- 👉 Vinted Smart Scraper — Datos de marketplace
- 👉 Vinted MCP Server — Análisis con IA
- 👉 GitHub — Código fuente y contribuciones
El mejor precio es el que detectas automáticamente. 🚀
Top comments (0)