API

API Lidl pour lidl.fr : prix des produits et offres de la semaine en JSON

Sur lidl.fr, un même montant peut désigner quatre choses : le prix en rayon, le prix « avec Lidl Plus », le prix du deuxième article d'une remise « -60% sur le 2e », ou le prix moyen d'un lot « 2 + 1 OFFERT ». Cette API lit le site comme un client sans compte et ne confond pas ces cas : le prix Lidl Plus a son propre champ, la remise sur le deuxième article et le lot sont signalés par un indicateur. Elle couvre la boutique en ligne (de l'aspirateur eau et poussière PARKSIDE au robot laveur), les offres en supermarché avec leur date d'arrivée et la fiche produit complète, en euros. Ce n'est ni l'application Lidl Plus, ni un accès à vos tickets de caisse, ni un portail fournisseur : seulement ce que lidl.fr affiche, vu du côté de l'acheteur. Attention au pays : faute de `country`, le moteur interroge lidl.de, si bien que chaque requête doit porter `"country": "fr"`.

Endpoints

endpointCe qui est renvoyéObligatoires
searchRecherche dans la boutique en ligne par mot-clé ou par EAN : identifiant, titre, marque, image, prix, prix barré avec sa nature (ancien prix Lidl ou prix conseillé du fabricant), remise, prix au kilo ou au litre, prix Lidl Plus à part, note et nombre d'avis, disponibilité en ligne et dates en magasin. Filtres : marque, fourchette de prix, note minimale, disponibilité ; tris : prix, note, nouveautés, meilleures ventes, remise.query
category/productsUn rayon de lidl.fr, à partir de l'identifiant qui termine l'adresse de la catégorie (il commence par `h` ou `s`) ou de l'URL entière. Mêmes lignes, filtres, tris et pagination que `search`.category
dealsLes offres en supermarché de la semaine et des semaines suivantes, celles du prospectus : prix, prix barré, prix Lidl Plus, libellé de la promotion (« OFFRE FLASH », « -50% sur le 2e », « 2 + 1 OFFERT ») et période de validité. `query` restreint la liste à un mot-clé.tous optionnels
product/detailTout le contenu de la fiche, à partir de l'identifiant ou de l'URL : photos, EAN/GTIN (les codes internes de magasin sont rangés à part), prix et type de prix barré, prix au kilo, prix Lidl Plus, note et recommandations, délai et frais de livraison, quantité maximale par commande, description, caractéristiques, tailles et coloris avec leur propre prix et EAN, notices en PDF, et les autres pays Lidl qui vendent le produit.product_id

Chaque appel est facturé en crédits. Les appels en échec ou bloqués sont gratuits.

Exemple qui fonctionne

Quatre lignes de la première page du 28 octobre 2026, la veille de l'arrivage du jeudi 29 en supermarché. Les bonbons acidulés sont à 0,65 € : c'est le prix du deuxième sachet (1,62 € moins 60 %), et `second_item_price` le signale ; acheté seul, un sachet coûte 1,62 €. Les pâtes fraîches farcies n'ont aucun prix public, seulement 0,79 € « avec Lidl Plus » accompagné de la mention « -68% sur le 2e » : `price` vaut null, comme pour 26 des 172 offres de la semaine. Pour la maison de poupée LUPILU, les 49,99 € barrés sont l'ancien prix chez Lidl (`previous_price`). Une moyenne calculée sur `price` seul mélangerait des prix à l'unité, des prix de deuxième article et des lignes sans prix.

Requête
curl -X POST https://api.reefapi.com/lidl/v1/deals \
  -H "x-api-key: VOTRE_CLE" \
  -H "content-type: application/json" \
  -d '{"country": "fr", "limit": 60}'
Réponse (abrégée)
{
  "ok": true,
  "data": {
    "results": [
      ...
      {
        "product_id": "12282822",
        "title": "Bonbons gélifiés acidulés",
        "currency": "EUR",
        "price": 0.65,
        "price_before_discount": 1.62,
        "price_before_discount_type": "previous_price",
        "discount_label": "-60% sur le 2e",
        "second_item_price": true,
        "packaging": "1 kg = 11,35",
        "availability": "in_store_only",
        "availability_text": "Le 29.10 | En supermarché",
        "category": "Food"
      },
      {
        "product_id": "11081837",
        "title": "Pâtes fraîches farcies",
        "price": null,
        "member_price": 0.79,
        "member_program": "Lidl Plus",
        "member_price_label": "avec Lidl Plus",
        "member_discount_label": "-68% sur le 2e",
        "availability": "in_store_only",
        "store_offers": [
          {
            "label": "29.10. - 04.11. | En supermarché",
            "type": "IN_STORE_FROM_FUTURE_DATE_RANGE",
            "valid_from": "2026-10-28T23:00:00Z",
            "valid_until": "2026-11-04T22:59:59Z"
          }
        ]
      },
      {
        "product_id": "100411872",
        "title": "LUPILU® Maison de poupée",
        "brand": "LUPILU®",
        "price": 34.99,
        "price_before_discount": 49.99,
        "price_before_discount_type": "previous_price",
        "discount_percent": 30,
        "rating": 4.7,
        "review_count": 593,
        "available_online": true,
        "availability_text": "Le 29.10 | En supermarché"
      },
      ...
      {
        "product_id": "11436634",
        "title": "DELUXE 12 mini canelés",
        "brand": "DELUXE",
        "price": 1.99,
        "discount_label": "OFFRE FLASH",
        "packaging": "1 kg = 11,06",
        "availability": "in_store_only"
      },
      ...
    ],
    "count": 60,
    "total_results": 172,
    "country": "fr",
    "language": "fr",
    "currency": "EUR",
    "web_shop": true
  },
  "meta": { "record_count": 60, "pagination": { "page": 1, "has_more": true, "page_size": 60, "total": 172 }, "cache_hit": false, "mode": "live" }
}

Scraper lidl.fr : deux prix trompeurs et une marque fantôme

La mention « sur le 2e » change le sens du chiffre. Pendant la construction du moteur, le 15 septembre 2026, une bouteille annoncée « -80% SUR LE 2E » sur lidl.fr affichait 0,39 € pour un prix barré de 1,97 € : 0,39 €, c'est la deuxième bouteille. Ce cas concernait alors 7 des 77 offres françaises, et 10 des 172 le 28 octobre côté prix public, toutes marquées `second_item_price: true`. Un relevé qui garde le premier montant venu sous-estime ces produits de moitié au moins.

Les lots suivent une autre logique. Sur un vin vendu « 2+1 OFFERTE », lidl.fr publiait un prix unitaire de 4,33 €, soit 6,49 € multiplié par 2/3 : c'est le prix d'une bouteille pour qui en prend trois. Le moteur garde ce montant tel qu'il est publié, laisse le libellé dans `discount_label` et passe `multi_buy` à true ; le 28 octobre, cinq offres « 2 + 1 OFFERT » et une « 5 + 1 OFFERT » étaient dans ce cas.

Troisième détail, propre aux produits vendus seulement en magasin : certaines lignes de lidl.fr arrivent avec la marque « - » et un titre qui commence par un tiret, comme « - Côtes de Provence AOP ». Le moteur renvoie alors `brand` à null et retire le tiret du titre. Un parseur maison, lui, invente une marque « - » et la retrouve ensuite dans chaque statistique par marque.

Sur le prospectus papier, ces trois cas se repèrent d'un coup d'œil. Dans un relevé automatique, où 172 offres passent chaque semaine, personne ne relit les libellés un par un : c'est au champ de porter l'information.

Limites et remarques honnêtes

  • Lidl n'édite pas cette API et ne l'a pas autorisée : c'est un service indépendant qui lit les pages publiques de lidl.fr, sans contrat ni partenariat avec l'enseigne.
  • Problème connu, reproduit sur lidl.fr le 28 octobre 2026 : ne dépassez pas `limit: 60`. Avec `limit: 100`, `deals` a renvoyé 60 lignes en page 1, puis une page 2 qui commençait à la 101e offre avec `has_more` à false : 52 des 172 offres ne sont jamais apparues. Avec `limit: 60`, les trois pages (60 + 60 + 52) couvraient bien les 172. Sans `limit`, une page compte 36 lignes.
  • Sur une ligne du même relevé (« HALLOWEEN », 3,99 €, « -10% avec Lidl Plus »), `member_price` valait 5,39 : c'est le prix au kilo (« 1kg = 5,39 € »), et `product/detail` donnait la même valeur. Un prix Lidl Plus supérieur au prix public trahit ce cas ; comparez les deux avant d'utiliser `member_price`.
  • L'indicateur `second_item_price` ne porte que sur le prix public. Le même jour, cinq offres réservées à Lidl Plus affichaient « sur le 2e » dans `member_discount_label` (« -68% sur le 2e » pour les pâtes fraîches farcies à 0,79 €) avec `second_item_price` à false : sur ces lignes, rien ne dit si `member_price` est le prix du premier ou du deuxième article. Fiez-vous au libellé.
  • Un prix barré n'est pas forcément une baisse chez Lidl. Dans la recherche « aspirateur », 5 des 6 prix barrés étaient des prix conseillés du fabricant (134,99 € barrés pour un aspirateur Philips vendu 119 €) ; dans les offres de la semaine, 50 des 51 étaient d'anciens prix Lidl. `price_before_discount_type` fait la différence.
  • Lidl ne publie pas de stock chiffré, seulement un état : en ligne, bientôt en ligne, indisponible en ligne, ou uniquement en supermarché. Pour les 115 offres sur 172 vendues seulement en magasin, rien n'indique s'il en reste dans le vôtre.
  • Pas de texte d'avis : la boutique en ligne donne la note moyenne et le nombre d'avis (4,7 pour 593 avis sur la maison de poupée), et les produits vendus seulement en magasin n'ont pas de note du tout.
  • `regional_prices` reprend les prix par région que lidl.fr attache aux produits de supermarché. Seule la région « 1 » est apparue (88 lignes sur 172) ; nous la publions sans l'interpréter.
  • Pas d'historique des prix : `deals` montre ce que lidl.fr annonce au moment de l'appel, une offre « Le 29.10 » dès la veille, puis plus rien une fois l'offre retirée du site. Pour suivre un prix d'une semaine à l'autre, gardez vos propres relevés.
  • Tarif unique : 1 crédit l'appel, que ce soit `search`, `category/products`, `deals` ou `product/detail`.