IKEA API endpoint
Searches IKEA products and returns name, price, rating, images, colors, and variant data. q is a free-text query; an IKEA item number also resolves as its own single result. country and language select IKEA's per-country site (default us/en). A zero total with an empty products list is a valid no-results response.
/ikea/searchSearches IKEA products. q is required free text; an IKEA item number (e.g. 80213074) also resolves as its own single result. country and language select IKEA's per-country site and default to us/en — both must be lowercase 2-letter codes (e.g. de/de, gb/en). size controls how many results are returned in one call (1-100, default 24); there is no confirmed-working cursor for paginating past size in a second call.
A zero total with an empty products list is a valid no-results response. Each product includes price (current, previous, discount amount/percentage, IKEA Family tag when on a promotional price), aggregate rating, images, color swatches, and any other purchasable size/color/design variants with their own item numbers and pricing. related_searches and did_you_mean are included when IKEA's own response has them.
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| item_no | 40 | “80213074” and 39 other values |
| name | 40 | “MICKE” and 25 other values |
| type_name | 40 | “Desk” and 12 other values |
| measure_text | 39 | “41 3/8x19 5/8 "” and 34 other values |
| valid_design | 40 | “white” and 11 other values |
| filter_class | 38 | desks (35), chest of drawers (1), side tables (1) and 1 more |
| image_url | 40 | ikea.com |
| product_url | 40 | ikea.com |
| price | 40 | |
| rating | 38 | |
| colors | 28 | median 1 entry |
| variant_count | 24 | 1 to 21, median 1 |
| variants | 24 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | Yes | Free-text product search query | desk | |
| country | string | No | Lowercase 2-letter IKEA site country code | ||
| language | string | No | Lowercase 2-letter IKEA site language code | ||
| size | integer | No | Result count (1-100) Minimum: 1. Maximum: 100. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/ikea/search?q=desk&country=us&language=en" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "desk",
"country": "us",
"language": "en",
"count": 1,
"total": 203,
"products": [
{
"item_no": "80213074",
"name": "MICKE",
"type_name": "Desk",
"measure_text": "41 3/8x19 5/8 \"",
"valid_design": "white",
"filter_class": "desks",
"image_url": "https://www.ikea.com/us/en/images/products/micke-desk-white__0736018_pe740345_s5.jpg",
"product_url": "https://www.ikea.com/us/en/p/micke-desk-white-80213074/",
"price": {
"current": 99.99,
"formatted": "$99.99",
"currency_code": "USD"
},
"rating": {
"value": 4.5,
"count": 6367
},
"colors": [
{
"name": "white",
"id": "10156",
"hex": "ffffff"
}
],
"variant_count": 3
}
]
}
}Request schema
No body schema
Response schema
#/definitions/ikea.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | ikea.SearchResponse | No | ||||
| data.count | integer | No | 24 | Count is the number of products returned in this response; Total is IKEA's own total match count across the full result set (there is no confirmed-working pagination parameter for retrieving results beyond Size in one call -- see this package's doc comment). | ||
| data.country | string | No | us | |||
| data.did_you_mean | array | No | DidYouMean is populated only when IKEA's own spell-correction suggests a different query than the one submitted. | |||
| data.fetched_at | string | No | ||||
| data.language | string | No | en | |||
| data.products | array | No | ||||
| data.products[].colors | array | No | ||||
| data.products[].colors[].hex | string | No | ffffff | |||
| data.products[].colors[].id | string | No | 10156 | |||
| data.products[].colors[].name | string | No | white | |||
| data.products[].filter_class | string | No | desks | FilterClass is IKEA's own product-type slug, e.g. "desks" -- usable as a coarse category signal, though it is not currently accepted back as a category-browse filter by this endpoint (see this package's doc comment). | ||
| data.products[].image_url | string | No | ||||
| data.products[].item_no | string | No | 80213074 | |||
| data.products[].measure_text | string | No | 41 3/8x19 5/8 " | |||
| data.products[].name | string | No | MICKE | |||
| data.products[].price | ikea.Price | No | ||||
| data.products[].price.currency_code | string | No | USD | |||
| data.products[].price.current | number | No | 99.99 | |||
| data.products[].price.discount_amount | number | No | 15.01 | |||
| data.products[].price.discount_percentage | number | No | 15 | |||
| data.products[].price.formatted | string | No | $99.99 | |||
| data.products[].price.previous | number | No | 95 | |||
| data.products[].price.previous_formatted | string | No | $95.00 | |||
| data.products[].price.tag | string | No | FAMILY_PRICE | Tag is IKEA's own price-badge code, e.g. "FAMILY_PRICE" for an IKEA Family member price. TagText is its human-readable label, e.g. "IKEA Family price". | ||
| data.products[].price.tag_text | string | No | IKEA Family price | |||
| data.products[].price.valid_from | string | No | 2026-08-03 | |||
| data.products[].price.valid_to | string | No | 2026-09-07 | |||
| data.products[].product_url | string | No | ||||
| data.products[].rating | ikea.Rating | No | ||||
| data.products[].rating.count | integer | No | 6367 | |||
| data.products[].rating.value | number | No | 4.5 | |||
| data.products[].type_name | string | No | Desk | |||
| data.products[].valid_design | string | No | white | ValidDesign is IKEA's own color/finish descriptor for this exact item, e.g. "white" or "black-brown" -- the design this specific item number represents, as opposed to Colors below (every color swatch shown for the product family). | ||
| data.products[].variant_count | integer | No | 3 | VariantCount is the total number of other purchasable size/color/design options this product has, which may exceed len(Variants) -- the search endpoint's own gprDescription block does not always enumerate every variant. | ||
| data.products[].variants | array | No | ||||
| data.products[].variants[].image_url | string | No | ||||
| data.products[].variants[].item_no | string | No | 10244743 | |||
| data.products[].variants[].name | string | No | MICKE | |||
| data.products[].variants[].price | ikea.Price | No | ||||
| data.products[].variants[].price.currency_code | string | No | USD | |||
| data.products[].variants[].price.current | number | No | 99.99 | |||
| data.products[].variants[].price.discount_amount | number | No | 15.01 | |||
| data.products[].variants[].price.discount_percentage | number | No | 15 | |||
| data.products[].variants[].price.formatted | string | No | $99.99 | |||
| data.products[].variants[].price.previous | number | No | 95 | |||
| data.products[].variants[].price.previous_formatted | string | No | $95.00 | |||
| data.products[].variants[].price.tag | string | No | FAMILY_PRICE | Tag is IKEA's own price-badge code, e.g. "FAMILY_PRICE" for an IKEA Family member price. TagText is its human-readable label, e.g. "IKEA Family price". | ||
| data.products[].variants[].price.tag_text | string | No | IKEA Family price | |||
| data.products[].variants[].price.valid_from | string | No | 2026-08-03 | |||
| data.products[].variants[].price.valid_to | string | No | 2026-09-07 | |||
| data.products[].variants[].product_url | string | No | ||||
| data.products[].variants[].rating | ikea.Rating | No | ||||
| data.products[].variants[].rating.count | integer | No | 6367 | |||
| data.products[].variants[].rating.value | number | No | 4.5 | |||
| data.products[].variants[].type_name | string | No | Desk | |||
| data.products[].variants[].valid_design | string | No | black-brown | |||
| data.query | string | No | desk | |||
| data.related_searches | array | No | RelatedSearches are IKEA's own suggested related queries with their own result counts. | |||
| data.related_searches[].count | integer | No | 48 | |||
| data.related_searches[].text | string | No | desk chair | |||
| data.source_url | string | No | ||||
| data.total | integer | No | 203 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/ikea/search?q=desk&country=us&language=en" \
-H "x-api-key: $CRAWLORA_API_KEY"