DEV Community

KazKN
KazKN

Posted on

E-Commerce Preisüberwachung: Baue Dein Eigenes System in 2026

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]
Enter fullscreen mode Exit fullscreen mode

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;
};
Enter fullscreen mode Exit fullscreen mode

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);
});
Enter fullscreen mode Exit fullscreen mode

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 ? '📈' : '📉',
  };
};
Enter fullscreen mode Exit fullscreen mode

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 }),
  });
};
Enter fullscreen mode Exit fullscreen mode

Schritt 5: Mit Apify Scheduler Automatisieren

  1. Gehe zu deinem Actor in der Apify Console
  2. Konfiguriere einen Schedule: 0 */6 * * * (alle 6 Stunden)
  3. 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
Enter fullscreen mode Exit fullscreen mode

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();
Enter fullscreen mode Exit fullscreen mode

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

  1. 👉 Vinted Smart Scraper — Marktplatz-Daten
  2. 👉 Vinted MCP Server — KI-Analyse
  3. 👉 GitHub — Quellcode

Der beste Preis ist der, den du automatisch erkennst. 🚀

Top comments (0)