Preise Ändern Sich Stündlich — Beobachtest Du?
Im modernen E-Commerce schwanken Preise ständig. Ein Produkt, das heute 50€ kostet, kann morgen auf 35€ fallen — und übermorgen wieder steigen. Ohne ein Monitoring-System kaufst du zu teuer und verkaufst zu billig, ohne es zu merken.
In diesem Guide zeige ich dir, wie du ein komplettes Preisüberwachungssystem von Grund auf mit Node.js, Apify und intelligenter Automatisierung baust.
Warum Preisüberwachung?
- Reseller: Zum niedrigsten Preis kaufen, zum höchsten verkaufen
- Verbraucher: Den perfekten Kaufzeitpunkt abwarten
- Unternehmen: Wettbewerberpreise überwachen
- Analysten: Markttrends mit historischen Daten verstehen
Systemarchitektur
[Scheduler (Apify/Cron)] → [Scraper] → [Datenbank]
↓ ↓
[Alle 6 Stunden] [Mit vorherigem Preis vergleichen]
↓
[Änderung > 5%?] → [Alert]
Schritt 1: Scraper Konfigurieren
Nutze den Vinted Smart Scraper für Second-Hand-Marktplätze:
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;
};
Schritt 2: Preisverlauf Speichern
const sqlite3 = require('better-sqlite3');
const db = sqlite3('prices.db');
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
)
`);
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);
});
Schritt 3: Preisänderungen Erkennen
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 ? '📈' : '📉',
};
};
Schritt 4: Alert-System
const sendAlert = async (change) => {
if (Math.abs(change.changePct) < 5) return;
const message = `${change.direction} Preis ${change.changePct > 0 ? 'gestiegen' : 'gefallen'} um ${Math.abs(change.changePct)}%\n` +
`Vorher: ${change.previousPrice}€ → Jetzt: ${change.currentPrice}€`;
await fetch(process.env.DISCORD_WEBHOOK, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ content: message }),
});
};
Schritt 5: Mit Apify Scheduler Automatisieren
- Gehe zu deinem Actor in der Apify Console
- Konfiguriere einen Schedule:
0 */6 * * *(alle 6 Stunden) - Füge einen Webhook hinzu, der Ergebnisse an deinen Server sendet
Kosten: ~$0.05/Tag für 400 überwachte Produkte.
Schritt 6: KI-Analyse
Verbinde den Vinted MCP Server mit Claude für intelligente Analyse:
"Analysiere die Preistrends von Nike-Sneakern der letzten 30 Tage. Ist jetzt ein guter Kaufzeitpunkt?"
Installiere über npm:
npm install -g vinted-mcp-server
Quellcode auf GitHub.
Praxisbeispiel: PS5 Price Tracking
Wir haben PS5-Preise auf Vinted 30 Tage lang überwacht:
- Deutschland: Durchschnittspreis 360€, Minimum 295€
- Polen: Durchschnittspreis 250€, Minimum 210€
- Durchschnittlicher Spread: 44%
- Bester Kaufzeitpunkt: Montag morgens (weniger Konkurrenz)
Visualisierungs-Dashboard
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();
Exportiere zu Google Sheets, Grafana oder jedem BI-Tool.
FAQ
Wie oft sollte ich scrapen?
Für die meisten Produkte reichen 6-12 Stunden. Für stark nachgefragte Items (Sneakers, Elektronik) alle 2-4 Stunden. Der Vinted Smart Scraper verwaltet Rate Limiting automatisch.
Kann ich bestimmte Produkte per URL überwachen?
Ja. Übergib direkte URLs statt Suchanfragen an den Scraper. Ideal für persönliche Watchlists.
Welche Datenbank empfiehlst du?
SQLite für kleine Projekte (<100K Einträge). PostgreSQL für Skalierung. Beide funktionieren gut mit der beschriebenen Pipeline.
Wie viel Speicher brauche ich?
Jeder Eintrag benötigt ~200 Bytes. 1000 Produkte × 4 Scans/Tag × 365 Tage = ~280MB. Sehr überschaubar.
Kann ich mehr als Vinted überwachen?
Ja. Kombiniere den Vinted Scraper mit dem App Store Scraper für App-Preise, oder erstelle Custom Scraper für andere Marktplätze.
Starte Jetzt
- 👉 Vinted Smart Scraper — Marktplatz-Daten
- 👉 Vinted MCP Server — KI-Analyse
- 👉 GitHub — Quellcode
Der beste Preis ist der, den du automatisch erkennst. 🚀
Top comments (0)