Skip to main content
Piloterr
Retour au blog
2 juillet 2026

17,99 € en France, 29,99 € en Allemagne : monitorer les prix par pays

Vous monitorez les prix d'un retailer qui opère dans une dizaine de pays ? Sur Lidl, la même référence ERP peut valoir 17,99 € en France, 29,99 € en Allemagne et 119 PLN en Pologne le même jour, avec ou sans promo, parfois sans listing du tout.

Pour une équipe pricing ou data, le défi n'est pas seulement de collecter ces chiffres : c'est de comparer des offres régionales distinctes sans mélanger devises, promos asynchrones et trous d'assortiment. Piloterr expose chaque boutique Lidl telle qu'elle s'affiche au client local, via l'API Lidl, sur 27 marchés.

Cet article explique comment structurer un pipeline de monitoring des prix multirégionaux, pourquoi les écarts existent (et ne sont pas des bugs), puis comment les observer concrètement avec des appels API et un script Python.

Un produit, plusieurs offres commerciales

En théorie économique, la discrimination tarifaire consiste à facturer chaque segment selon sa disposition à payer. Sur le web, la segmentation géographique est triviale : lidl.fr et lidl.de sont deux contextes commerciaux distincts, même s'ils portent la même enseigne.

Concrètement, chaque boutique nationale calibre son prix en fonction de :

  • La concurrence locale (Castorama en France, OBI en Allemagne, etc.)
  • Le positionnement perçu de la marque sur ce marché
  • Le calendrier promo propre à la filiale
  • Le pouvoir d'achat et les repères tarifaires locaux

Le résultat : même identité produit, offre économique différente. Ce n'est pas une anomalie à corriger dans votre pipeline, c'est la donnée à capturer.

Ce qui fait bouger le prix d'un pays à l'autre

Coûts et contraintes locales

Deux régions peuvent vendre le même SKU tout en faisant face à des structures de coût différentes :

FacteurImpact
TVA et règles fiscalesAffichage TTC, taux variables
Douanes et importHors marché unique, surtout
Logistique et dernier kilomètreContrats transporteurs, main-d'œuvre
Conformité (emballage, étiquetage)Coûts de mise en conformité
Fraude et moyens de paiementRisque et frais par marché

Le prix affiché intègre ces contraintes. Comparer la France et la Pologne sans conversion de devise ni contexte local ne dit rien de la stratégie commerciale réelle.

Les promotions ne sont pas synchronisées

Les mécaniques promo (prix barré, badge « −44 % », « mega deal ») sont décidées pays par pays. Un produit soldé en France peut être au prix plein en Allemagne le même jour. Ce n'est pas une incohérence API : c'est la décentralisation des calendriers promo.

Pour l'analyse, deux conséquences :

  • Le prix courant et le prix de référence doivent être stockés séparément.
  • Le discount_percentage est une donnée dérivée : il peut être absent quand aucune promo locale n'est active.

L'assortiment n'est jamais identique à 100 %

Certaines références ERP sont pan-européennes. D'autres ne sont listées que là où la demande, la réglementation ou la logistique le permettent. Titres, slugs et fiches produit varient aussi selon la locale.

L'absence de listing est elle-même un signal : produit non distribué, rupture temporaire ou retrait catalogue. À ne pas confondre avec une erreur de requête.

La devise fait partie de l'offre légale

Les boutiques multirégionales exposent la devise native de leur juridiction. Pour certains marchés (Bulgarie, par exemple), une seconde devise peut apparaître en complément.

En analytics, stockez toujours (prix, devise, région, horodatage). Convertissez offline si vous avez besoin de comparabilité. L'API ne doit pas normaliser tout en EUR : le prix affiché est l'offre commerciale et légale telle que le client la voit.

Le bon modèle mental pour vos données

Pensez en offres régionales, pas en prix unique :

Texte brut
Identité produit globale (ERP / SKU)

   ┌────┼────┐
   ▼    ▼    ▼
 Offre  Offre  Offre
  FR     DE     PL
17,99€ 29,99€ 119 PLN
 promo   —      —

Chaque couple (erp_id, région) est une offre distincte. Votre clé d'enregistrement devrait ressembler à :

(erp_id, region, observed_at) → { price, currency, old_price, in_stock, url, locale }

C'est ce modèle qui évite les comparaisons trompeuses et les dashboards qui mélangent des pommes et des poires.

Cas concret : une perceuse PARKSIDE sur 8 pays

Prenons la référence ERP 100397447, la perceuse à percussion PARKSIDE PSBM 750 B3. Même produit, observé sur plusieurs boutiques Lidl en juin 2026 :

RégionPrixDeviseAncien prixLecture
France17,99EUR31,99Promo active (~−44 %)
Espagne19,99EURPas de barré au moment de l'observation
Slovaquie19,99EUR29,99Promo
Belgique (FR/NL)24,99EUR34,99Même prix sur les deux locales BE
Pologne119,00PLN≈ 27 € au change courant
Allemagne29,99EUR~67 % de plus qu'en France, en nominal EUR
Pays-Bas29,99EURAligné sur l'Allemagne
Tchéquie999,90CZK≈ 40 € au change courant

Non listé au moment du test : Royaume-Uni, Italie, Portugal, Hongrie, Roumanie. Même ERP, assortiment partiel.

Quatre enseignements en une seule fiche produit :

  1. L'euro ne garantit pas l'uniformité : 17,99 € vs 29,99 € dans la zone euro.
  2. Les promos sont asynchrones : FR, SK et BE soldés ; DE et NL au plein tarif.
  3. Les devises exigent une conversion pour toute comparaison sérieuse.
  4. La couverture catalogue varie : un produit « européen » n'est pas forcément partout.

Ce que renvoie l'API (France vs Allemagne)

En France, la boutique affiche une promotion :

JSON
{
  "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
}

En Allemagne, même référence, autre titre, autre prix, pas de promo :

JSON
{
  "product_id": "100397447",
  "title": "PARKSIDE® Schlagbohrmaschine »PSBM 750 B3«",
  "price": 29.99,
  "currency": "EUR",
  "locale": "de-de",
  "in_stock": true
}

L'API ne cherche pas à harmoniser. Elle remonte ce que chaque boutique affiche. L'écart que vous voyez dans les réponses est le même écart qu'un client verrait en changeant de site national.

Exemples avec l'API Piloterr

Deux endpoints couvrent le cas d'usage : produit pour une offre régionale précise, recherche pour découvrir des références dans un catalogue national. Le paramètre query accepte une référence ERP, une URL Lidl complète ou un mot-clé ; region cible la boutique quand l'URL n'est pas fournie.

Appels curl : même ERP, deux régions

Remplacez YOUR-API-KEY par votre clé depuis le tableau de bord Piloterr.

France (promo active au moment de l'observation) :

Bash
curl -G "https://api.piloterr.com/v2/lidl/product" \
  -H "x-api-key: YOUR-API-KEY" \
  --data-urlencode "query=100397447" \
  --data-urlencode "region=fr"

Allemagne (même référence, prix différent) :

Bash
curl -G "https://api.piloterr.com/v2/lidl/product" \
  -H "x-api-key: YOUR-API-KEY" \
  --data-urlencode "query=100397447" \
  --data-urlencode "region=de"

Vous pouvez aussi passer une URL nationale : la région est alors inférée du domaine et le paramètre region est ignoré.

Bash
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"

Recherche pour identifier des références ERP dans un marché donné :

Bash
curl -G "https://api.piloterr.com/v2/lidl/search" \
  -H "x-api-key: YOUR-API-KEY" \
  --data-urlencode "query=perceuse" \
  --data-urlencode "region=fr"

Python : comparer une référence sur plusieurs régions

Ce script interroge plusieurs boutiques pour une même référence ERP et affiche un snapshot comparatif. Les listings absents sont traités comme des offres nulles, pas comme des erreurs fatales.

Python
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} — observed at {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}  error  {exc}")
            continue

        if offer is None:
            print(f"{region.upper():<4}  —      not listed")
            continue

        price = offer.get("price")
        currency = offer.get("currency", "?")
        old_price = offer.get("old_price")
        promo = f" (was {old_price})" if old_price else ""
        stock = "in stock" if offer.get("in_stock") else "out of stock"

        print(f"{region.upper():<4}  {price} {currency}{promo}  {stock}")

if __name__ == "__main__":
    main()

Exemple de sortie (juin 2026) :

Texte brut
ERP 100397447 — observed at 2026-06-15T09:00:00+00:00

FR    17.99 EUR (was 31.99)  in stock
DE    29.99 EUR  in stock
PL    119.0 PLN  in stock
ES    19.99 EUR  in stock
NL    29.99 EUR  in stock
CS    999.9 CZK  in stock

Pour une comparaison cross-devise, convertissez offline avec vos taux FX du jour. L'API renvoie le prix tel qu'affiché sur la boutique locale ; c'est la bonne granularité pour du monitoring conforme et de l'archivage promo.

Doc complète : Lidl Search et scraper Lidl.

Ce que ça implique pour votre veille tarifaire

Si vous monitorez des prix multirégionaux (Lidl ou ailleurs), quelques principes simples :

À faire

  • Fixer une clé produit globale (ERP, GTIN, SKU fabricant) pour joindre les offres.
  • Interroger chaque région explicitement : region=fr, region=de, etc.
  • Conserver horodatage, devise et locale à chaque snapshot.
  • Traiter les listings absents comme des offres nulles, pas comme des erreurs.
  • Séparer prix courant, prix de référence et disponibilité.

À éviter

  • Comparer 119 PLN et 17,99 EUR sans conversion FX.
  • Prendre une seule région comme « le prix Lidl ».
  • S'attendre à des flags promo identiques d'un pays à l'autre.
  • Confondre absence de produit et panne technique.

Pour Lidl spécifiquement, Piloterr couvre 27 boutiques nationales (fr, de, pl, gb, ch, cs, be, etc.).

Les cas limites qui surprennent en production

PhénomèneInterprétation
price: null sur certains listings autrichiensProduit visible, mais pas de prix en ligne dans le payload
Double devise (ex. Bulgarie)La devise principale suit les règles d'affichage du shop
Produit absent sur lidl.co.ukTrou dans l'assortiment, pas échec API
Titres et slugs différents FR/DEMême ERP, merchandising localisé
old_price incohérent sur certaines catégoriesValider la sémantique par univers produit

Ces cas ne remettent pas en cause le principe général : chaque région est une offre autonome.

En résumé

Les écarts de prix entre pays en e-commerce sont structurels et intentionnels. Ils viennent de la segmentation de marché, des coûts locaux, des devises, des promos décentralisées et des choix d'assortiment.

Lidl en est une illustration nette : une référence ERP, huit offres régionales différentes sur le même outil. Avec Piloterr, vous accédez à chacune telle qu'elle est présentée au client local, prête à alimenter un pipeline de monitoring des prix ou une analyse de positionnement concurrentiel.

Pour aller plus loin sur la conformité des prix promo en Europe, voir notre article sur la directive Omnibus.

Prix et disponibilités mentionnés : observations de juin 2026. Ils évoluent avec les promotions et les révisions tarifaires.

À lire aussi

Guides et actualités sur le scraping web, les proxies et l'extraction de données.

Scraping web

Migrer depuis NetNut : que faire après la neutralisation du réseau

Google a pris des mesures contre le réseau de proxies NetNut/Popa, avec le FBI et Lumen. Comment repenser votre stack scraping sans gérer de proxies vous-même.

Josselin Liebe
Josselin Liebe
Lire
Scraping web

Meilleur Leboncoin Scraper 2026

Comparatif Piloterr, Apify et lobstr.io pour scraper Leboncoin en 2026. Données vérifiées sur les sites officiels au 29 juin 2026 — pricing, endpoints, téléphone, légalité du scraping connecté.

Josselin Liebe
Josselin Liebe
Lire
Scraping web

Comment scraper les données salariales d'une entreprise avec Python

Apprenez à scraper les données salariales Comparably avec Python et Piloterr. Tutoriel complet avec code, gestion Angular et extraction JSON structurée.

Josselin Liebe
Josselin Liebe
Lire

Prêt à commencer ?

Votre API de scraping web est à un clic. Commencez avec +500 crédits, sans infrastructure à gérer, sans proxies à configurer, et sans carte bancaire.

  • +500 crédits
  • Aucune carte bancaire requise
  • Tous les endpoints inclus