IKEA API & Scraper
The IKEA API turns every ikea.com country store - 50 countries, from the United States and Germany to Japan, Saudi Arabia and Chile - into clean JSON in eight actions: search, category, categories, product/detail, product/availability, product/reviews, stores and suggest.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
Pick the store with country and, where IKEA publishes several languages, with language (Canada en or fr, Switzerland de, fr, it or en). Every product carries its IKEA item number and price in the store's currency, and the prices are kept apart: price is what a shopper without IKEA Family pays online, member_price is the IKEA Family price, original_price is the previous price of a new-lower-price, limited-time or clearance offer with the dates it is valid, and in_store_offer holds prices IKEA offers only in its stores. price_basis says what the price buys - one item, a pack of 4 chairs, or a food pack holding 0.5 kg. product/detail adds the description, designer, measurements, every package with its size and weight, the articles a combination is made of, materials and care, safety notes, assembly instructions, guarantee and return period. product/availability returns stock in every store of a country with quantities and restock dates. Verification on 2026-09-15: 82 of 82 searches, 73 of 73 product reads and 23 of 23 stock reads succeeded, search and product read worked in all 50 countries with the right currency, 46 of 46 controlled cases passed, and 10 of 10 products matched two other IKEA data sources on price, name, rating and currency. No IKEA account needed - one ReefAPI key and the standard { ok, data, meta, error } envelope.
IKEA hides the IKEA Family price in the price field - the API returns both prices, labelled
This is the one thing to know before you build an IKEA price tracker. On a product with an IKEA Family price, the number IKEA's own data puts in the price slot is the MEMBER price, and the regular price sits next to it as the 'previous' price; IKEA's page even advertises the member price as the offer price. The API returns the regular price as price and the Family price as member_price, and treats every other kind of reduction separately. Measured on 2026-09-15.
| IKEA product | price | member_price / original_price | What kind of price it is |
|---|---|---|---|
| GÖRSNYGG storage case (India) | 299 INR | member_price 149 INR | IKEA Family price, valid to 2026-09-30 |
| POÄNG armchair (United Kingdom) | 69 GBP | original_price 80 GBP | New lower price, valid to 2027-02-23 |
| MALM bed frame 140x200 (Saudi Arabia) | 599 SAR | original_price 799 SAR | Limited-time offer, 10 Sep - 4 Oct 2026 |
| LISABO chair (Poland) | 299 PLN | original_price 349 PLN | New lower price; lowest price of the previous 30 days 349 PLN |
| BILLY bookcase (United States) | 79.00 USD | in_store_offer 'In-store only price $65.00' | In-store only, IKEA Family members only - never the online price |
| TEODORES chair (Poland) | 516 PLN | price_basis per_pack, pack_quantity 4 | The price is for a pack of 4 chairs |
A search row and the full product record agreed on price, previous price, member price, price type and price basis on 70 of 70 products across 50 countries.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/ikea/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "sofa"
}
}{
"ok": true,
"meta": {
"api": "ikea",
"endpoint": "search",
"mode": "live",
"latency_ms": 990.3,
"record_count": 24,
"bytes": 137735,
"cache_hit": false,
"country": "us",
"language": "en",
"pagination": {
"page": 1,
"has_more": true,
"page_size": 24,
"total": 700
}
},
"data": {
"results": [
{
"product_id": "40595942",
"item_no": "40595942",
"item_no_global": "40573285",
"item_type": "ART",
"title": "GLOSTAD Sofa, Knisa dark gray",
"name": "GLOSTAD",
"type_name": "Sofa",
"design": "Knisa dark gray",
"measure": null,
"url": "https://www.ikea.com/us/en/p/glostad-sofa-knisa-dark-gray-40595942/",
"image": "https://www.ikea.com/us/en/images/products/glostad-sofa-knisa-dark-gray__1234948_pe917261_s5.jpg",
"contextual_image": "https://www.ikea.com/us/en/images/products/glostad-sofa-knisa-dark-gray__1235175_pe917294_s5.jpg",
"price": 199,
"currency": "USD",
"price_type": "regular",
"original_price": null,
"discount_percent": null,
"member_price": null,
"member_program": null,
"member_discount_percent": null,
"lowest_previous_price": null,
"price_valid_from": null,
"price_valid_to": null,
"price_disclaimer": null,
"price_unit": null,
"price_basis": "per_item",
"pack_quantity": null,
"quantity": null,
"unit": null,
"in_store_offer": null,
"low_price_item": true,
"online_sellable": true,
"last_chance": false,
"is_new": false,
"top_seller": false,
"rating": 4,
"rating_count": 77,
"rating_scale": 5,
"colours": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"hex": "[trimmed-depth]"
}
],
"category_path": [
{
"key": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"product_area": "Sofas",
"home_furnishing_business": "Living room seating",
"variant_count": 0,
"min_order_quantity": null,
"energy_class": null
},
{
"product_id": "s19384116",
"item_no": "19384116",
"item_no_global": "19384116",
"item_type": "SPR",
"title": "UPPLAND Sofa, Blekinge white",
"name": "UPPLAND",
"type_name": "Sofa",
"design": "Blekinge white",
"measure": null,
"url": "https://www.ikea.com/us/en/p/uppland-sofa-blekinge-white-s19384116/",
"image": "https://www.ikea.com/us/en/images/products/uppland-sofa-blekinge-white__1578502_pe1034145_s5.jpg",
"contextual_image": "https://www.ikea.com/us/en/images/products/uppland-sofa-blekinge-white__0818564_pe774486_s5.jpg",
"price": 899,
"currency": "USD",
"price_type": "regular",
"original_price": null,
"discount_percent": null,
"member_price": null,
"member_program": null,
"member_discount_percent": null,
"lowest_previous_price": null,
"price_valid_from": null,
"price_valid_to": null,
"price_disclaimer": null,
"price_unit": null,
"price_basis": "per_item",
"pack_quantity": null,
"quantity": null,
"unit": null,
"in_store_offer": null,
"low_price_item": false,
"online_sellable": true,
"last_chance": false,
"is_new": false,
"top_seller": true,
"rating": 3.7,
"rating_count": 200,
"rating_scale": 5,
"colours": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"hex": "[trimmed-depth]"
}
],
"category_path": [
{
"key": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"product_area": "Sofas",
"home_furnishing_business": "Living room seating",
"variant_count": 12,
"min_order_quantity": null,
"energy_class": null
},
{
"product_id": "s69578602",
"item_no": "69578602",
"item_no_global": "89542669",
"item_type": "SPR",
"title": "GLOSTAD Sofa with chaise, Knisa dark gray",
"name": "GLOSTAD",
"type_name": "Sofa with chaise",
"design": "Knisa dark gray",
"measure": null,
"url": "https://www.ikea.com/us/en/p/glostad-sofa-with-chaise-knisa-dark-gray-s69578602/",
"image": "https://www.ikea.com/us/en/images/products/glostad-sofa-with-chaise-knisa-dark-gray__1577736_pe1033483_s5.jpg",
"contextual_image": "https://www.ikea.com/us/en/images/products/glostad-sofa-with-chaise-knisa-dark-gray__1235200_pe917305_s5.jpg",
"price": 249,
"currency": "USD",
"price_type": "regular",
"original_price": null,
"discount_percent": null,
"member_price": null,
"member_program": null,
"member_discount_percent": null,
"lowest_previous_price": null,
"price_valid_from": null,
"price_valid_to": null,
"price_disclaimer": null,
"price_unit": null,
"price_basis": "per_item",
"pack_quantity": null,
"quantity": null,
"unit": null,
"in_store_offer": null,
"low_price_item": false,
"online_sellable": true,
"last_chance": false,
"is_new": false,
"top_seller": false,
"rating": 3.5,
"rating_count": 37,
"rating_scale": 5,
"colours": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"hex": "[trimmed-depth]"
}
],
"category_path": [
{
"key": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"name": "[trimmed-depth]"
},
{
"key": "[trimmed-depth]",
"name": "[trimmed-depth]"
}
],
"product_area": "Sofas",
"home_furnishing_business": "Living room seating",
"variant_count": 0,
"min_order_quantity": null,
"energy_class": null
}
],
"count": 24,
"total_results": 700,
"page": 1,
"page_size": 24,
"page_count": 30,
"filters_available": [
{
"parameter": "f-type",
"name": "Type",
"kind": "values",
"selected": false,
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]",
"selected": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]",
"selected": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]",
"selected": "[trimmed-depth]"
}
]
},
{
"parameter": "f-price-buckets",
"name": "Price",
"kind": "values",
"selected": false,
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]",
"selected": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]",
"selected": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"count": "[trimmed-depth]",
"selected": "[trimmed-depth]"
}
]
},
{
"parameter": "f-measurement-buckets",
"name": "Size",
"kind": "values",
"selected": false,
"values": [
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"group": "[trimmed-depth]",
"count": "[trimmed-depth]",
"selected": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"group": "[trimmed-depth]",
"count": "[trimmed-depth]",
"selected": "[trimmed-depth]"
},
{
"id": "[trimmed-depth]",
"name": "[trimmed-depth]",
"group": "[trimmed-depth]",
"count": "[trimmed-depth]",
"selected": "[trimmed-depth]"
}
]
}
],
"sort_options": [
"relevance",
"price_asc",
"price_desc"
],
"sort_applied": "relevance",
"filters_applied": {},
"filters_not_applied": [],
"country": "us",
"language": "en",
"currency": "USD",
"query": "sofa"
}
}What the IKEA API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search an IKEA country store by keyword. Each product comes with its item number, price and currency, the IKEA Family price separately, the previous price of a new-lower-price, limited-time or clearance offer with its validity, in-store-only offers, rating, colours, category path and whether it can be bought online. Sort by price, rating, newest or size; filter with IKEA's own filters (colour, price band, size, material, series, subcategory) or new, last-chance and best-seller flags. | Pricing teams call search to search an IKEA country store by keyword. | query, country, language, page, page_size, ... |
| category | Every product in one IKEA category (e.g. Sofas, Table lamps), paged, with the same rows, sorting and filters as search. | Marketplace operators call category to get every product in one IKEA category (e.g. | category_id, country, language, page, page_size, ... |
| categories | IKEA's category tree, one level at a time: a category with its product count and its child categories (key, name, product count). Start at the root for the top-level departments. | Catalog enrichment teams call categories to get iKEA's category tree, one level at a time. | category_id, country, language, max_rotations |
| product/detail | The full IKEA product record by item number or URL: every price kept apart (regular, IKEA Family, previous, lowest 30-day, in-store-only), description, designer, key facts, measurements, every package with its dimensions and weight, the articles a combination consists of, materials and care instructions, safety notes, assembly instructions and manuals, energy labels, guarantee, return period, series, breadcrumb, colour/size options, images and rating. | Retail analysts call product/detail to get the full IKEA product record by item number or URL. | product_id, country, language, max_rotations |
| product/availability | Stock of up to 10 IKEA products in every store of a country (or one store): quantity in the store where IKEA publishes it, stock status, expected restock dates and quantities, the aisle and bin to pick it from, click & collect, and whether home delivery is available. | Pricing teams call product/availability to get stock of up to 10 IKEA products in every store of a country (or one store). | product_id, product_ids, store_id, country, language, ... |
| product/reviews | Customer reviews of one IKEA product, paged: title, text, star rating, sub-ratings (quality, value for money, assembly …), recommendation, verified purchase, helpful votes, IKEA's public reply and photos, plus the rating summary and distribution. Filter by star rating, verified purchases or reviews from other countries. | Marketplace operators call product/reviews to get customer reviews of one IKEA product, paged. | product_id, country, language, page, page_size, ... |
| stores | Every IKEA store in a country with its store id (used by product/availability), name, coordinates, type and opening date. | Catalog enrichment teams call stores to get every IKEA store in a country with its store id (used by product/availability), name, coordin…. | country, language, max_rotations |
| suggest | IKEA's search autocomplete for what a shopper has typed: suggested searches, matching categories and products. | Retail analysts call suggest to get iKEA's search autocomplete for what a shopper has typed. | query, country, language, max_rotations |
Call search from your stack
curl -X POST https://api.reefapi.com/ikea/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"sofa"}'import requests
r = requests.post(
"https://api.reefapi.com/ikea/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "sofa"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/ikea/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "sofa"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.ikea.search with {"query":"sofa"}.Who uses this API and why
- Price trackers follow IKEA prices in 50 countries with the regular price, the IKEA Family price and reductions stored separately, each with its end date.
- Furniture resellers and interior designers check store stock with quantities and restock dates before sending a client to a store.
- Marketplaces and planning tools pull measurements, package sizes and weights, materials and the articles in a combination to calculate shipping and fit.
- Retail analysts compare the same product's price across countries, with pack prices flagged so a 4-chair pack is never compared with a single chair.
Questions developers ask before integrating
Which price should I store - price or member_price?
Store both, and label them. price is what a shopper without IKEA Family pays online; member_price is the IKEA Family price and is null when IKEA runs none on that product. IKEA's own data puts the Family price where the price normally is - GÖRSNYGG in India reads 149, while the regular price is 299 - so a tracker that copies that number records the member price as the price. The API returns price 299 and member_price 149.
What is the difference between original_price, lowest_previous_price and in_store_offer?
original_price is the previous price of a running reduction, and price_type says which kind: new_lower_price (a permanent cut, POÄNG 69 from 80 GBP), time_restricted_offer (MALM 599 from 799 SAR, 10 September to 4 October) or discontinued (clearance while supply lasts). lowest_previous_price is the EU disclosure of the lowest price in the 30 days before the reduction (LISABO 349 PLN). in_store_offer is a price IKEA offers only in its stores - BILLY in the US is 79.00 online with an in-store IKEA Family price of 65.00 - and it never replaces price.
Why does a price sometimes cover more than one item?
Because IKEA prices some products per pack. price_basis tells you what the price buys: per_item, per_pack with pack_quantity (TEODORES chairs in Poland, 516 PLN for 4; glasses sold as 4, 6 or 8 packs) or per_quantity with quantity and unit for food sold by amount (a 0.5 kg jar). On IKEA's food range in Sweden, Germany and the UK the stated amount matched the product's own size on 303 of 309 products; the other 6 were two pickled herring jars priced on their 0.14 and 0.15 kg drained weight while the label says 250 g - both numbers are returned. No price per kg is invented.
Which countries and languages are covered?
Every IKEA country store on ikea.com: 50 countries across Europe, North and South America, the Middle East, Africa and Asia-Pacific, each in its own currency (USD, EUR, GBP, SEK, JPY, SAR, INR, CLP …). On 2026-09-15 a search and a product read succeeded in all 50 with the country's currency. Countries with several languages take a language parameter (Belgium nl, fr or en; Spain es, ca, eu, gl or en). IKEA stores that run on other websites - Türkiye, Greece, China, Iceland, Indonesia and a few more - are not included, and IKEA Ukraine publishes no products online, so it returns MARKET_UNAVAILABLE.
How accurate is store stock?
product/availability returns every store that carries the product, with the quantity IKEA publishes for that store, a stock status, expected restock dates and the aisle and bin to pick it from. Stores that do not stock the product are left out rather than shown as out of stock, and counted in units_not_in_range. If an item number is not sold in the country at all - the US BILLY number asked in Germany, where BILLY has its own number - it comes back in not_sold_here instead of looking 'out of stock everywhere'. On 2026-09-15, 20 of 20 stock reads across four countries succeeded.
Do item numbers work across countries?
Mostly, but not always: the same product can carry a different item number per market (the FADO lamp is 70096377 in the US and 80096372 elsewhere), which is why rows return item_no and item_no_global. Use an item number that a listing in the same country returned. A product URL from any ikea.com store works too and sets country and language by itself.
Do the filters and sorting really apply?
Yes. For sofas in Germany on 2026-09-15: 278 results unfiltered, 190 in beige (every row beige), 12 in the 0-199.99 EUR band. Price sorting was in order on every page checked, and page 2 never repeated page 1. The filter ids come back in filters_available with their counts; a filter a listing does not have is listed in filters_not_applied instead of being silently ignored.
What does IKEA NOT publish?
No EAN or GTIN barcode, no price history beyond the previous price of a running reduction, no delivery price (it depends on a postcode), no per-store prices, and no stock quantity for online delivery - only a status. The rating summary counts reviews from every country, while the review list is local by default, so they differ; products without reviews return rating null, never 0. Assembly documents were published on 62 of 70 sampled products and a guarantee on 3 of 70.
What is the IKEA API?
IKEA API is a ReefAPI endpoint group for ikea prices, stock and product specs in 50 countries, with the ikea family price kept separate. It returns live JSON through POST requests under /ikea/v1.
Is the IKEA API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. IKEA calls use the same shared credit balance as every other ReefAPI engine.
Do I need an IKEA login or account?
No login to IKEA is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the IKEA data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the IKEA API use?
IKEA actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call IKEA from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call ikea actions with the same key, credit pool and JSON envelope used by normal REST requests.