# Naver Shopping Search Scraper: Ranks, Ads, Sales (`kyungminlee/naver-shopping-search-scraper`) Actor

Get the top 150 Naver Shopping products for any Korean keyword in Naver's own order, no login or browser. Each row: rank, product ID, title, price, store, ad flag, purchase and wishlist counts, rating, reviews, full category path, image and URL. Unofficial. JSON/CSV/API.

- **URL**: https://apify.com/kyungminlee/naver-shopping-search-scraper.md
- **Developed by:** [Kyungmin Lee](https://apify.com/kyungminlee) (community)
- **Categories:** E-commerce, Marketing, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Naver Shopping Search Scraper do?

**Naver Shopping Search Scraper** returns the products that Naver Shopping (네이버 쇼핑) shows for a keyword: the top **150 products per keyword**, in Naver's own relevance order. You give it a list of Korean keywords such as `무선 이어폰` or `캠핑 의자`; it gives you one flat row per product with its **rank**, **product ID**, **title**, **price**, **store**, an **ad flag**, **purchase count**, **wishlist (찜) count**, **rating and review count**, Naver's **category IDs**, image and URL.

It reads the same public data a logged-out visitor sees in the shopping block of Naver search. No Naver account, cookies, API key or browser is needed, and a keyword usually takes a few seconds.

This is an **unofficial** tool. It is not affiliated with, endorsed by or connected to NAVER Corp.

### Why use Naver Shopping Search Scraper?

- **Rank tracking:** see where your product, or a competitor's, sits for the keywords that matter, and schedule the run daily to follow changes.
- **Market research:** which stores, brands, categories and price points dominate a Korean product keyword, and how many products Naver has for it in total.
- **Ad visibility:** optionally include sponsored products and see which listings are paid (`isAd`).
- **Demand signals:** purchase counts, wishlist counts, ratings and review counts as numbers, ready for a spreadsheet.
- **Catalog vs. store listings:** know which results are Naver price-comparison catalogs (with seller counts) and which are single SmartStore or brand-store products.

Text such as titles, store names and product attributes stays in the original Korean; all field names are English and numbers are real numbers.

### How to scrape Naver Shopping search results

1. Click **Try for free**.
2. Enter one or more keywords, one per line (Korean works as-is).
3. Choose how many products you want per keyword (up to 150).
4. Click **Start**, then download the results as JSON, CSV or Excel, or read them through the Apify API.

### Input

```json
{
  "keywords": ["무선 이어폰", "캠핑 의자"],
  "maxProductsPerKeyword": 150,
  "includeAds": false,
  "fastDeliveryOnly": false,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

- `keywords`: search keywords exactly as you would type them into Naver. A Naver search URL containing `query=` also works.
- `maxProductsPerKeyword`: 1 to 150. The shopping block of Naver search returns at most 150 products per keyword, so 150 is the maximum.
- `includeAds`: also return the sponsored products Naver mixes into the list (flagged `isAd: true`). Ads share the same 150 slots, and in our tests they filled about 40-45% of them, so fewer organic products come back.
- `fastDeliveryOnly`: only products with Naver's fast-delivery badge.
- `proxyConfiguration`: the Apify datacenter proxy is on by default. If Naver slows down one IP, the Actor waits and switches to a fresh one.

### Output

One dataset item per product:

```json
{
  "keyword": "캠핑의자",
  "rank": 2,
  "naverRank": 1,
  "productId": "54486659161",
  "title": "로티 로티캠프 접이식 캠핑의자 에코 로우체어 M",
  "price": 34010,
  "currency": "KRW",
  "mallName": null,
  "sellerCount": 22,
  "isAd": false,
  "cardType": "catalog",
  "rating": 4.86,
  "reviewCount": 7594,
  "purchaseCount": null,
  "wishlistCount": 243,
  "categoryId": "50009421",
  "categoryIds": ["50000007", "50000028", "50009500", "50009421"],
  "attributes": [{ "name": "의자유형", "value": "접이식의자" }],
  "imageUrl": "https://shopping-phinf.pstatic.net/main_5448665/54486659161.20250715144550.jpg",
  "url": "https://search.shopping.naver.com/catalog/54486659161",
  "keywordTotalProducts": 923027,
  "scrapedAt": "2026-10-07T00:00:00+00:00"
}
```

A `SUMMARY` record in the run's key-value store lists products, failures and Naver's total product count per keyword.

### Data fields

| Field | Description |
|---|---|
| `keyword` | The keyword that produced the row |
| `rank` | Position in the list Naver showed (1 = first) |
| `naverRank` | Naver's own rank number for the listing (promoted "super point" listings repeat a rank) |
| `productId` | Naver Shopping product ID (`nvMid`) |
| `title` | Product title, with Naver's highlight tags removed |
| `price`, `listPrice`, `discountRate`, `couponPrice`, `currency` | Current price (lowest price for catalogs), price before discount, discount %, price after the shown coupon, `KRW` |
| `mallName`, `mallId`, `mallLabel` | Store name and ID, and a badge such as `공식` (official). Empty for catalogs |
| `sellerCount` | Number of sellers in a price-comparison catalog (1 for single-store products) |
| `isAd` | `true` for sponsored listings |
| `cardType` | `organic`, `catalog`, `superPoint` (슈퍼적립: a listing promoted with extra Naver Pay points) or `ad` |
| `isCatalog`, `isSmartStore`, `isBrandStore`, `isOverseas` | Listing flags |
| `catalogId`, `channelProductId` | Catalog ID, and the SmartStore product number |
| `rating`, `reviewCount` | Average rating and number of reviews |
| `purchaseCount` | Purchases Naver shows for the product (SmartStore products; `null` when Naver shows none) |
| `wishlistCount` | Number of users who saved the product (찜) |
| `categoryId`, `categoryIds` | Naver Shopping leaf category ID, and the ID chain from top level to leaf. Category names are not included (see Tips) |
| `deliveryFee`, `freeDelivery`, `fastDeliveryType`, `arrivalTag` | Delivery details and fast-delivery badges |
| `promotionTypes`, `attributes` | Promotion badges, and catalog specs such as material or type |
| `imageUrl`, `url`, `mobileUrl` | Product image and links |
| `keywordTotalProducts` | Total number of products Naver has for the keyword (without the fast-delivery filter) |
| `scrapedAt` | UTC time of collection |

### Pricing: how much does it cost to scrape Naver Shopping?

This Actor uses pay-per-event pricing: you pay per product saved, about **$1.00 per 1,000 products** (`product` event). 150 products for one keyword cost about $0.15, and a 40-product test run of two keywords about $0.08.

Keywords that fail, or that have no products on Naver, are not charged. Set a maximum charge for the run and the Actor stops exactly at that limit.

### Tips and limits

- **150 products per keyword is a platform limit.** The Actor reads the shopping block of Naver's main search, which returns the top 150 for a keyword. Naver Shopping's own search pages go deeper, but they show a captcha to automated visitors and this Actor does not get around captchas. To cover more products, use more specific keywords (for example `캠핑 의자 경량`, `캠핑 의자 릴렉스`).
- **Order is Naver's relevance order only.** The shopping block has no sort (price, newest, sales), price or category filter; fast delivery is the only filter it accepts. Sort or filter the dataset afterwards.
- **Category IDs, not names.** The search results contain Naver's category IDs only, so the Actor outputs those and does not look up names elsewhere. Products with the same `categoryId` are in the same category, so you can still group and filter by it.
- **Product reviews are not included.** Naver blocks review pages for anonymous visitors (captcha or login), and this Actor does not get around that. Ratings and review counts are included.
- Results are what Naver shows at that moment. Naver caches popular keywords, so two runs a few minutes apart usually match.
- For daily rank tracking, save the run as a task and add a schedule.

### FAQ

#### Do I need a Naver account or API key?

No. The Actor only reads public search results that anyone can see without logging in. It never asks for or uses credentials.

#### Why are some products missing a store name or purchase count?

Catalog listings group several sellers, so they have a seller count and lowest price instead of one store. Naver shows purchase counts only for some store products.

#### Does including ads cost advertisers money?

No. Ad click and impression links are never opened and are not included in the output.

#### Is it legal to scrape Naver Shopping?

The Actor collects only public product listings, at a polite rate, and no personal data. You are responsible for how you use the data and for following the laws and terms that apply to you.

#### Is this an official Naver product?

No. This is an unofficial, independent tool and is not affiliated with NAVER Corp. Naver and Naver Shopping are trademarks of their owner.

Found a problem or need another field? Open an issue on the **Issues** tab.

# Actor input Schema

## `keywords` (type: `array`):

Korean (or any) search keywords, one per line, exactly as you would type them into Naver, for example `무선 이어폰` or `캠핑 의자`. A Naver search URL that contains `query=` also works. Each keyword is one Naver search.

## `maxProductsPerKeyword` (type: `integer`):

How many products to keep per keyword, from the top of Naver's list. Naver's shopping block itself never shows more than 150 per keyword, so 150 is the maximum. The run's maximum charge can lower this.

## `includeAds` (type: `boolean`):

Also return the sponsored (paid ad) products Naver mixes into the list. They are flagged with `isAd: true` and count as products. Ad click and impression links are never opened, so advertisers are not charged.

## `fastDeliveryOnly` (type: `boolean`):

Only products with Naver's fast-delivery badge (today/tomorrow arrival). This is the only filter Naver's shopping block accepts; there is no sort or price filter.

## `proxyConfiguration` (type: `object`):

Apify datacenter proxy (default) spreads requests over several IPs and switches to a fresh IP if Naver rate-limits one. You can turn it off; requests then come from the run's own IP.

## Actor input object example

```json
{
  "keywords": [
    "무선 이어폰",
    "캠핑 의자"
  ],
  "maxProductsPerKeyword": 40,
  "includeAds": false,
  "fastDeliveryOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "무선 이어폰",
        "캠핑 의자"
    ],
    "maxProductsPerKeyword": 40,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kyungminlee/naver-shopping-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": [
        "무선 이어폰",
        "캠핑 의자",
    ],
    "maxProductsPerKeyword": 40,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("kyungminlee/naver-shopping-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "무선 이어폰",
    "캠핑 의자"
  ],
  "maxProductsPerKeyword": 40,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call kyungminlee/naver-shopping-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kyungminlee/naver-shopping-search-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/l75axH8ujDlDGl8YB/builds/HrrLH9VEXmrzn0tbQ/openapi.json
