{"description":"Searches IKEA's catalogue like the site's search box, in any IKEA market (de/de, us/en, gb/en, fr/fr, …): name, product type, size, colour/design, current and previous price with currency, star rating and number of reviews, badges (bestseller, new lower price, last chance), online availability, number of variants, image and product page. IKEA always returns its closest matches, even for queries that match nothing, so check the names. Planner and content tiles are dropped.","effect":"read","id":"ikea.com/search-products","keywords":["ikea","möbel","regal","kallax","billy","malm","schrank","einrichtung","furniture","home","shelf","storage","product search","price"],"output":{"schema":{"properties":{"did_you_mean":{"items":{"type":"string"},"type":"array"},"market":{"type":"string"},"products":{"items":{"properties":{"badge":{"type":["string","null"]},"currency":{"type":["string","null"]},"design":{"type":["string","null"]},"id":{"description":"IKEA article number","type":"string"},"image":{"type":["string","null"]},"last_chance":{"type":"boolean"},"name":{"type":"string"},"new_lower_price":{"type":"boolean"},"online_sellable":{"type":"boolean"},"previous_price":{"type":["number","null"]},"price":{"type":["number","null"]},"rating":{"type":["number","null"]},"rating_count":{"type":["integer","null"]},"size":{"type":["string","null"]},"type":{"type":["string","null"]},"url":{"type":["string","null"]},"variants":{"type":["integer","null"]}},"type":"object"},"type":"array"},"query":{"type":"string"},"query_expanded":{"description":"IKEA broadened the query","type":"boolean"},"total":{"type":["integer","null"]}},"type":"object"},"value":"let $max = params.max_price in {query: params.query, market: params.market || 'de/de', total: steps.search[0].total || `null`, did_you_mean: steps.search[0].summary.did_you_mean || `[]`, query_expanded: steps.search[0].summary.expanded == `true`, products: map(&(let $p = @ in {id: $p.itemNo || $p.id, name: $p.name, type: $p.typeName || `null`, size: $p.itemMeasureReferenceText || `null`, design: $p.validDesignText || `null`, price: $p.salesPrice.numeral || `null`, previous_price: $p.salesPrice.previous && to_number(join('.', [$p.salesPrice.previous.wholeNumber, $p.salesPrice.previous.decimals || '0'])) || `null`, currency: $p.salesPrice.currencyCode || `null`, rating: $p.ratingValue || `null`, rating_count: $p.ratingCount || `null`, badge: $p.badge.text || `null`, new_lower_price: contains($p.salesPrice.tags || `[]`, 'NEW_LOWER_PRICE'), last_chance: $p.lastChance == `true`, online_sellable: $p.onlineSellable == `true`, variants: $p.gprDescription.numberOfVariants || `null`, url: $p.pipUrl || `null`, image: $p.mainImageUrl || `null`}), steps.search[0].products || `[]`)[?!$max || price <= $max]}"},"params":{"additionalProperties":false,"properties":{"limit":{"default":24,"enum":[12,24,48],"type":"integer"},"market":{"default":"de/de","description":"IKEA country and language","enum":["de/de","at/de","ch/de","ch/fr","nl/nl","be/nl","be/fr","fr/fr","gb/en","ie/en","us/en","ca/en","au/en","se/sv","dk/da","no/no","fi/fi","it/it","es/es","pt/pt","pl/pl","cz/cs"],"type":"string"},"max_price":{"description":"Keep products at or below this price (in the market's currency)","minimum":0,"type":"number"},"page":{"default":1,"maximum":20,"minimum":1,"type":"integer"},"query":{"description":"Product name or what you need, e.g. 'kallax', 'billy regal', 'office chair'","maxLength":100,"minLength":2,"type":"string"}},"required":["query"],"type":"object"},"provenance":{"method":"har","notes":"Built with the recipe builder: a captured search call, sanitized into a trace, derived in 3 rounds (the offline replay caught steps.search vs steps.search[0] for the one-item foreach). One call: the search page's POST to sik.search.blue.cdtapps.com/<country>/<language>/search?c=sr&v=<version>, IKEA's own search service (a separate host that IKEA's pages call cross-origin; it answers with CORS *). Products are the PRIMARY_AREA items of type PRODUCT; PLANNER/CONTENT breakouts are not requested. v is a date-like API version from the recording. Verified live 2026-11-07: de/de kallax 24/143 in 322 ms, at/de, us/en with max_price (USD). v2 (2026-11-07 22:38): read_only_post on 1 step only; requests and output unchanged.","recorded_at":"2026-11-07T18:37:46+01:00","recorded_by":"C4 with wield-build (capture → trace → derive → replay → live test)"},"requires_login":false,"schema":"https://wield.run/schema/recipe/v1.json","site":{"country":"DE","id":"ikea.com","language":"de","name":"IKEA","origin":"https://www.ikea.com","origins":["https://sik.search.blue.cdtapps.com"]},"steps":[{"description":"IKEA's search service (sik.search.blue.cdtapps.com), the same JSON API the search page calls; read-only POST, public, CORS open. The one-item foreach computes the page offset.","expect":{"assert":"body.results != `null`","content_type":"json","status":[200]},"extract":{"json":{"products":"results[?component == 'PRIMARY_AREA'] | [0].items[?type == 'PRODUCT'].product","summary":"results[?component == 'SEARCH_SUMMARY'] | [0].{query: originalQuery, did_you_mean: didYouMeanPhrases, expanded: queryWasExpanded}","total":"results[?component == 'PRIMARY_AREA'] | [0].metadata.max"}},"foreach":{"as":"pg","in":"[{offset: (params.page - `1`) * params.limit}]","max":1},"id":"search","read_only_post":true,"request":{"body":{"type":"json","value":{"allowAutocorrect":true,"components":[{"allVariants":false,"columns":4,"component":"PRIMARY_AREA","forceFilterCalculation":false,"types":{"breakouts":[],"main":"PRODUCT"},"window":{"offset":"{{pg.offset}}","size":"{{params.limit}}"}},{"component":"SEARCH_SUMMARY"}],"isB2B":false,"isUserLoggedIn":false,"searchParameters":{"input":"{{params.query}}","type":"QUERY"}}},"credentials":"omit","headers":{"Accept":"application/json","Content-Type":"application/json"},"method":"POST","query":{"c":"sr","v":"20260727"},"url":"https://sik.search.blue.cdtapps.com/{{params.market}}/search"}}],"task":"Search IKEA products with price, rating and online availability","tos":{"notes":"One search request per run, the same request the IKEA site makes when someone searches. No account, no cart.","reviewed":false},"verify":{"checks":["length(output.products) > `5`","output.products[0].price > `0`","output.products[0].currency == 'EUR'","length(output.products[?starts_with(url, 'https://www.ikea.com/de/de/p/')]) == length(output.products)","output.total > `5`"],"example_params":{"market":"de/de","query":"kallax"},"max_ms":4000},"version":2}