Search Lidl's online shop for products.
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.
- Site
- Lidl, Germany
- Version
- v2 of 2
- Runs, last 7 days
- No reports yet
- sha256
- 69d16df85a39…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Search Lidl's online shop for products.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "lidl.de/search-products", "params": { "query": "kaffeemaschine" } } }
Requests
sent from your browser, in order- 1GET/q/search?qLidl'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).
Parameters
from your agentReturns
to your agentWhere it can send
- www.lidl.de
Anything else is blocked by the extension.
Reads from your session
Nothing. Your browser attaches the site's cookies by itself.
Used only in requests to the addresses on the left. Never sent to wield.run or your agent.
Checks
a run passes when- 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`
Raw recipe
Served as canonical JSON from /api/v1/recipes/lidl.de/search-products, so its sha256 matches the ETag and the index.
curl -s https://wield.run/api/v1/recipes/lidl.de/search-products | shasum -a 256 # 69d16df85a39b23912dea4d6180e977a9f67d5952e0cfd00acf6282f03fbe371
{ "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 }