Shopping Catalog Search
curl --request GET \
--url https://scrapebadger.com/v1/naver/shopping/search-catalog \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://scrapebadger.com/v1/naver/shopping/search-catalog"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://scrapebadger.com/v1/naver/shopping/search-catalog', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/naver/shopping/search-catalog",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/naver/shopping/search-catalog"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/naver/shopping/search-catalog")
.header("X-API-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/naver/shopping/search-catalog")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"query": "<string>",
"sort": "<string>",
"page": 123,
"page_size": 123,
"total": 123,
"cursor": 123,
"has_more": true,
"result_count": 123,
"preview_only": true,
"products": [
{
"rank": 123,
"nv_mid": "<string>",
"title": "<string>",
"price": 123,
"discounted_price": 123,
"discount_rate": 123,
"image_url": "<string>",
"product_url": "<string>",
"channel_product_id": "<string>",
"mall_name": "<string>",
"mall_id": "<string>",
"mall_seq": "<string>",
"review_score": 123,
"review_count": 123,
"delivery_fee": 123,
"category_path": [
"<string>"
],
"leaf_category_id": "<string>",
"is_ad": true
}
],
"pages": [
{
"page": 123,
"result_count": 123,
"repeated_count": 123
}
],
"source_url": "<string>"
}Shopping Search & Catalog
Shopping Catalog Search
Full-catalog Naver Shopping search — deep, paginated product results (pages 1–5) with sort control.
GET
/
v1
/
naver
/
shopping
/
search-catalog
Shopping Catalog Search
curl --request GET \
--url https://scrapebadger.com/v1/naver/shopping/search-catalog \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://scrapebadger.com/v1/naver/shopping/search-catalog"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://scrapebadger.com/v1/naver/shopping/search-catalog', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/naver/shopping/search-catalog",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/naver/shopping/search-catalog"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/naver/shopping/search-catalog")
.header("X-API-Key", "<x-api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/naver/shopping/search-catalog")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"query": "<string>",
"sort": "<string>",
"page": 123,
"page_size": 123,
"total": 123,
"cursor": 123,
"has_more": true,
"result_count": 123,
"preview_only": true,
"products": [
{
"rank": 123,
"nv_mid": "<string>",
"title": "<string>",
"price": 123,
"discounted_price": 123,
"discount_rate": 123,
"image_url": "<string>",
"product_url": "<string>",
"channel_product_id": "<string>",
"mall_name": "<string>",
"mall_id": "<string>",
"mall_seq": "<string>",
"review_score": 123,
"review_count": 123,
"delivery_fee": 123,
"category_path": [
"<string>"
],
"leaf_category_id": "<string>",
"is_ad": true
}
],
"pages": [
{
"page": 123,
"result_count": 123,
"repeated_count": 123
}
],
"source_url": "<string>"
}Run a full-catalog Naver Shopping search against
search.shopping.naver.com. Unlike the finder preview, this is the deep catalog feed with sort control and pagination through pages 1–5. Each product carries its catalogue identity, price, review stats, delivery fee and category path.
Credits: 5
This endpoint clears Naver’s shopping captcha in a live browser session, so it is the heaviest Naver call and a page can take up to ~90 seconds. Pages are capped at 5; sorted lists are capped upstream at ~120 items. Sponsored rows stay in
products flagged is_ad.Authorization
string
required
Your ScrapeBadger API key.
Query Parameters
string
required
Search keywords (1–200 chars).
string
default:"RECOMMEND"
RECOMMEND, LOW_PRICE, HIGH_PRICE, PURCHASE, REVIEW or RECENT.integer
default:"1"
1-based page,
1–5. Page 1 is the SSR page; pages 2+ use the catalog XHR.Response
string
string
integer
integer
integer
Total catalog matches, when Naver reports it.
integer
Cursor for the next page, when present.
boolean
Whether another page is available (within the 5-page cap).
integer
boolean
Always
false — this is the full catalog feed.Product[]
PageSummary[]
string
Example
curl "https://scrapebadger.com/v1/naver/shopping/search-catalog?query=로봇청소기&sort=LOW_PRICE&page=1" \
-H "X-API-Key: YOUR_API_KEY"
const res = await fetch(
"https://scrapebadger.com/v1/naver/shopping/search-catalog?" +
new URLSearchParams({"query": "로봇청소기", "sort": "LOW_PRICE", "page": "1"}),
{ headers: { "X-API-Key": process.env.SCRAPEBADGER_API_KEY } },
);
const data = await res.json();
import requests
res = requests.get(
"https://scrapebadger.com/v1/naver/shopping/search-catalog",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"query": "로봇청소기", "sort": "LOW_PRICE", "page": "1"},
)
data = res.json()
Response
{
"query": "로봇청소기",
"sort": "LOW_PRICE",
"page": 1,
"page_size": 40,
"total": 1200,
"cursor": 41,
"has_more": true,
"result_count": 40,
"preview_only": false,
"products": [
{
"rank": 1,
"nv_mid": "82613999001",
"title": "로보락 S8 로봇청소기",
"price": 899000,
"discounted_price": 799000,
"discount_rate": 11,
"image_url": "https://shopping-phinf.example.net/82613999001.jpg",
"product_url": "https://shopping.naver.com/catalog/82613999001",
"channel_product_id": "7009999001",
"mall_name": "로보락 공식스토어",
"mall_id": "roborock",
"mall_seq": "55123",
"review_score": 4.7,
"review_count": 8842,
"delivery_fee": 0,
"category_path": [
"디지털/가전",
"생활가전",
"청소기"
],
"leaf_category_id": "50002100",
"is_ad": false
}
],
"pages": [
{
"page": 1,
"result_count": 40,
"repeated_count": 0
}
],
"source_url": "https://search.shopping.naver.com/ns/search?query=로봇청소기"
}
Errors
| Status | Meaning |
|---|---|
422 | Naver served a challenge instead of content — not billed. Retry; it succeeds. |
502 | Unexpected upstream failure — not billed. |

