Naver Shopping Search API Response Structure: Distinguishing Ads from Regular Products

Vishu·2026년 5월 25일

Naver Data

목록 보기
1/1
post-thumbnail

네이버 쇼핑 검색 결과를 데이터로 다뤄본 사람이라면 한 번쯤 겪는 문제가 있다. 검색 결과 상단에 노출된 상품이 정말 인기 상품인지, 아니면 광고인지 응답만 봐서는 바로 알기 어렵다는 점이다.

이 글에서는 네이버 쇼핑 검색 API의 응답 구조를 뜯어보고, 광고 상품과 일반 상품을 코드로 구분하는 방법을 정리한다.


검색 API 호출 구조

네이버 쇼핑 검색 페이지는 내부적으로 다음 형태의 API를 호출한다.

GET https://search.shopping.naver.com/api/search/all
  ?sort=rel
  &pagingIndex=1
  &pagingSize=40
  &viewType=list
  &productSet=total
  &query=무선이어폰
  &minPrice=30000
  &maxPrice=200000

주요 파라미터 정리:

파라미터설명
sort정렬 기준: rel(연관도), price_asc, price_dsc, review, date
pagingIndex페이지 번호, 1부터 시작
pagingSize페이지당 상품 수, 통상 40
productSettotal, overseas, used
minPrice, maxPrice가격 필터

응답에서 주의할 필드

응답 JSON의 상품 리스트 각 항목에는 다음 키가 포함된다.

필드설명
nvMid네이버 쇼핑 내부 상품 ID
productTitle상품명
price표시 가격
mallName판매처 이름
productTypeSTORE(단일 스마트스토어 상품) 또는 CATALOG(복수 판매처 묶음)
adId광고 상품에만 존재하는 필드
lowPrice, highPrice카탈로그 상품의 최저, 최고가
reviewCount, scoreInfo리뷰 수와 평점

광고 여부를 구분하는 가장 확실한 방법은 adId 필드의 존재 여부다. 광고 상품은 UI에서도 일반 상품과 거의 동일하게 표시되기 때문에 응답 키를 기준으로 판단해야 한다.


광고와 일반 상품 분리 코드

Syphoon의 Naver Scraper API를 사용하면 세션 관리나 차단 없이 동일한 응답을 가져올 수 있다. 엔드포인트는 단일 POST로 동작한다.

import requests

def fetch_naver_search(query, page=1):
    naver_url = (
        "https://search.shopping.naver.com/api/search/all"
        f"?sort=rel&pagingIndex={page}&pagingSize=40"
        f"&viewType=list&productSet=total&query={query}"
    )

    payload = {
        "key": "YOUR_SYPHOON_API_KEY",
        "url": naver_url,
        "method": "GET"
    }

    response = requests.post(
        "https://naverapi.syphoon.com",
        json=payload
    )
    return response.json()


def split_ads_and_organic(data):
    products = data.get("shoppingResult", {}).get("products", [])
    ads = [p for p in products if p.get("adId")]
    organic = [p for p in products if not p.get("adId")]
    return ads, organic


data = fetch_naver_search("무선이어폰")
ads, organic = split_ads_and_organic(data)

print(f"광고 상품: {len(ads)}개")
print(f"일반 상품: {len(organic)}개")

카탈로그와 단일 상품의 차이

productTypeCATALOG이면 여러 판매처가 동일 상품을 판매하는 묶음이다. 이 경우 lowPricehighPrice로 가격대를 파악하고, 판매처별 상세 데이터는 별도로 수집해야 한다.

productTypeSTORE이면 특정 스마트스토어의 단일 상품이다.

가격 비교나 순위 추적을 목적으로 한다면 이 둘을 처음부터 분리해서 처리하는 것이 데이터 일관성을 유지하는 핵심이다.


정리

네이버 쇼핑 검색 응답을 단순한 상품 리스트로 취급하면 광고 노이즈가 순위 분석에 섞인다. adId로 광고를 걸러내고, productType으로 카탈로그와 단일 상품을 구분하는 것이 데이터 수집의 출발점이다.

이 글에서 사용한 API는 Syphoon의 Naver Scraper를 통해 접근했다. 문서와 API 키 발급은 syphoon.com/dedicated/naver에서 확인할 수 있다.

profile
Web Data Infrastructure

0개의 댓글