IKEA API: ceny i dostępność produktów z ikea.com/pl w JSON
To, co ikea.com/pl pokazuje każdemu klientowi — nazwę i wymiary mebla, cenę w złotych, cenę dla członków IKEA Family, obniżkę razem z ceną sprzed obniżki, oceny i liczbę sztuk w poszczególnych sklepach — dostajesz tu jako JSON. Do składania zamówień ani do współpracy z IKEA jako dostawca to się nie nada: API niczego nie kupuje, tylko odczytuje publiczny katalog i stany magazynowe. Polski sklep wybierasz parametrem `"country": "pl"` i wtedy nazwy oraz opisy przychodzą po polsku; bez niego odpowiada sklep amerykański, z cenami w dolarach.
Endpointy
| endpoint | Co zwraca | Wymagane |
|---|---|---|
| search | Szukasz tak jak na stronie: słowem („szafa”), nazwą serii (BRIMNES, PAX) albo numerem artykułu. W wierszu jest cena i jej typ (zwykła, nowa niższa cena, oferta czasowa, taniej stacjonarnie…), cena sprzed obniżki, cena IKEA Family, ocena, kolory i ścieżka kategorii. Do dyspozycji są sortowania i filtry IKEA: kolor, przedział cenowy, rozmiar, materiał, seria. | query |
| category | Cała zawartość jednej kategorii (np. Szafy) strona po stronie; wiersze, sortowanie i filtry jak w search. | category_id |
| categories | Struktura działów IKEA: każde wywołanie otwiera jeden poziom i podaje, ile produktów ma każda podkategoria. Klucz kategorii przekazujesz potem do category. | wszystkie opcjonalne |
| product/detail | Karta produktu po numerze artykułu lub adresie: opis i projektant, wymiary, lista paczek z wymiarami i wagą każdej, materiały, instrukcje montażu, liczba dni na zwrot, warianty kolorów i rozmiarów oraz ceny rozdzielone tak jak w wyszukiwaniu, łącznie z najniższą ceną z 30 dni przed obniżką. | product_id |
| product/availability | Do 10 numerów artykułów w jednym zapytaniu. Dla każdego sklepu IKEA w Polsce: liczba sztuk i status, miejsce w strefie samoobsługowej (alejka, regał), przewidywane dostawy z datą i ilością, a do tego informacja, czy działa Click & Collect i dostawa do domu. | wszystkie opcjonalne |
| product/reviews | Opinie o produkcie, domyślnie po 20 na stronę: tytuł, treść, gwiazdki, oceny szczegółowe (np. jakość, montaż), znacznik zweryfikowanego zakupu i odpowiedź IKEA, jeśli była. Bez parametru `scope` tylko opinie z Polski. | product_id |
| stores | Sklepy IKEA w Polsce: id (żeby zawęzić product/availability do jednego sklepu), nazwa, współrzędne i data otwarcia. | wszystkie opcjonalne |
| suggest | To, co IKEA podpowiada podczas wpisywania: gotowe frazy, pasujące kategorie i produkty z oceną. | query |
Każde wywołanie jest rozliczane w kredytach. Nieudane i zablokowane wywołania są darmowe.
Działający przykład
Trzy wiersze mają identyczny tytuł „TEODORES Krzesło, biały”, a ceny 129, 258 i 516 zł. To nie trzy różne krzesła, tylko pojedyncza sztuka i dwa komplety: IKEA dopisuje przy cenie „2 szt.” albo „4 szt.”, co tutaj trafia do `price_unit`, `price_basis` i `pack_quantity`. Komplet ma też własną ocenę: 5,0 z jednej opinii przy czterech krzesłach, 4,9 z 66 opinii przy pojedynczym. Jeśli liczysz cenę za sztukę, podziel `price` przez `pack_quantity` — wyjdzie wszędzie 129 zł.
curl -X POST https://api.reefapi.com/ikea/v1/search \
-H "x-api-key: TWOJ_KLUCZ" \
-H "content-type: application/json" \
-d '{"query": "teodores", "country": "pl", "page_size": 10}'{
"ok": true,
"data": {
"results": [
{
"product_id": "90350937",
"item_type": "ART",
"title": "TEODORES Krzesło, biały",
"url": "https://www.ikea.com/pl/pl/p/teodores-krzeslo-bialy-90350937/",
"price": 129,
"currency": "PLN",
"price_type": "regular",
"member_price": null,
"price_unit": null,
"price_basis": "per_item",
"pack_quantity": null,
"rating": 4.9,
"rating_count": 66
},
{
"product_id": "s19399839",
"item_type": "SPR",
"title": "TEODORES Krzesło, biały",
"price": 516,
"currency": "PLN",
"price_type": "regular",
"price_unit": "4 szt.",
"price_basis": "per_pack",
"pack_quantity": 4,
"rating": 5,
"rating_count": 1
},
{
"product_id": "s99399835",
"item_type": "SPR",
"title": "TEODORES Krzesło, biały",
"price": 258,
"currency": "PLN",
"price_unit": "2 szt.",
"price_basis": "per_pack",
"pack_quantity": 2,
"rating": 4.9,
"rating_count": 12
},
...
],
"count": 5,
"total_results": 5,
"country": "pl",
"language": "pl",
"currency": "PLN"
},
"meta": { "record_count": 5, "country": "pl", "language": "pl", "cache_hit": false, "mode": "live" }
}Scraper IKEA: ceny, które znaczą coś innego, niż wyglądają
Liczba przy produkcie nie mówi, za ile sztuk płacisz. Obok ceny IKEA wypisuje jednostkę w kilku postaciach: „4 szt.” to komplet, „0,4 kg” to zawartość opakowania z działu spożywczego, a samo „kg” przy torebce ważącej kilogram oznacza cenę całego opakowania z 1 kg zawartości. Przy budowie silnika we wrześniu 2026 sami najpierw wzięliśmy samo „kg” za cenę za kilogram; wyglądało to poprawnie tylko dlatego, że torebka ważyła równo 1 kg. Poprawiliśmy to po pomiarze, zanim powstał pierwszy test.
Filtry to druga pułapka. Wyszukiwarka IKEA nie protestuje, gdy dostanie filtr w formacie, którego nie rozumie: dziesięć wiarygodnie wyglądających zapisów filtra zwróciło te same 278 niefiltrowanych wierszy, bez jednego błędu. Prawidłowy format odczytaliśmy z kodu samej strony. Jeśli IKEA nie zna nazwy filtra, odpowiedź wymienia go w `filters_not_applied`, zamiast udawać, że zadziałał.
Trzecia: numer produktu, którego już nie ma, nie zwraca 404. IKEA przekierowuje wtedy na stronę główną katalogu z kodem 200, więc skrypt dostaje poprawnie wyglądającą stronę bez produktu. Tutaj taki numer kończy się błędem NOT_FOUND.
Ceny z jednej kategorii od czasu do czasu ściągniesz własnym skryptem. Kiedy jednak porównujesz je tydzień po tygodniu, musisz mieć pewność, że 516 zł to wciąż komplet czterech krzeseł, a nie jedno.
Ograniczenia i uczciwe uwagi
- IKEA tego API nie udostępnia ani nie wspiera; nie łączy nas z IKEA żadna umowa.
- `price` to cena w sklepie internetowym. Promocje tylko stacjonarne IKEA podaje jako tekst, bez kwoty: szafa LASTARE 120x62x201 kosztowała online 1015 zł, a obok było jedynie „Do 50% taniej na wybrane produkty stacjonarnie” (od 1.09 do 31.12.2026). Ten tekst jest w `in_store_offer`, ceny w sklepie nie wyliczamy.
- Cena IKEA Family trafia do `member_price` tylko wtedy, gdy IKEA ją publikuje. W 48 wynikach dla „szafa” nie było żadnej, były za to 3 nowe niższe ceny (np. GULLABERG 1499 zł zamiast 1799 zł) z najniższą ceną z 30 dni przed obniżką w `lowest_previous_price`.
- Kosztu dostawy API nie zwraca, bo IKEA liczy go dopiero dla konkretnego kodu pocztowego. Usług montażu też tu nie ma, tak samo jak kodów EAN.
- Średnia ocena i liczba opinii przy produkcie są liczone ze wszystkich krajów, natomiast lista w product/reviews to domyślnie tylko Polska; opinie z innych rynków daje `"scope": "other_markets"`.
- Przedział cenowy ustawia się filtrem IKEA `f-price-buckets` w `filters`. `min_price` i `max_price` są przeznaczone tylko dla IKEA Türkiye i na wynik w Polsce nie wpływają.
- Jeden produkt może mieć w sklepie kilka miejsc odbioru. Szafa BRIMNES 117 cm to 3 paczki (29,5 kg, 29,5 kg i 24,8 kg); product/availability podał dla niej w Krakowie i Gdańsku po trzy pozycje (alejka i regał), w Poznaniu pięć, w Szczecinie jedną.
- Odpowiedzi nie są u nas przechowywane: ceny i stany pochodzą z chwili wywołania (`cache_hit: false` we wszystkich naszych zapytaniach).