# Naver Shopping Rank & Price Monitor (`opaque_dieffenbachia/naver-shopping-rank-price-monitor`) Actor

Monitor Naver Shopping rank, price, stock, and review changes. Built for global brands and agencies tracking Korea—without noisy full snapshots.

- **URL**: https://apify.com/opaque\_dieffenbachia/naver-shopping-rank-price-monitor.md
- **Developed by:** [Korea Commerce Labs](https://apify.com/opaque_dieffenbachia) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 product observations

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does Naver Shopping Rank & Price Monitor do?

**See which tracked Naver Shopping prices changed since your previous observation.** Get previous and current values, product links, and observation timestamps to help prepare competitor checks and client reports. Start with a small watchlist on [Naver Shopping](https://shopping.naver.com/); use Apify for API access, scheduling, and optional integrations.

Choose one of two workflows:

- **Keyword rankings** — enter Korean or English keywords and automatically track the top products.
- **Specific products** — paste Naver Shopping or SmartStore product URLs/IDs and track an exact watchlist.

### Why use this monitor?

Built for agencies and ecommerce teams already checking Korean competitor products. A scraper gives you another snapshot; this monitor compares observations and highlights changes above your thresholds. It is an Apify data tool, not a standalone reporting dashboard.

### Ready-to-run examples

- [Monitor Naver Shopping Product Prices](https://apify.com/opaque_dieffenbachia/naver-shopping-rank-price-monitor/examples/monitor-naver-shopping-product-prices)
- [Track Korean Beauty Search Rankings](https://apify.com/opaque_dieffenbachia/naver-shopping-rank-price-monitor/examples/track-korean-beauty-search-rankings)
- [Monitor Naver Shopping Competitors Daily](https://apify.com/opaque_dieffenbachia/naver-shopping-rank-price-monitor/examples/monitor-naver-shopping-competitors-daily)

### Quick start: keyword rankings

Select **Keyword rankings — find products automatically**, then add 1–10 keywords.

```json
{
  "mode": "keywords",
  "keywords": ["선크림", "robot vacuum"],
  "maxProductsPerKeyword": 10
}
```

The Actor automatically selects the top products and detects:

- Top-N entries and exits
- Rank movements above your threshold
- Price changes
- Review, displayed-stock, and seller-count changes

### Quick start: specific product watchlist

Select **Specific products — track a watchlist**, then paste 1–50 product URLs or IDs.

```json
{
  "mode": "products",
  "productUrls": [
    "https://search.shopping.naver.com/catalog/52631236642"
  ]
}
```

Watchlist mode focuses on price, review-count, displayed-stock, and seller-count changes. Rank alerts apply only to keyword mode.

### What happens on the first run?

The first successful run stores a baseline and returns a `run_summary`. Run the same input again to receive `change_event` records when a configured threshold is crossed.

The Monitor ID defaults to `auto`, so each unique keyword set or product watchlist receives its own stable baseline automatically. Set a custom Monitor ID in **Advanced settings** only when you need separate client workspaces or a fresh baseline.

### Output

A completed run writes one summary. Detected changes are appended as change events. The simplified example below is illustrative, not a real customer result.

```json
{
  "recordType": "change_event",
  "type": "price_changed",
  "severity": "action",
  "productName": "Example product",
  "field": "price",
  "previousValue": 29900,
  "currentValue": 27900,
  "message": "Price changed by 6.7%.",
  "recommendedAction": "Compare the new competitor price with your offer."
}
```

No change events does not, by itself, prove that all requested products were checked. First confirm that the run succeeded, inspect `productCount` in the summary, and review the source run via `sourceRunId` if the count is unexpected. A first baseline is not a change report. Missing products must not be interpreted as unchanged or out of stock.

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

| Field | How to read it |
| --- | --- |
| `recordType` | `run_summary` or `change_event` |
| `previousValue` / `currentValue` | Values at the compared observations, for change events |
| `productUrl` | Product source link on change events |
| `observedAt` | Observation timestamp |
| `productCount` | Number of collected items reported in the summary |
| `sourceRunId` | Upstream collection run to inspect when troubleshooting |

### Pricing and cost controls

- $0.03 per Actor start
- $0.01 per successful product observation after the baseline
- Baseline observations are not charged as product-observation events
- `maxSourceChargeUsd` limits the upstream collection run, not your total Actor bill. The current implementation uses a range of $0.05–$2.00. Use Apify's run charge limit for the overall run.

Start with 3–10 products. Increase limits only after measuring your use case.

**Example Actor charges:** 10 products checked once daily for 30 runs, with the first run establishing a new baseline, cost $3.80: (30 × $0.03) + (29 × 10 × $0.01). This assumes 10 successful observations on every repeat run, unchanged pricing, and no extra runs. Baseline product observations are unbilled, but the $0.03 start charge still applies. Check the Pricing tab and run charge limit before starting.

### Set up daily monitoring

1. Run the Actor once and confirm the baseline summary.
2. Click **Save as a new task** at the top of the Actor page.
3. Open **Schedules** in Apify Console and select **Create new**.
4. Choose a daily frequency, local time, and timezone.
5. Add the saved task to the schedule.
6. Enable the schedule; new schedules are disabled by default.

The next run uses the same automatically generated Monitor ID, so it compares against the saved baseline. Email and Slack alerts are not enabled automatically. You must configure an integration or webhook workflow and filter `change_event` records yourself; run-finished notifications are not the same as price-change alerts.

### Important limitations

- Direct Naver collection is not used because it returned HTTP 418 during validation.
- Live collection depends on `zen-studio/naver-shopping-scraper` and changes to Naver Shopping.
- Search results vary over time and are not personalized to a signed-in Naver user.
- Displayed stock is a source field, not a guarantee of warehouse inventory.
- Prices may differ by seller, variant, shipping, coupons, or membership. Check the source product and offer before making a pricing decision; the monitor does not guarantee like-for-like delivered prices.
- The saved comparison state is not a full price-history dashboard. Export the results if you need your own archive.
- Coverage depends on the upstream source. SmartStore URLs and individual product formats should be validated with a small test before scheduling; support is not a guarantee for every URL.
- This Actor reads public shopping results only. It does not log in, buy products, or access seller accounts.

### Support

Include the run ID, Monitor ID, input mode, and whether the run was a baseline or repeat when reporting an issue. Never include account credentials or private seller data.

# Actor input Schema

## `mode` (type: `string`):

Choose automatic keyword tracking or paste exact Naver Shopping product URLs/IDs.

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

Keyword mode only. Add 1–10 Korean or English search terms; top products are selected automatically.

## `productUrls` (type: `array`):

Product watchlist mode only. Paste 1–50 Naver Shopping or SmartStore product URLs, or bare product IDs.

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

Keyword mode only. Automatically monitor this many top search results per keyword.

## `topN` (type: `integer`):

Keyword mode only. Entry and exit boundary for rank alerts.

## `rankChangeThreshold` (type: `integer`):

Keyword mode only. Minimum rank movement required to emit an alert.

## `priceChangeThresholdPct` (type: `number`):

Minimum percentage price movement required to emit an alert.

## `reviewChangeThreshold` (type: `integer`):

Minimum review-count movement required to emit a change.

## `monitorId` (type: `string`):

Leave as auto to keep a separate baseline for each keyword set or product watchlist.

## `maxSourceChargeUsd` (type: `number`):

Hard safety cap for live Naver Shopping collection.

## Actor input object example

```json
{
  "mode": "keywords",
  "keywords": [
    "선크림"
  ],
  "productUrls": [],
  "maxProductsPerKeyword": 10,
  "topN": 10,
  "rankChangeThreshold": 3,
  "priceChangeThresholdPct": 5,
  "reviewChangeThreshold": 5,
  "monitorId": "auto",
  "maxSourceChargeUsd": 0.25
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("opaque_dieffenbachia/naver-shopping-rank-price-monitor").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("opaque_dieffenbachia/naver-shopping-rank-price-monitor").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 '{}' |
apify call opaque_dieffenbachia/naver-shopping-rank-price-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,opaque_dieffenbachia/naver-shopping-rank-price-monitor"
        }
    }
}
```

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/ytggxX6AFh6TfHvIt/builds/Rc4kYwzLjCuFXsGc5/openapi.json
