Sie überwachen Preise für einen Einzelhändler, der in einem Dutzend Ländern tätig ist? Bei Lidl kann dieselbe ERP-Referenz am selben Tag für 17,99 € in Frankreich, 29,99 € in Deutschland und 119 PLN in Polen verkauft werden, mit oder ohne Promotion, manchmal sogar ohne Auflistung.
Für Pricing- und Datenteams besteht die Herausforderung nicht nur darin, diese Zahlen zu sammeln: Es geht darum, unterschiedliche regionale Angebote zu vergleichen, ohne Währungen, asynchrone Promotions und Sortimentslücken zu vermischen. Piloterr zeigt jeden Lidl-Shop so an, wie er dem lokalen Kunden erscheint, über die Lidl API in 27 Märkten.
Dieser Artikel erklärt, wie man eine multiregionale Preisüberwachung aufbaut, warum Preisunterschiede existieren (und keine Datenfehler sind) und wie man sie in der Praxis mit API-Aufrufen und einem Python-Skript beobachtet.
Ein Produkt, viele kommerzielle Angebote
In der Wirtschaftstheorie bedeutet Preisdiskriminierung, jeden Segment nach seiner Zahlungsbereitschaft zu bepreisen. Online ist die geografische Segmentierung trivial: lidl.fr und lidl.de sind unterschiedliche kommerzielle Kontexte, selbst wenn sie dieselbe Marke teilen.
In der Praxis kalibriert jeder nationale Shop den Preis basierend auf:
- Lokaler Konkurrenz (Castorama in Frankreich, OBI in Deutschland usw.)
- Wahrgenommener Markenpositionierung in diesem Markt
- Dem Promotionskalender der Tochtergesellschaft
- Kaufkraft und lokalen Preisankern
Das Ergebnis: dieselbe Produktidentität, unterschiedliches wirtschaftliches Angebot. Dies ist kein Anomalie, die in Ihrer Pipeline behoben werden muss. Es sind die Daten, die erfasst werden müssen.
Was den Preis von einem Land zum anderen beeinflusst
Lokale Kosten und Einschränkungen
Zwei Regionen können dasselbe SKU verkaufen, während sie unterschiedlichen Kostenstrukturen gegenüberstehen:
| Faktor | Auswirkung |
|---|---|
| MwSt. und Steuerregeln | Steuerinklusive Anzeige, variable Sätze |
| Zoll und Import | Besonders außerhalb von Binnenmarkt-Blöcken |
| Logistik und letzte Meile | Speditionsverträge, Arbeitskosten |
| Compliance (Verpackung, Kennzeichnung) | Lokale Compliance-Kosten |
| Betrug und Zahlungsmethoden | Markt-spezifisches Risiko und Gebühren |
Der angezeigte Preis enthält diese Einschränkungen. Ein Vergleich zwischen Frankreich und Polen ohne Währungsumrechnung oder lokalen Kontext sagt wenig über die tatsächliche kommerzielle Strategie aus.
Promotions sind nicht synchronisiert
Promotionsmechanismen (durchgestrichene Preise, „−44%“-Badges, „Mega-Deal“-Labels) werden von Land zu Land entschieden. Ein Produkt, das in Frankreich im Angebot ist, kann am selben Tag in Deutschland zum vollen Preis verkauft werden. Das ist keine API-Inkonsistenz: Promotionskalender sind dezentralisiert.
Für die Analyse ergeben sich zwei Konsequenzen:
- Aktueller Preis und Referenzpreis müssen separat gespeichert werden.
discount_percentageist ein abgeleitetes Feld: Es kann fehlen, wenn keine lokale Promotion läuft.
Das Sortiment ist nie zu 100% identisch
Einige ERP-Referenzen sind europaweit verfügbar. Andere werden nur dort gelistet, wo Nachfrage, Regulierung oder Logistik es zulassen. Titel, Slugs und Produktseiten variieren ebenfalls je nach Land.
Ein fehlendes Listing ist selbst ein Signal: Produkt nicht verteilt, temporärer Lagerbestand oder Katalogauslistung. Verwechseln Sie es nicht mit einem Anfragefehler.
Währung ist Teil des rechtlichen Angebots
Multiregionale Shops zeigen die native Währung ihres Zuständigkeitsbereichs an. Auf einigen Märkten (z. B. Bulgarien) kann eine sekundäre Währung neben der primären erscheinen.
In der Analyse sollten Sie immer (Preis, Währung, Region, Zeitstempel) speichern. Rechnen Sie offline um, wenn Sie Vergleichbarkeit benötigen. Die API sollte nicht alles auf EUR normalisieren: Der angezeigte Preis ist das kommerzielle und rechtliche Angebot, wie es der Kunde sieht.
Das richtige mentale Modell für Ihre Daten
Denken Sie in regionalen Angeboten, nicht in einem einzigen Preis:
Globale Produktidentität (ERP / SKU)
│
┌────┼────┐
▼ ▼ ▼
Angebot Angebot Angebot
FR DE PL
€17,99 €29,99 119 PLN
Promotion — —
Jedes (erp_id, region)-Paar ist ein eigenständiges Angebot. Ihr Datensatzschlüssel sollte so aussehen:
(erp_id, region, observed_at) → { price, currency, old_price, in_stock, url, locale }
Dieses Modell vermeidet irreführende Vergleiche und Dashboards, die Äpfel mit Birnen vermischen.
Fallstudie: Eine PARKSIDE-Bohrmaschine in 8 Ländern
Nehmen wir die ERP-Referenz 100397447, die PARKSIDE PSBM 750 B3 Schlagbohrmaschine. Dasselbe Produkt, beobachtet in mehreren Lidl-Shops im Juni 2026:
| Region | Preis | Währung | Alter Preis | Lesart |
|---|---|---|---|---|
| Frankreich | 17,99 | EUR | 31,99 | Aktive Promotion (~−44%) |
| Spanien | 19,99 | EUR | — | Kein Durchstreichpreis zum Beobachtungszeitpunkt |
| Slowakei | 19,99 | EUR | 29,99 | Promotion |
| Belgien (FR/NL) | 24,99 | EUR | 34,99 | Gleiche Preise in beiden BE-Sprachen |
| Polen | 119,00 | PLN | — | ≈ 27 € bei typischem Wechselkurs |
| Deutschland | 29,99 | EUR | — | ~67% höherer Nominalpreis in EUR als FR |
| Niederlande | 29,99 | EUR | — | Angepasst an Deutschland |
| Tschechien | 999,90 | CZK | — | ≈ 40 € bei typischem Wechselkurs |
Nicht gelistet zum Testzeitpunkt: UK, Italien, Portugal, Ungarn, Rumänien. Gleiches ERP, teilweises Sortiment.
Vier Lehren aus einer einzigen Produktseite:
- Der Euro garantiert keine Einheitlichkeit: 17,99 € vs. 29,99 € innerhalb der Eurozone.
- Promotions sind asynchron: FR, SK und BE ermäßigt; DE und NL zum vollen Preis.
- Währungen erfordern Umrechnung für jeden ernsthaften Vergleich.
- Katalogabdeckung variiert: Ein „europäisches“ Produkt ist nicht unbedingt überall erhältlich.
Was die API zurückgibt (Frankreich vs. Deutschland)
In Frankreich zeigt der Shop eine Promotion an:
{
"product_id": "100397447",
"title": "PARKSIDE® Perceuse à percussion PSBM 750 B3, 10 Nm, 750 W",
"price": 17.99,
"old_price": 31.99,
"discount_percentage": 43.0,
"currency": "EUR",
"locale": "fr-fr",
"in_stock": true
}
In Deutschland dieselbe Referenz, anderer Titel, anderer Preis, keine Promotion:
{
"product_id": "100397447",
"title": "PARKSIDE® Schlagbohrmaschine »PSBM 750 B3«",
"price": 29.99,
"currency": "EUR",
"locale": "de-de",
"in_stock": true
}
Die API versucht nicht zu harmonisieren. Sie zeigt was jeder Shop anzeigt. Die Spanne, die Sie in den Antworten sehen, ist dieselbe Spanne, die ein Kunde sehen würde, wenn er zwischen nationalen Websites wechselt.
Piloterr API-Beispiele
Zwei Endpunkte decken den Anwendungsfall ab: product für ein genaues regionales Angebot, search, um Referenzen in einem nationalen Katalog zu finden. Der Parameter query akzeptiert eine ERP-Referenz, eine vollständige Lidl-URL oder ein Keyword; region zielt auf den Shop ab, wenn keine URL angegeben wird.
curl: dieselbe ERP, zwei Regionen
Ersetzen Sie YOUR-API-KEY durch Ihren Schlüssel aus dem Piloterr-Dashboard.
Frankreich (Promotion aktiv zum Beobachtungszeitpunkt):
curl -G "https://api.piloterr.com/v2/lidl/product" \
-H "x-api-key: YOUR-API-KEY" \
--data-urlencode "query=100397447" \
--data-urlencode "region=fr"
Deutschland (dieselbe Referenz, anderer Preis):
curl -G "https://api.piloterr.com/v2/lidl/product" \
-H "x-api-key: YOUR-API-KEY" \
--data-urlencode "query=100397447" \
--data-urlencode "region=de"
Sie können auch eine nationale URL übergeben: Die Region wird aus der Domain abgeleitet und der Parameter region wird ignoriert.
curl -G "https://api.piloterr.com/v2/lidl/product" \
-H "x-api-key: YOUR-API-KEY" \
--data-urlencode "query=https://www.lidl.pl/p/parkside-wiertarka-udarowa-750-w-psbm-750-b3/p100397447"
Search, um ERP-Referenzen in einem bestimmten Markt zu finden:
curl -G "https://api.piloterr.com/v2/lidl/search" \
-H "x-api-key: YOUR-API-KEY" \
--data-urlencode "query=drill" \
--data-urlencode "region=de"
Python: Eine Referenz über Regionen hinweg vergleichen
Dieses Skript fragt mehrere Shops für dieselbe ERP-Referenz ab und gibt eine vergleichende Momentaufnahme aus. Fehlende Listings werden als Null-Angebote behandelt, nicht als fatale Fehler.
import requests
from datetime import datetime, timezone
PILOTERR_API_KEY = "YOUR-API-KEY"
ERP_ID = "100397447"
REGIONS = ["fr", "de", "pl", "es", "nl", "cs"]
def fetch_lidl_offer(erp_id: str, region: str) -> dict | None:
response = requests.get(
"https://api.piloterr.com/v2/lidl/product",
headers={"x-api-key": PILOTERR_API_KEY},
params={"query": erp_id, "region": region},
timeout=30,
)
if response.status_code == 404:
return None
response.raise_for_status()
return response.json()
def main():
observed_at = datetime.now(timezone.utc).isoformat()
print(f"ERP {ERP_ID} — beobachtet um {observed_at}\n")
for region in REGIONS:
try:
offer = fetch_lidl_offer(ERP_ID, region)
except requests.HTTPError as exc:
print(f"{region.upper():<4} Fehler {exc}")
continue
if offer is None:
print(f"{region.upper():<4} — nicht gelistet")
continue
price = offer.get("price")
currency = offer.get("currency", "?")
old_price = offer.get("old_price")
promo = f" (war {old_price})" if old_price else ""
stock = "verfügbar" if offer.get("in_stock") else "nicht vorrätig"
print(f"{region.upper():<4} {price} {currency}{promo} {stock}")
if __name__ == "__main__":
main()
Beispielausgabe (Juni 2026):
ERP 100397447 — beobachtet um 2026-06-15T09:00:00+00:00
FR 17.99 EUR (war 31.99) verfügbar
DE 29.99 EUR verfügbar
PL 119.0 PLN verfügbar
ES 19.99 EUR verfügbar
NL 29.99 EUR verfügbar
CS 999.9 CZK verfügbar
Für Währungsvergleiche rechnen Sie offline mit Ihren Tageswechselkursen um. Die API gibt den Preis so zurück, wie er im lokalen Shop angezeigt wird, was die richtige Granularität für eine konforme Überwachung und Archivierung von Promotions ist.
Vollständige Dokumentation: Lidl Search und Lidl Scraper.
Was dies für die Preisüberwachung bedeutet
Wenn Sie multiregionale Preise überwachen (bei Lidl oder anderswo), gelten einige einfache Prinzipien:
Tun Sie dies
- Legen Sie einen globalen Produkt-Schlüssel (ERP, GTIN, Hersteller-SKU) fest, um Angebote zu verknüpfen.
- Fragen Sie jede Region explizit ab:
region=fr,region=deusw. - Behalten Sie Zeitstempel, Währung und Locale bei jeder Momentaufnahme.
- Behandeln Sie fehlende Listings als Null-Angebote, nicht als Fehler.
- Trennen Sie aktuellen Preis, Referenzpreis und Verfügbarkeit.
Vermeiden Sie
- Den Vergleich von 119 PLN und 17,99 € ohne Währungsumrechnung.
- Die Verwendung einer einzigen Region als „den Lidl-Preis“.
- Die Erwartung identischer Promotionskennzeichen in verschiedenen Ländern.
- Die Verwechslung von Produktabwesenheit mit einem technischen Fehler.
Für Lidl deckt Piloterr speziell 27 nationale Shops ab (fr, de, pl, gb, ch, cs, be usw.).
Randfälle, die Teams in der Produktion überraschen
| Phänomen | Interpretation |
|---|---|
price: null bei einigen österreichischen Listings | Produkt sichtbar, aber kein Online-Preis im Payload |
| Doppelte Währung (z. B. Bulgarien) | Primäre Währung folgt den Anzeigeregeln des Shops |
Produkt fehlt auf lidl.co.uk | Sortimentslücke, kein API-Fehler |
| Unterschiedliche Titel und Slugs FR/DE | Gleiches ERP, lokalisiertes Merchandising |
Inkonsistente old_price in einigen Kategorien | Validieren Sie die Semantik pro Produktkategorie |
Diese Fälle widerlegen nicht das allgemeine Prinzip: Jede Region ist ein autonomes Angebot.
Zusammenfassung
Länderübergreifende Preisunterschiede im E-Commerce sind strukturell und beabsichtigt. Sie resultieren aus Marktsegmentierung, lokalen Kosten, Währungen, dezentralen Promotions und Sortimentsentscheidungen.
Lidl ist ein klares Beispiel: Eine ERP-Referenz, acht verschiedene regionale Angebote für dasselbe Werkzeug. Mit Piloterr greifen Sie auf jedes Angebot zu, wie es dem lokalen Kunden präsentiert wird, bereit für die Einspeisung in eine Preisüberwachungspipeline oder eine Analyse der Wettbewerbspositionierung.
Weitere Informationen zur Einhaltung von Preisvorschriften in Europa finden Sie in unserem Artikel zur Omnibus-Richtlinie.
Die genannten Preise und Verfügbarkeiten spiegeln Beobachtungen aus Juni 2026 wider. Sie ändern sich mit Promotions und Preisanpassungen.