# Naver Shopping Scraper (`mina_safwat/naver-shopping-scraper`) Actor

Scrapes Naver Shopping search results by keyword or link, plus SmartStore and Brand Store products: price, discount, seller, price-comparison seller count, category, rating, reviews, purchases, delivery fee, images and ad flag. Optional specs, options, stock and reviews.

- **URL**: https://apify.com/mina_safwat/naver-shopping-scraper.md
- **Developed by:** [Mina](https://apify.com/mina_safwat) (community)
- **Categories:** E-commerce, Marketing, Automation
- **Security:** Limited permissions
- **Stats:** 3 total users, 3 monthly users, 98.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.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 Scraper do?

**Naver Shopping Scraper** collects **product listings from [Naver Shopping](https://shopping.naver.com)**, Korea's largest shopping search, by **keyword, search link, category link or SmartStore / Brand Store product link**. For every product you get the **title, price, price before discount, discount, seller, number of sellers compared, category path, rating, review count, purchase count, wishlist count, delivery fee and images**. Sponsored (ad) results can be added on request and are marked as such.

Turn on the extras to add each SmartStore or Brand Store product's **brand, maker, model, stock, specifications, options with extra price and stock, and customer reviews** (rating, text, date and purchased option).

Try it with the prefilled input: open the Actor, click **Start**, and the products are ready in about ten seconds. Because it runs on the Apify platform, you also get API access, scheduled runs, integrations (Google Sheets, Make, Zapier, Slack, webhooks), automatic proxy rotation and run monitoring.

### Why scrape Naver Shopping?

- **Price monitoring.** Track your own and your competitors' prices, discounts and delivery fees on the marketplace most Korean shoppers start from.
- **Rank tracking.** See where a product appears for a keyword (`rank`), and, with sponsored products turned on, which sellers are paying for sponsored places (`isAd`).
- **Market research.** Compare ratings, review counts and purchase counts across a whole product category before you launch or source a product.
- **Price-comparison insight.** Catalog products show how many sellers offer the same item (`mallCount`) and the lowest price for each variant.
- **Review analysis.** Pull SmartStore reviews with their purchased option for sentiment analysis or product research.

### How to scrape Naver Shopping

1. Type the words you would search on Naver Shopping into **Search words**, one search per line (for example `노트북` or `캠핑 의자`). Korean words give the best results.
2. Or paste links into **Naver Shopping links**: a search page, a category page, or a SmartStore / Brand Store product page.
3. Set **Max products per search**, and optionally the **order** of results.
4. Turn on **Add product details** and/or **Add reviews** if you need them.
5. Click **Start**, then download the results as JSON, CSV, Excel or HTML when the run finishes.

### Input

Everything is set on the Input tab.

| Field | What it does | Default |
|---|---|---|
| `searchQueries` | Words to search, one search per line. | none |
| `startUrls` | Search links (`https://search.shopping.naver.com/ns/search?query=…`; only the search words are used, filters such as `catId`, price or sort in the link are not applied), category links (`…/search/category/50000151`, searched by the category's name) and product links (`https://smartstore.naver.com/<store>/products/<number>`, `https://brand.naver.com/<store>/products/<number>`). Links without `https://` work too. | none |
| `maxProducts` | Products per search word, search link or category. One search gives about 80 regular results with sponsored products off; with them on, Naver fills about 90 places, roughly 35–45 of them sponsored. | 40 |
| `sort` | `relevance` keeps Naver's ranking. `price_asc`, `price_desc` and `review_count` re-order Naver's top ~90 results for the search before the limit is applied; they do not search further. | `relevance` |
| `includeAds` | Also save the sponsored products Naver mixes into the results (each is a billed row). | off |
| `includeDetails` | Add brand, maker, model, stock, specs, attributes, options, delivery details and review score counts. | off |
| `includeReviews` | Add reviews with rating, text, date, option and photos. | off |
| `maxReviewsPerProduct` | Reviews per product when reviews are on (up to 300). | 20 |
| `proxyConfiguration` | Leave empty; the Actor picks the cheapest route that works. | none |

In JSON:

```json
{
    "searchQueries": ["노트북", "캠핑 의자"],
    "startUrls": ["https://brand.naver.com/pictory/products/4108300313"],
    "maxProducts": 40,
    "sort": "relevance",
    "includeAds": false,
    "includeDetails": true,
    "includeReviews": true,
    "maxReviewsPerProduct": 20
}
```

### Output

Each product is one row. A SmartStore product with details and reviews turned on (shortened):

```json
{
    "productId": "88959704488",
    "type": "product",
    "storeProductId": "11415194123",
    "url": "https://smartstore.naver.com/main/products/11415194123",
    "title": "브리츠 오픈형 블루투스 이어폰 귀찌 러닝 이어커프 귀걸이형 무선 이어폰 이어클립",
    "price": 39900,
    "originalPrice": 45000,
    "discountPercent": 11,
    "currency": "KRW",
    "mallName": "브리츠 공식몰",
    "mallBadge": "인증",
    "mallCount": null,
    "purchaseOptions": null,
    "categoryIds": ["50000003", "50000209", "50024379", "50024439"],
    "categoryPath": "디지털/가전 > 음향가전 > 이어폰/이어셋 > 무선이어폰/이어셋",
    "rating": 4.68,
    "reviewCount": 5645,
    "purchaseCount": 3479,
    "wishCount": 2604,
    "deliveryFee": 0,
    "imageUrl": "https://shopping-phinf.pstatic.net/main_8895970/88959704488.11.jpg",
    "images": ["https://shopping-phinf.pstatic.net/main_8895970/88959704488.11.jpg"],
    "isAd": false,
    "isBrandStore": false,
    "isSmartStore": true,
    "isOverseas": false,
    "searchQuery": "무선 이어폰",
    "rank": 26,
    "details": {
        "brand": "브리츠",
        "maker": "브리츠",
        "model": "브리츠 오픈형 귀찌 블루투스 이어폰",
        "status": "SALE",
        "stockQuantity": 18356,
        "storeName": "브리츠 공식몰",
        "storeUrl": "https://smartstore.naver.com/britzhanbit",
        "sellerCompany": "(주)한빛컴앤에스",
        "specs": { "상품상태": "신상품", "제조사": "브리츠", "브랜드": "브리츠" },
        "attributes": { "블루투스버전": "블루투스6.0", "형태": "무선, 클립형, 귀걸이형, 오픈형" },
        "options": [{ "name": "CLIP7 PLUS 블랙", "extraPrice": 0, "stockQuantity": 8924 }],
        "deliveryFeeType": "FREE",
        "deliveryCompany": "한진택배",
        "deliveryNote": null,
        "reviewScoreCounts": { "5": 4427, "4": 817, "3": 280, "2": 57, "1": 64 },
        "sellerTags": ["가성비좋은", "오픈형이어폰"]
    },
    "reviews": [{
        "id": "5089787250",
        "rating": 5,
        "text": "기존에 사용하던 이어폰은 커널형이라 …",
        "date": "2026-10-23T04:47:59.754+00:00",
        "option": "색상: CLIP7 PLUS 블랙",
        "isRepurchase": false,
        "images": ["https://phinf.pstatic.net/checkout.phinf/20261023_210/1792730849141yhqSR_JPEG/KakaoTalk_20261023_133635484_09.jpg"]
    }],
    "scrapedAt": "2026-10-24T09:47:49.732572+00:00"
}
```

A price-comparison (catalog) product groups the same item across many sellers:

```json
{
    "productId": "53527818086",
    "type": "catalog",
    "url": "https://search.shopping.naver.com/catalog/53527818086",
    "title": "헬리녹스 체어 원",
    "price": 78900,
    "mallCount": 172,
    "purchaseOptions": [{ "name": "블랙", "lowestPrice": 78900 }, { "name": "코요테탄", "lowestPrice": 74150 }],
    "categoryPath": "스포츠/레저 > 캠핑 > 캠핑가구 > 캠핑의자",
    "rating": 4.91,
    "reviewCount": 1059,
    "searchQuery": "캠핑 의자",
    "rank": 7
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data fields

| Field | Description |
|---|---|
| `productId` | Naver Shopping's product id (the catalog id for catalogs). Each product is saved once per run. |
| `type` | `product` for one seller's offer, `catalog` for a price-comparison page grouping many sellers. |
| `storeProductId` | The seller's own product number (SmartStore number for SmartStore products); null for catalogs. |
| `url` | Product page; for sponsored products, the advertiser's landing link. |
| `title` | Product name. |
| `price` | Current price in won after discounts; for catalogs, the lowest price of the main option. |
| `originalPrice`, `discountPercent` | Price before discount and the discount, when there is one. |
| `currency` | Always `KRW`. |
| `mallName`, `mallBadge` | Seller name and Naver's seller badge (`공식` official, `인증` certified). Null for catalogs. |
| `mallCount` | Catalogs only: how many sellers offer the product. |
| `purchaseOptions` | Catalogs only: variants with their lowest price. |
| `categoryIds`, `categoryPath` | Naver category ids and names, top level first. The path is null when Naver does not name every level. |
| `rating`, `reviewCount` | Average rating (null when Naver shows none) and number of reviews. |
| `purchaseCount` | Purchases Naver shows on the card; null when it shows none, and for catalogs and product links. |
| `wishCount` | How many shoppers saved the product (null for product links). |
| `deliveryFee` | Delivery fee in won (0 = free); null for catalogs. |
| `imageUrl`, `images` | Main image and all images. |
| `isAd` | Sponsored result (only when **Include sponsored products** is on; otherwise always false). |
| `isBrandStore`, `isSmartStore`, `isOverseas` | Sold from a Brand Store, a SmartStore, or shipped from abroad. |
| `searchQuery`, `rank` | The search the product came from and its position in Naver's results (null for product links). |
| `details` | Only with **Add product details**: brand, maker, model, sale status, stock, store and company name, specs, attributes, options, delivery details, review counts by score and seller tags. Null for catalogs and products sold on other shops. |
| `reviews` | Only with **Add reviews**: id, rating, text, date (UTC), purchased option, repurchase flag and photo links. Null where `details` would be null. |
| `scrapedAt` | When the row was saved (UTC). |

### How much does it cost to scrape Naver Shopping?

The Actor uses plain HTTP requests, not a browser, so runs are fast and light: the prefilled run finishes in about 10 seconds, and 430 products from five searches took 35 seconds. You pay per product saved; see the **Pricing** tab for the exact price. Searches, links or products that give nothing are never charged.

### Tips for scraping Naver Shopping

- **Use Korean search words.** Naver matches Korean product names far better than English ones.
- **More than about 90 products for a topic?** Add several narrower searches (for example a brand or model name per line). A product found by more than one search is saved only once.
- **Leave details and reviews off when you only need prices.** They read one extra page per product (plus one per 30 reviews), so runs take longer.
- **Track ranks over time** by scheduling the same searches daily and comparing `rank`.
- **Want to see who is advertising?** Turn on **Include sponsored products**. Naver then fills about 90 places per search, roughly 35–45 of them sponsored, and each sponsored row is billed like any other.

### FAQ, disclaimers and support

**Can it read price-comparison (catalog) pages and every seller's offer?** No. Naver shows catalog pages only after a CAPTCHA, which this Actor does not solve. Catalog products still appear in search results with their lowest price, seller count and per-variant lowest prices. Catalog links are listed in the `FAILED_INPUTS` record of the run's key-value store.

**Why does a search stop at about 90 products?** With sponsored products off, Naver gives about 80 regular results for one search. With them on, it fills about 90 places and roughly 35–45 of those are sponsored, so fewer regular results come back. Sorting by price or reviews re-orders those top ~90; it does not reach further into Naver's catalog.

**How are category links handled?** The Actor looks up the category's name and searches for it. Naver does not publish a name for some category ids (including many deeper and newer ones); those links are listed in `FAILED_INPUTS` with that reason, so search for the category name instead.

**What if Naver refuses a product's details?** With details or reviews on, a product whose page Naver keeps refusing is left out rather than saved without them, listed in `FAILED_INPUTS`, and counted in the run's status message. If Naver refuses part of a product's reviews, the product is saved with the reviews that were read, and the status message says how many products are affected.

**What happens to inputs that give nothing?** They are not saved as rows or charged. Each one is listed with the reason in the `FAILED_INPUTS` record, and the run's status message sums it up.

**Is it legal to scrape Naver Shopping?** The Actor reads only public product information that anyone can see without logging in. Reviews contain text written by shoppers; Naver already masks their names, and the Actor does not save reviewer ids. Scraping public data is generally lawful, but you are responsible for how you use it, including under Korea's Personal Information Protection Act and the GDPR. Naver's robots.txt asks automated tools not to crawl its pages; consider this and Naver's terms before using the data. If unsure, consult a lawyer.

**Something not working, or need a custom feature?** Open an issue on the **Issues** tab and we will look at it quickly. Custom solutions are available on request.

# Actor input Schema

## `searchQueries` (type: `array`):

Words to search on Naver Shopping, one search per line, for example 노트북 or 나이키 운동화. Korean words give the best results. Each search returns about 80 regular products with sponsored products off, or about 90 places (roughly 35–45 sponsored) with them on: Naver's own limit for one search.

## `startUrls` (type: `array`):

Links, one per line: a Naver Shopping search (https://search.shopping.naver.com/ns/search?query=노트북; only its search words are used, filters in the link are not applied), a SmartStore or Brand Store product (https://smartstore.naver.com/<store>/products/<number>, https://brand.naver.com/<store>/products/<number>) or a category link (searched by the category's name; ids Naver gives no name for are listed in FAILED_INPUTS). Price-comparison (catalog) links cannot be read because Naver shows them only after a CAPTCHA; they are listed in the FAILED_INPUTS record.

## `maxProducts` (type: `integer`):

Stops after this many products for each search word, search link or category. Naver shows about 80 products for one search (about 90 with sponsored products on).

## `sort` (type: `string`):

Naver's ranking keeps the order Naver shows. The other choices re-order the products Naver returns for the search (up to about 90) before the limit above is applied, so price, low to high gives the cheapest of those products.

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

Off by default: you get about 80 regular results per search. Turn it on to also save the sponsored (ad) products Naver mixes into search results, marked with isAd. Naver then fills about 90 places, roughly 35–45 of them sponsored, and each sponsored row is billed like any other row.

## `includeDetails` (type: `boolean`):

Adds brand, maker, model, stock, sale status, specifications, product attributes, options with extra price and stock, delivery details, review score counts and the store's name and company.

## `includeReviews` (type: `boolean`):

Adds the product's reviews (rating, text, date, purchased option, photos) in the order Naver ranks them.

## `maxReviewsPerProduct` (type: `integer`):

How many reviews to add to each product when reviews are on. Up to 300.

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

Leave this empty: the Actor connects directly and, if Naver refuses, retries through Apify's datacenter and then Korean residential proxies on its own.

## Actor input object example

```json
{
  "searchQueries": [
    "노트북"
  ],
  "startUrls": [
    "https://brand.naver.com/pictory/products/4108300313"
  ],
  "maxProducts": 10,
  "sort": "relevance",
  "includeAds": false,
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "searchQueries": [
        "노트북"
    ],
    "startUrls": [
        "https://brand.naver.com/pictory/products/4108300313"
    ],
    "maxProducts": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("mina_safwat/naver-shopping-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 = {
    "searchQueries": ["노트북"],
    "startUrls": ["https://brand.naver.com/pictory/products/4108300313"],
    "maxProducts": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("mina_safwat/naver-shopping-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 '{
  "searchQueries": [
    "노트북"
  ],
  "startUrls": [
    "https://brand.naver.com/pictory/products/4108300313"
  ],
  "maxProducts": 10
}' |
apify call mina_safwat/naver-shopping-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mina_safwat/naver-shopping-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/vm6CYDqbUk8tdBxCH/builds/jUztpxVXp0lbhETcd/openapi.json
