이케아 API: 한국 이케아 가격과 매장 재고를 JSON으로
이케아 코리아 온라인 스토어(ikea.com/kr/ko)에서 로그인 없이 볼 수 있는 제품 정보, 원화 가격, 매장별 재고를 JSON으로 돌려줍니다. 제품명은 'BILLY 빌리', 'KALLAX 칼락스'처럼 한국 사이트에 적힌 그대로이고, 치수와 소재 설명도 한국어로 옵니다. 이케아에 납품하는 공급업체나 이케아 비즈니스 주문을 위한 연동은 아닙니다. 주문, 결제, 배송·조립 서비스 예약은 할 수 없고, 구매자 화면에 공개된 정보를 읽기만 합니다. 한국 매장 데이터를 받으려면 요청마다 `"country": "kr"`을 넣어야 합니다. 이 값이 없으면 미국 매장이 기본으로 선택되어 달러 가격과 영어 제품명이 돌아옵니다.
엔드포인트
| endpoint | 무엇이 반환되는가 | 필수 |
|---|---|---|
| search | 검색어는 한글이든 영문이든 되고, 제품명(BILLY)이나 제품 번호를 넣어도 됩니다. 행마다 한국 제품 번호와 글로벌 번호, 제품명, 원화 가격, IKEA Family 가격, 가격 인하·기간 한정·단종 할인 전 가격과 적용 기간, 평점과 리뷰 수, 색상, 카테고리 경로, 온라인 구매 가능 여부가 들어 있습니다. 가격순·평점순·신상품순·크기순 정렬, 이케아 자체 필터(색상, 가격대, 크기, 소재, 시리즈, 하위 카테고리), 신제품·마지막 기회·베스트셀러만 보기를 지원하고 페이지당 최대 48개입니다. | query |
| category | 카테고리 하나(예: 책장 `10382`)의 전체 제품을 페이지 단위로. 반환 형식과 정렬·필터 옵션은 search와 동일합니다. | category_id |
| categories | 이케아 카테고리 구조를 한 단계씩 엽니다. 카테고리마다 이름, 제품 수, 바로 아래 하위 카테고리의 키가 오고, 이 키를 category 엔드포인트의 `category_id`에 그대로 넣으면 됩니다. | 모두 선택 |
| product/detail | 제품 번호나 제품 URL로 제품 전체를 가져옵니다. 정가·IKEA Family 가격·이전 가격·매장 전용 가격을 각각 따로, 설명, 디자이너, 치수, 포장 상자별 크기와 무게, 소재와 관리 방법, 안전 정보, 조립 설명서와 사용 설명서 PDF, 보증, 반품 기간, 시리즈, 색상·크기 옵션, 이미지, 평점. | product_id |
| product/availability | 제품 최대 10개를 한 번에, 한국 매장별 재고: 수량, 재고 상태, 입고 예정일과 수량, 셀프서브 구역의 통로·칸 번호, 클릭앤컬렉트와 배송 가능 여부. | 모두 선택 |
| product/reviews | 제품 리뷰를 페이지 단위로: 제목, 본문, 별점, 품질·가성비·조립 난이도 같은 세부 평가, 추천 여부, 구매 인증, 도움이 됨 수, 이케아의 답글, 사진. 별점, 구매 인증, 다른 나라 리뷰로 거를 수 있습니다. | product_id |
| stores | 한국 이케아 매장 목록: 재고 조회에 쓰는 매장 id, 영문명과 한글 표시명(광명점, 고양점 등), 좌표, 매장 유형, 개점일. | 모두 선택 |
| suggest | 입력 중인 검색어에 대한 이케아 자동완성: 추천 검색어, 카테고리, 제품. | query |
호출마다 크레딧이 차감됩니다. 실패하거나 차단된 호출은 무료입니다.
동작하는 예제
BILLY 빌리 책장(80x28x202 cm)의 한국 제품 번호는 005.220.47입니다. 같은 제품의 글로벌 번호 205.220.46(`item_no_global`)을 한국 매장에 넣으면 NOT_FOUND가 납니다. 이번 '책장' 검색 24개 중 23개가 한국 번호와 글로벌 번호가 달랐으니, 재고와 가격은 한국 검색 결과에서 받은 `item_no`로 조회하세요. 수량은 매장마다 따로 오고(광명점 849개, 동부산점 14개), 셀프서브 구역에 있는 제품이면 통로와 칸 번호가 함께 옵니다. 광명점처럼 창고에 있는 경우는 `CONTACT_STAFF`로 표시됩니다.
curl -X POST https://api.reefapi.com/ikea/v1/product/availability \
-H "x-api-key: 발급받은_API_키" \
-H "content-type: application/json" \
-d '{"product_ids": ["00522047", "20351884"], "country": "kr"}'{
"ok": true,
"data": {
"items": [
{
"item_no": "00522047",
"item_type": "ART",
"online": {
"home_delivery_available": true,
"click_collect_available": true,
"home_delivery_status": "high_in_stock",
"updated_at": "2025-09-05T07:16:05.828Z",
...
},
"stores": [
{
"store_id": "602",
"store_name": "IKEA Busan - Dongbusan",
"quantity": 14,
"status": "medium_in_stock",
"restocks": null,
"sales_locations": [
{ "type": "AISLE_AND_BIN", "division": "SELF_SERVE", "aisle": "32", "bin": "17" },
...
],
"updated_at": "2026-10-26T10:19:39.000Z"
},
...
{
"store_id": "373",
"store_name": "IKEA Seoul - Gwangmyeong",
"quantity": 849,
"status": "high_in_stock",
"sales_locations": [
{ "type": "CONTACT_STAFF", "division": "WAREHOUSE", "aisle": null, "bin": null },
...
],
"updated_at": "2026-10-26T10:54:54.000Z"
}
],
"store_count": 5,
"in_stock_store_count": 5,
"sold_here": true
},
{ "item_no": "20351884", ... }
],
"not_sold_here": [],
"not_found": [],
"count": 2,
"country": "kr"
},
"meta": { "record_count": 2, "charged_credits": 1, "cache_hit": false, "mode": "live" }
}이케아 스크래퍼가 깨지는 지점: 제품 번호, 페이지 구조, 리뷰 수
가장 흔한 실수는 제품 번호입니다. 같은 BILLY 책장이라도 나라마다 번호가 다를 수 있는데, 다른 나라 번호로 재고를 물으면 이케아는 오류 대신 '전 매장 재고 없음'으로 읽히는 응답을 줍니다. 저희가 미국 BILLY 번호(20522046)로 독일 재고를 조회했을 때 응답에 나온 70곳이 모두 판매 범위 밖으로 표시됐지만, 독일은 같은 책장을 다른 번호(00263850)로 54개 매장에서 팔고 있었습니다. 이 API는 이런 번호를 `not_sold_here`로 따로 돌려주고, 그 번호 하나만 물었다면 NOT_FOUND를 냅니다.
페이지 구조도 예고 없이 바뀝니다. 2026년 10월 이케아가 제품 페이지에 데이터를 싣는 형식을 바꾸자, 저희 `product/detail`이 모든 나라의 모든 제품에 NOT_FOUND를 돌려줬습니다. 운영 환경에서 마지막으로 정상 응답한 날은 10월 5일이었고, 10월 18일에 새 형식을 읽도록 고쳤습니다. 그동안 제품 페이지 자체는 HTTP 200으로 잘 열렸기 때문에, 상태 코드만 확인하는 감시로는 잡히지 않는 고장이었습니다.
리뷰 수는 두 가지가 섞여 있습니다. 평점 요약의 리뷰 수는 모든 나라 리뷰를 합친 값이고, 리뷰 목록은 기본적으로 그 나라에서 작성된 리뷰만 보여 줍니다. KALLAX 칼락스 선반유닛의 요약은 8,209개(`total_reviews_all_markets`)였지만 한국 목록에는 한국어 리뷰만 나왔고, 처음 5개 중 2개는 제품 번호가 다른 제품(10346925, 70362917)에 달린 리뷰였습니다(`reviewed_item_no`). 요약 숫자를 한국 리뷰 수로 쓰면 크게 부풀려집니다.
한국 이케아 가격이나 재고를 매일 추적한다면 제품 번호 문제를 특히 조심해야 합니다. 직접 만든 수집기는 잘못된 번호를 '전 매장 품절'로 차곡차곡 기록할 뿐이고, 그것이 진짜 품절인지 번호 실수인지는 몇 주가 지난 데이터만 봐서는 가려내기 어렵습니다.
제한과 솔직한 메모
- 이케아(Inter IKEA, 이케아 코리아)가 만든 API가 아니며, 이케아와 계약하거나 제휴한 관계도 아닙니다.
- `stores`는 8개 매장을 돌려주지만 재고 응답에는 광명·고양·기흥·동부산·강동 5개 매장만 들어 있었습니다. 2026년 10월 26일 측정에서 롯데 광주점, 신세계백화점 대구점, 송도(Songdo Hyundai Premium)의 소형 매장 3곳은 두 제품 모두 재고 목록에 없었습니다.
- 재고 상태(`status`)에는 high, low, out 외에 `medium_in_stock`도 옵니다(동부산점 BILLY, 14개).
- 온라인 배송 상태(`online`)의 갱신 시각은 오래된 경우가 있습니다. BILLY는 2025년 9월 5일, KALLAX는 2025년 6월 2일이었습니다. 당일 시각이 찍히는 매장 재고와 같은 기준으로 비교하지 마세요.
- 이케아가 보여 주는 과거 가격은 지금 진행 중인 인하의 '이전 가격' 하나뿐입니다(이번 '책장' 검색에서는 BILLY/OXBERG 조합 149,900원 → 139,900원 한 건). 그보다 앞선 가격은 어디에도 없으므로, 가격인상이나 인하를 추적하려면 첫 호출부터 결과를 저장해 두어야 합니다.
- 배송비와 배송 일정은 우편번호에 따라 달라 제공하지 않습니다. 가격은 나라 단위 온라인 가격 하나이고, 매장별 가격은 없습니다. EAN 같은 바코드도 이케아가 공개하지 않아 들어 있지 않습니다.
- `product/detail`은 2크레딧, 나머지는 호출당 1크레딧입니다. 재고 조회는 제품 10개까지 한 번에 1크레딧이므로, 여러 제품을 볼 때는 `product_ids`로 묶는 편이 쌉니다.