{"description":"Searches Lidl's German online shop like its search page: product title, brand, price in euros, the struck-through price and discount when reduced, customer rating and number of reviews, availability (online, coming soon, in stores on given dates), image and link. The first 48 results in Lidl's order. Lidl's search is semantic: a query with no real match still returns loosely related products.","effect":"read","id":"lidl.de/search-products","keywords":["lidl","lidl online shop","angebote","kaffeemaschine","küche","werkzeug","parkside","silvercrest","haushalt","preis","deals","products","germany"],"output":{"schema":{"properties":{"products":{"items":{"properties":{"availability":{"description":"As Lidl shows it, e.g. 'lieferbar', 'demnächst bestellbar', 'auch in der Filiale von 16.11. - 21.11.'","type":["string","null"]},"brand":{"type":["string","null"]},"discount_percent":{"type":["number","null"]},"image":{"type":["string","null"]},"price_eur":{"type":["number","null"]},"rating":{"description":"0–5","type":["number","null"]},"reviews":{"type":"integer"},"title":{"type":"string"},"url":{"type":"string"},"was_eur":{"description":"Struck-through price (often the recommended retail price) when reduced","type":["number","null"]}},"type":"object"},"type":"array"},"query":{"type":"string"}},"required":["query","products"],"type":"object"},"value":"{query: params.query, products: map(&{title: title, brand: brand || `null`, price_eur: price || `null`, was_eur: was || `null`, discount_percent: discount || `null`, rating: rating || `null`, reviews: reviews || `0`, availability: availability || `null`, image: image || `null`, url: join('', ['https://www.lidl.de', path])}, steps.search.products[?title != `null` && path != `null`] || `[]`)}"},"params":{"additionalProperties":false,"properties":{"query":{"description":"What to look for, e.g. 'kaffeemaschine', 'akkuschrauber', 'parkside'","maxLength":100,"minLength":2,"type":"string"}},"required":["query"],"type":"object"},"provenance":{"method":"browser-inspect","notes":"Lidl's search page /q/search?q=… is a Nuxt page whose 48 product tiles are skeletons filled by script; each tile element carries its product as JSON in data-grid-data (fullTitle, brand.name, price.price, price.discount.{deletedPrice, percentageDiscount}, price.currencyCode, ratings.{average, count}, stockAvailability.badgeInfo.badges[].text, canonicalUrl, image). The recipe reads those attributes with html_items parse: json + path, so it needs an extension whose interpreter lists the html_json feature (0.1.12 or later); older extensions get extension_outdated from wield-mcp. The page's product search API (/q/api/search) answers servers 401, so it is not used. Paging uses offset=, which robots.txt disallows, so the recipe reads the first page only. No sponsored tiles were in the list. The search is semantic: 'qzxwvkjhgfdpl' still finds 1579 products (numFound in the page state, not readable as JSON), so there is no empty result to detect. v2 (2026-11-07 22:53): keywords only (online shop removed: they steered unrelated searches here, C1 ranking note).","recorded_at":"2026-11-07T22:44:00+01:00","recorded_by":"C4"},"requires_login":false,"schema":"https://wield.run/schema/recipe/v1.json","site":{"country":"DE","id":"lidl.de","language":"de","name":"Lidl","origin":"https://www.lidl.de","origins":["https://www.lidl.de"]},"steps":[{"description":"Lidl's search page (/q/search?q=…). Its 48 product tiles are rendered as placeholders; each tile's data is a JSON attribute (data-grid-data) that the recipe parses per tile (html_items field parse: json).","expect":{"content_type":"html","status":[200]},"extract":{"html_items":{"products":{"fields":{"availability":{"attr":"data-grid-data","parse":"json","path":"stockAvailability.badgeInfo.badges[0].text","selector":":scope"},"brand":{"attr":"data-grid-data","parse":"json","path":"brand.name","selector":":scope"},"currency":{"attr":"data-grid-data","parse":"json","path":"price.currencyCode","selector":":scope"},"discount":{"attr":"data-grid-data","parse":"json","path":"price.discount.percentageDiscount","selector":":scope"},"image":{"attr":"data-grid-data","parse":"json","path":"image","selector":":scope"},"path":{"attr":"data-grid-data","parse":"json","path":"canonicalUrl","selector":":scope"},"price":{"attr":"data-grid-data","parse":"json","path":"price.price","selector":":scope"},"rating":{"attr":"data-grid-data","parse":"json","path":"ratings.average","selector":":scope"},"reviews":{"attr":"data-grid-data","parse":"json","path":"ratings.count","selector":":scope"},"title":{"attr":"data-grid-data","parse":"json","path":"fullTitle","selector":":scope"},"was":{"attr":"data-grid-data","parse":"json","path":"price.discount.deletedPrice","selector":":scope"}},"max":48,"selector":"[data-grid-data]"}}},"id":"search","request":{"headers":{"Accept":"text/html"},"method":"GET","query":{"q":"{{params.query}}"},"url":"/q/search"}}],"task":"Search Lidl's online shop for products","tos":{"notes":"robots.txt disallows *search?q=* (and *?offset=*) for bots: this recipe calls the search page itself, once per user request, from the user's own browser. No robots rules for Claude agents and no AI content signals. One request per call; nothing is added to the cart.","reviewed":false},"verify":{"checks":["length(output.products) > `30`","length(output.products[?price_eur > `0`]) == length(output.products)","length(output.products[?starts_with(url, 'https://www.lidl.de/p/')]) == length(output.products)","length(output.products[?rating != `null` && rating <= `5`]) > `20`","length(output.products[?was_eur != `null` && was_eur > price_eur]) > `5`"],"example_params":{"query":"kaffeemaschine"},"max_ms":5000},"version":2}