# Naver Listings Scraper (`piotrv1001/naver-listings-scraper`) Actor

The Naver Listings Scraper extracts broadcast schedules and enriched detail from Naver Shopping Live, capturing titles, statuses, viewer/like/order/subscriber counts, product lists with prices and discounts, short clips, and channel profiles — ideal for Korean live-commerce trend intelligence.

- **URL**: https://apify.com/piotrv1001/naver-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Lead generation, SEO tools, Travel
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 product listings

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/platform/actors/running/actors-in-store#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

### 🚀 Naver Shopping Live Scraper

Extract **live broadcast schedules, real-time engagement metrics, full product lists, short-form commerce clips, and creator channel profiles** from [Naver Shopping Live](https://shoppinglive.naver.com/home) — South Korea's largest live-commerce platform. Every metric is server-rendered as JSON, so the **Naver Shopping Live Scraper** pulls rich, structured data with one HTTP request per page — **no browser, no login, no proxy required.**

Perfect for **global brands tracking East-Asian commerce trends**, influencer/creator analytics, product & pricing intelligence, and building a forward-looking live-commerce calendar.

### ✨ Features

- 📅 **Broadcast schedules**: Capture the forward-looking home feed — live, upcoming (`STANDBY`/`NONE`), and encore broadcasts with their scheduled start times.
- 📈 **Engagement metrics**: Viewer counts, like counts, order counts, and subscriber counts per broadcast and channel.
- 🛍️ **Full product data**: Every product per broadcast/clip — name, brand, mall, price, discount rate, live-discount price & window, stock, image, and links.
- 🎬 **Short-form commerce**: Popular short clips and the products each creator promoted.
- 👤 **Channel profiles**: Creator nickname, profile image, store/channel links, and on-air status.
- 🇰🇷 **Built for the Korean surface**: Handles Hangul/emoji (UTF-8) and the Korean live-commerce ecosystem out of the box.
- ⚡ **Fast & cheap**: One request returns up to 50 broadcasts or 30 clips — no headless browser overhead.

### 🛠️ How It Works

1. **Pick a mode** – `trending` (home schedule), `broadcasts` (by ID), `shortclips`, or `channels` (by ID).
2. **(Optional) Add IDs or toggle enrichment** – Provide broadcast/channel IDs, or enable **Enrich with broadcast details** to fetch the full per-broadcast record in trending mode.
3. **Run the scraper** – Start the run and receive clean, structured records streamed into the dataset.
4. **Export** – Download as **JSON, CSV, Excel, or HTML**, or pull via the Apify API.

### ⚙️ Input

| Field                    | Type    | Description                                                                          |
| ------------------------ | ------- | ------------------------------------------------------------------------------------ |
| `mode`                   | string  | `trending`, `broadcasts`, `shortclips`, or `channels`. Default `trending`.           |
| `broadcastIds`           | array   | Broadcast IDs to fetch (required for `broadcasts` mode).                             |
| `channelIds`             | array   | Channel IDs to fetch (required for `channels` mode).                                 |
| `includeProducts`        | boolean | Include the product list per record. Default `true`.                                 |
| `enrichBroadcastDetails` | boolean | In `trending` mode, fetch each broadcast's full detail page. Default `false`.        |
| `maxItems`               | integer | Max dataset records to push (`0` = unlimited). Default `50`.                         |
| `proxyConfiguration`     | object  | Optional proxy. Not required; enable a Korean residential proxy only if geo-blocked. |

Example input:

```json
{
    "mode": "trending",
    "enrichBroadcastDetails": false,
    "includeProducts": true,
    "maxItems": 50
}
```

> **Tip:** Broadcast and channel IDs appear in the output of a `trending` run (`broadcastId`, `channelId`), or in page URLs: `view.shoppinglive.naver.com/lives/{broadcastId}` and `shoppinglive.naver.com/channels/{channelId}`.

### 📊 Sample Output Data

The scraper provides structured JSON output. Example (trending broadcast, trimmed):

```json
[
    {
        "recordType": "broadcast",
        "source": "trending",
        "url": "https://view.shoppinglive.naver.com/lives/1917086",
        "broadcastId": 1917086,
        "channelId": 85914,
        "channelName": "풀무원샘물",
        "title": "풀무원샘물 브랜드데이 UP TO 69%+사은혜택🎁",
        "status": "STANDBY",
        "expectedStartDate": "2026-05-24T10:00:00+09:00",
        "viewerCount": 68,
        "likeCount": 1240,
        "orderMemberCount": 44,
        "subscriberCount": 161024,
        "productCount": 8,
        "products": [
            {
                "productNo": 13233695932,
                "name": "풀무원생수 퍼플에디션 2L, 12개",
                "brandName": "풀무원샘물",
                "mallName": "풀무원샘물",
                "price": 7900,
                "discountRate": 62,
                "liveDiscountPrice": 5990,
                "imageUrl": "https://shop-phinf.pstatic.net/...jpg",
                "link": "https://smartstore.naver.com/..."
            }
        ]
    }
]
```

| Field                       | Description                                                                  |
| --------------------------- | ---------------------------------------------------------------------------- |
| `recordType`                | `broadcast`, `shortclip`, or `channel`.                                      |
| `broadcastId` / `channelId` | Stable identifiers.                                                          |
| `title` / `nickname`        | Broadcast title / creator name.                                              |
| `status`                    | `NONE`, `STANDBY`, `ONAIR`, `BLOCK`, `END`.                                  |
| `expectedStartDate`         | Scheduled start (KST); plus `startDate` / `endDate` for aired broadcasts.    |
| Engagement counts           | `viewerCount`, `likeCount`, `orderMemberCount`, `subscriberCount`.           |
| `categories`                | Broadcast categories (detail mode).                                          |
| `products[]`                | name, brand, mall, price, discount, live-discount price/window, image, link. |
| `vid` / `videoSaved`        | Replay/video info.                                                           |

### 💰 Pricing

This Actor uses a **Pay Per Event (PPE)** model — you pay per result, and **shallow listings cost less than detailed records**. You're charged only for the data you actually receive.

| Event             | Charged for                                                            | Price / event | Per 1,000 |
| ----------------- | ---------------------------------------------------------------------- | ------------- | --------- |
| `product-listing` | A shallow listing: a **trending broadcast** or a **short clip**.       | **$0.002**    | $2        |
| `item-detail`     | A detailed record: a **broadcast detail page** or **channel profile**. | **$0.008**    | $8        |

Which event you pay depends on the mode you run:

| Mode / option                               | Event charged per record |
| ------------------------------------------- | ------------------------ |
| `trending` (default)                        | `product-listing`        |
| `trending` + `enrichBroadcastDetails: true` | `item-detail`            |
| `shortclips`                                | `product-listing`        |
| `broadcasts`                                | `item-detail`            |
| `channels`                                  | `item-detail`            |

**Example run costs:**

| Run                     | Records | Cost      |
| ----------------------- | ------- | --------- |
| `trending` (home feed)  | 50      | **$0.10** |
| `trending` + enrichment | 50      | **$0.40** |
| `broadcasts` (100 IDs)  | 100     | **$0.80** |
| `shortclips`            | 30      | **$0.06** |

**Control your spend:** set `maxItems` to stop after N results, or set a charge budget when starting the run — the Actor stops as soon as either limit is reached. Run cheap `trending`/`shortclips` listings for breadth; opt into `item-detail` only when you need the full per-entity depth (descriptions, categories, and every product with ~45 fields).

### ❓ FAQ & Support

- **Is this legal?** The Actor collects only publicly available, server-rendered data and never logs in or bypasses authentication. You are responsible for complying with Naver's Terms of Service and applicable laws (including data-protection rules) in your jurisdiction.
- **Can it search every Naver Shopping listing for my SKU?** No — it targets the live-commerce surface (`shoppinglive.naver.com`). The general product search (`search.shopping.naver.com`) is a different, geo-blocked surface and is out of scope.
- **Got no data or fewer fields?** Naver redeploys its frontend often. Parsing is defensive (every field optional), but a major redesign can shift the payload. Report it via the **Issues** tab.

For bugs, feature requests, or a custom solution, use the **Issues** tab on the Actor page.

Start tracking Korea's live-commerce trends with the **Naver Shopping Live Scraper** today! 🚀

# Actor input Schema

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

Which Naver Shopping Live surface to scrape.

- **Trending broadcasts** – the home page schedule (live + upcoming + encore), up to 50 broadcasts in one request.
- **Specific broadcasts** – full detail for the broadcast IDs you provide.
- **Short clips** – popular short-form commerce videos with their promoted products.
- **Channels** – creator/channel profiles for the channel IDs you provide.

## `broadcastIds` (type: `array`):

Broadcast IDs to fetch in **Specific broadcasts** mode. Each yields one detail-rich record (engagement, schedule, categories, full product list). Find IDs in the `broadcastId` field of trending/shortclips output or in a broadcast URL: `view.shoppinglive.naver.com/lives/{broadcastId}`.

## `channelIds` (type: `array`):

Channel IDs to fetch in **Channels** mode. Find IDs in the `channelId` field of trending output or in a channel URL: `shoppinglive.naver.com/channels/{channelId}`.

## `includeProducts` (type: `boolean`):

Include the per-record product list (name, price, discount, mall/brand, image, link) in the output.

## `enrichBroadcastDetails` (type: `boolean`):

In **Trending broadcasts** mode, fetch each broadcast's viewer page to capture the full detail record (description, categories, ~45 fields per product) instead of the lighter home-listing summary. Uses one extra HTTP request per broadcast.

## `maxItems` (type: `integer`):

Maximum number of dataset records to push (0 = unlimited).

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

Proxy settings. Not required — the live-commerce surface returns 200 OK without a proxy. Enable a Korean residential proxy only if you start seeing geo-blocks.

## Actor input object example

```json
{
  "mode": "trending",
  "broadcastIds": [
    "1917086"
  ],
  "channelIds": [
    "85914"
  ],
  "includeProducts": true,
  "enrichBroadcastDetails": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "broadcastIds": [
        "1917086"
    ],
    "channelIds": [
        "85914"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/naver-listings-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 = {
    "broadcastIds": ["1917086"],
    "channelIds": ["85914"],
}

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

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

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

```

## CLI example

```bash
echo '{
  "broadcastIds": [
    "1917086"
  ],
  "channelIds": [
    "85914"
  ]
}' |
apify call piotrv1001/naver-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=piotrv1001/naver-listings-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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