API

다나와 API: 최저가와 쇼핑몰별 가격을 JSON으로

다나와에서 로그인 없이 볼 수 있는 상품 정보, 최저가, 쇼핑몰별 판매가, 상세 스펙, 가격 추이를 그대로 JSON으로 가져옵니다. 다나와에 입점한 판매자를 위한 연동이 아니라, 구매자 화면에 보이는 가격비교 데이터입니다. 검색어는 한국어와 영어 모두 쓸 수 있고, 가격은 모두 원화(KRW)로 각 쇼핑몰이 다나와에 표시한 금액 그대로입니다.

엔드포인트

endpoint무엇이 반환되는가필수
search키워드 검색. 다나와 가격비교 상품(`row_type: product`)과 다나와가 색인한 쇼핑몰 상품(`row_type: mall_item`)이 함께 나옵니다. 색상·용량·요금제 같은 변형은 각자 product_id와 가격을 가진 `variants[]`로 들어 있습니다. 카테고리, 제조사, 가격대, 검색 범위(전체·가격비교상품·검색상품), 정렬을 지정할 수 있고 페이지당 40개입니다.query
product상품 한 건: 제목, 제조사, 카테고리, 최저가(카드), 현금최저가, 배송비 포함 최저가, 출시가, 평점과 리뷰 수, 판매처 수, 상위 쇼핑몰 가격. `product_id` 또는 상품 URL로 조회합니다.모두 선택
offers다나와에 올라온 모든 판매처를 오픈마켓, 백화점/홈쇼핑/종합몰 등 다나와의 그룹 구분 그대로 돌려줍니다. 항목은 쇼핑몰, 판매가, 현금가 여부, 배송비, 무이자 할부, 빠른배송, 쿠폰, 구매 링크입니다.모두 선택
specs상품 상세 스펙 전체를 다나와 원문 표현 그대로 그룹·항목·값 단위로 돌려줍니다.모두 선택
price_history다나와 가격추이 그래프의 데이터: 최근 3개월은 주 단위, 최근 24개월은 월 단위 최저가, 그리고 그 기간의 최저점(`all_time_lowest`).모두 선택

호출마다 크레딧이 차감됩니다. 실패하거나 차단된 호출은 무료입니다.

동작하는 예제

다나와 최저가는 카드 결제 기준입니다. 아래 990 PRO 2TB는 최저가가 768,990원인데 현금최저가는 657,000원으로, 11만 원 넘게 낮았습니다. 두 값을 한 필드에 섞으면 비교가 어긋나기 때문에 `lowest_price`와 `cash_lowest_price`를 따로 돌려주고, 쇼핑몰마다 `payment`에 card / cash를 표시합니다.

요청
curl -X POST https://api.reefapi.com/danawa/v1/product \
  -H "x-api-key: 발급받은_키" \
  -H "content-type: application/json" \
  -d '{"product_id": "18297722"}'
응답 (요약)
{
  "ok": true,
  "data": {
    "product": {
      "product_id": "18297722",
      "title": "삼성전자 990 PRO M.2 NVMe (2TB)",
      "maker": "삼성전자",
      "category_path": ["PC 주요 부품", "SSD", "내장형 SSD"],
      "lowest_price": 768990,
      "cash_lowest_price": 657000,
      "lowest_price_with_shipping": 768990,
      "launch_price": null,
      "currency": "KRW",
      "offer_count": 236,
      "rating": 4.8,
      "review_count": 769,
      "mall_price_summary": [
        { "mall": "옥션", "price": 768990, "payment": "card", "is_lowest": true, "shipping_text": "무료배송", "interest_free_text": "최대 24개월" },
        ...
        { "mall": "다올씨앤씨", "price": 657000, "payment": "cash", "is_lowest": false, "shipping_text": "무료배송", "interest_free_text": null }
      ],
      "status": "on_sale"
    }
  },
  "meta": { "record_count": 1, "cache_hit": false, "mode": "live" }
}

다나와 크롤링, 직접 하기 전에

다나와의 판매처 목록과 스펙은 상품 페이지가 뒤에서 별도 요청으로 불러옵니다. 이 요청에 카테고리 코드가 빠지면 오류 없이 데이터를 덜 보냅니다. 현금가 그룹이 통째로 빠진 판매처 목록(29행 대신 28행)과 7.6KB짜리 빈 스펙이 실제로 측정됐고, 크롤러 입장에서는 둘 다 정상 응답처럼 보입니다. 그래서 이 엔진은 상품 페이지에서 코드를 먼저 읽고 나서 목록을 요청합니다.

검색은 50페이지가 끝입니다. 51페이지를 요청하면 50페이지와 바이트 단위까지 똑같은 응답이 돌아오기 때문에, 페이지 번호만 올리는 크롤러는 같은 40개를 계속 쌓습니다. 여기서는 50을 넘는 페이지를 INVALID_PARAM으로 막고, 실제로 닿을 수 있는 개수를 `reachable_rows`로 알려 줍니다.

몇몇 상품 가격을 한 번 뽑아 보는 용도라면 직접 짠 스크립트면 됩니다. 최저가 알림이나 매일 도는 가격 모니터링이라면 시간은 코드보다 이런 예외를 찾아내는 데 들어갑니다.

제한과 솔직한 메모

  • 다나와 공식 API가 아니고, 다나와와 제휴하고 있지도 않습니다.
  • 카드할인가는 로그인하지 않은 화면에 나오지 않아 제공하지 않습니다.
  • 가격 추이는 주간·월간 최저가입니다. 마지막 주간 값이 오늘 최저가와 다를 수 있습니다. 예: 위 SSD는 10월 20일 주 687,000원, 조회 시점 최저가 768,990원.
  • 검색은 검색어당 50페이지(2,000개)까지입니다. 그 이상은 카테고리나 가격대로 좁혀야 합니다.
  • 리뷰 수가 '999+'로만 표시되는 상품은 `review_count`가 null이고, 화면 문구는 `review_count_text`에 들어 있습니다.
  • 리뷰 본문, 상품 Q&A, 카테고리별 인기 순위는 이 엔진에서 제공하지 않습니다.
  • 응답을 캐시해 두지 않으므로 가격은 늘 호출한 순간의 다나와 기준입니다.