API

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

endpointCo zwracaWymagane
searchSzukasz 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
categoryCała zawartość jednej kategorii (np. Szafy) strona po stronie; wiersze, sortowanie i filtry jak w search.category_id
categoriesStruktura 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/detailKarta 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/availabilityDo 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/reviewsOpinie 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
storesSklepy IKEA w Polsce: id (żeby zawęzić product/availability do jednego sklepu), nazwa, współrzędne i data otwarcia.wszystkie opcjonalne
suggestTo, 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ł.

Żądanie
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}'
Odpowiedź (skrócona)
{
  "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).