Lidl API: akční leták, e-shop a ceny Lidl Plus z lidl.cz v JSON
Lidl své ceny vývojářům přes veřejné API nezpřístupňuje. Tohle rozhraní čte lidl.cz očima nepřihlášeného zákazníka a vrací dvě různé nabídky: zboží z e-shopu (nářadí Parkside, kuchyň Silvercrest, oblečení Crivit…) s cenou, hodnocením a dodáním, a nabídky z akčního letáku pro prodejny, tedy i potraviny, pivo nebo drogerii, včetně cen, které platí jen s aplikací Lidl Plus. S účtem Lidl Plus ani s dodavatelským portálem Lidlu nepracuje a objednávky nevytváří; vidí jen to, co Lidl ukazuje každému návštěvníkovi. Pro Česko patří do každého dotazu `"country": "cz"`, jinak se čte německý lidl.de.
Endpointy
| endpoint | Co se vrací | Povinné |
|---|---|---|
| search | Hledání podle slova nebo EAN: cena, přeškrtnutá cena s rozlišením, zda je to doporučená cena výrobce, nebo předchozí cena Lidlu, sleva, cena za jednotku, cena Lidl Plus zvlášť, hodnocení, dostupnost v e-shopu a termín v prodejnách. Filtry značky, ceny, hodnocení a dostupnosti; řazení podle ceny, hodnocení, novinek, prodejnosti nebo slevy. | query |
| category/products | Totéž pro jednu kategorii, podle id z adresy (…/h/…/h10006306 → h10006306) nebo podle celé adresy. | category |
| deals | Nabídky z letáku pro prodejny, aktuální i ty, které teprve začnou: cena, původní cena, sleva, cena za kilogram či litr, cena Lidl Plus a termín platnosti v `store_offers` („Pouze v prodejnách od 30.10. - 01.11.“). Volitelně s klíčovým slovem v `query`. | vše volitelné |
| product/detail | Celá karta zboží podle id nebo adresy: EAN, galerie, ceny, hodnocení s počtem doporučení, zda je zboží skladem online, doba a cena doručení, maximální počet kusů v objednávce, popis, tabulka parametrů, varianty a návody v PDF. | product_id |
Každé volání se účtuje v kreditech. Neúspěšná a blokovaná volání jsou zdarma.
Funkční příklad
Na dotaz „hermelín“ vrátil leták 15 nabídek, hermelín je ale jen jedna z nich (`keyword_matches_on_page`: 1); zbytek doplnil Lidl sám: celer, mandarinky, gouda. U Sedlčanského hermelínu Duopack je `price` null, protože Lidl cenu 49,90 Kč ukazuje jen s aplikací. Najdete ji v `member_price` s popiskem „s Lidl Plus“. Termín akce je u letákového zboží v `store_offers`, ne v `price_valid_from`, které tu zůstává prázdné.
curl -X POST https://api.reefapi.com/lidl/v1/deals \
-H "x-api-key: VAS_KLIC" \
-H "content-type: application/json" \
-d '{"country": "cz", "query": "hermelín"}'{
"ok": true,
"data": {
"results": [
{
"product_id": "10054669",
"title": "SEDLČANSKÝ HERMELÍN Duopack",
"url": "https://www.lidl.cz/p/sedlcansky-hermelin-duopack/p10054669",
"currency": "CZK",
"price": null,
"price_valid_from": null,
"member_price": 49.9,
"member_program": "Lidl Plus",
"member_price_label": "s Lidl Plus",
"member_discount_label": "-10 Kč",
"member_unit_price_text": "100 g = 24,95 Kč",
"availability": "in_store_only",
"availability_text": "Pouze v prodejnách od 30.10. - 01.11.",
"store_offers": [
{ "label": "Pouze v prodejnách od 30.10. - 01.11.", "type": "IN_STORE_FROM_FUTURE_DATE_RANGE", "valid_from": "2026-10-29T23:00:00Z", "valid_until": "2026-11-01T22:59:59Z" }
],
"category": "Food",
...
},
{
"product_id": "10057377",
"title": "Celer",
"currency": "CZK",
"price": 16.9,
"price_before_discount": 34.9,
"price_before_discount_type": "previous_price",
"discount_percent": 51,
"unit_price_text": "1 kg",
"member_price": null,
"availability_text": "Pouze v prodejnách od 29.10. - 01.11.",
...
},
...
],
"count": 15,
"total_results": 15,
"keyword_matches_on_page": 1,
"country": "cz",
"language": "cs",
"currency": "CZK",
"web_shop": true,
"query": "hermelín"
},
"meta": { "record_count": 15, "country": "cz", "pagination": { "page": 1, "has_more": false, "page_size": 15, "total": 15 }, "charged_credits": 1, "cache_hit": false, "mode": "live" }
}Scraper na Lidl: tři místa, kde cena lže
První je Lidl Plus. U části letákového zboží Lidl veřejnou cenu vůbec neuvádí, jen cenu s aplikací. Skript, který bere „první cenu na kartě“, tu buď nenajde nic, nebo uloží členskou cenu jako běžnou. Z 418 letákových nabídek, které jsme 26. 10. 2026 na lidl.cz prošli, mělo 7 jen cenu s Lidl Plus (hermelín, mleté kuřecí maso, toaletní papír…). V odpovědi API mají tyto položky `price` null a částka je v `member_price`.
Druhé je přeškrtnutá cena. Vypadá jako „předtím“, často je to ale doporučená cena výrobce. Ve vzorku 955 řádků z pěti zemí včetně Česka, který jsme prošli při stavbě enginu v září 2026, šlo o doporučenou cenu ve 213 případech a o předchozí cenu Lidlu jen v 72. Sleva vůči ceně, za kterou Lidl zboží neprodával, je jiná informace než zlevnění, proto ji engine rozlišuje v `price_before_discount_type`.
Třetí je stránkování kategorií. Když adresa kategorie nemá přesně ten slug, který Lidl čeká, přesměruje na správnou adresu a parametry stránky cestou ztratí: druhá stránka pak přišla jako první, s 36 stejnými produkty a bez chyby. Engine přesměrování nenásleduje naslepo, vezme z něj správnou adresu a dotaz zopakuje s parametry.
Leták se mění každý týden. Chyba v cenách se proto neukáže při jednom běhu, ale až na grafu za měsíc, kdy už se nedá říct, od kterého týdne čísla nesedí.
Omezení a poctivé poznámky
- Jde o nezávislé rozhraní bez vazby na Lidl: oficiální není a obchodní ani partnerský vztah s Lidlem nemáme.
- Výchozí země je Německo. Bez `"country": "cz"` přijdou data z lidl.de a ceny v eurech.
- S `limit` nad 60 teď na lidl.cz přicházejí neúplné stránky (měřeno 26. 10. 2026 s hodnotou 100): v `deals` i `search` vrátil Lidl na stránku jen 60 položek, stránkování v `deals` ale posouvalo o 100. Ze 658 letákových nabídek jsme tak na sedmi stránkách dostali 418 a `has_more` už hlásil konec. Držte `limit` na 60 nebo níž; výchozích 36 funguje.
- U letákového zboží zůstávají `price_valid_from` a `price_valid_until` prázdné (u všech 333 nabídek, které Lidl vede v kategorii „Food“, z těch 418, které jsme viděli). Termín akce je v `store_offers` a jako text v `availability_text`.
- Hledání v letáku bere slovo jen orientačně: na „hermelín“ přišlo 15 nabídek a z toho jeden hermelín, na „máslo“ 21 nabídek, z nichž Lidl za shodu s dotazem počítal 10. Tento počet vrací `keyword_matches_on_page`; které řádky to jsou, Lidl neoznačuje.
- Typ přeškrtnuté ceny přebíráme z příznaku Lidlu a v letáku nemusí sedět: zmrzlina Häagen-Dazs měla `previous_price`, ale její `unit_price_text` začínal větou „* doporučená prodejní cena výrobce“.
- Cenu za jednotku Lidl v letáku píše nejednotně („cena za 100 g“, „1 kg“, u vína jen čárka). Číslo v `unit_price` proto přijde jen tam, kde je z textu jednoznačné; `unit_price_text` je vždy tak, jak ho Lidl napsal.
- Kolik kusů zbývá v konkrétní prodejně, API neví, a starší ceny neuchovává: historii letákových cen si skládáte z vlastních uložených výsledků `deals`.
- Všechny čtyři akce stojí 1 kredit za volání.