# Naver Search Scraper — Korean SERP, Powerlink & Rank Tracker (`crawloop/naver-search-scraper`) Actor

Naver search scraper for Korean 통합검색 rank tracking. Extract Powerlink ads, blog, cafe, 지식iN, news, Place, shopping, and web as one row per result with block type and position. PC and mobile layouts, batch keywords, JSON export for Python, Node.js, and MCP.

- **URL**: https://apify.com/crawloop/naver-search-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.69 / 1,000 search results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Naver Search Scraper — Korean SERP, Powerlink & Rank Tracker

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by NAVER Corp. Data is read from publicly accessible search pages only. No login. You are responsible for complying with applicable law (including Korean personal-data rules where Place cards include business contacts) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

**Naver search scraper** for **통합검색** rank tracking. Extract **Powerlink ads**, **blog**, **cafe**, **지식iN**, **news**, **Place**, **shopping**, and **web** as one dataset row per result, with **query**, **device**, **blockType**, and **position**. Built for **Korean SEO**, **AEO visibility**, **Powerlink monitoring**, and scheduled rank jobs. Export JSON via the Apify API, **Python** / **Node.js** clients, or **MCP**.

**Best for:** SEO agencies, Korean-market teams, and data pipelines that need the real 통합검색 layout — not a vertical Open API dump.

> **Crawloop Marketplace & E-commerce Suite** — keyword SERP scrapers for Naver, Amazon, Shopee, and Mercado Libre.

| **Naver Search Scraper** ◄── *you are here* | [Amazon Search Scraper](https://apify.com/crawloop/amazon-search-scraper) | [Shopee Search Scraper](https://apify.com/crawloop/shopee-search-scraper) | [Mercado Libre Listings Scraper](https://apify.com/crawloop/mercado-libre-listings-scraper) |
| :---: | :---: | :---: | :---: |
| Korean 통합검색 blocks, Powerlink, PC/mobile | Amazon keyword SERP, ASIN, badges | Shopee marketplace search cards | LATAM Mercado Libre search |

Also see: [AliExpress Search Scraper](https://apify.com/crawloop/aliexpress-search-scraper) · [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) · [eBay Sold Price Intelligence](https://apify.com/crawloop/ebay-sold-price-intelligence)

***

### When to use this Actor

- Track **Naver keyword rankings** by block type (blog vs Place vs shopping vs Powerlink)
- Monitor **Powerlink** advertisers, titles, and destination URLs on a schedule
- Compare **PC vs mobile** 통합검색 layouts for the same query
- Snapshot **Place** visibility (id, rating, review count) for local / restaurant SEO
- Feed Korean SERP rows into Sheets, warehouses, or AI / MCP workflows

### When not to use this Actor

- **Official Naver Search API replacement** — this Actor reads public 통합검색 HTML so you get block order the Open API does not return
- **Shopping product detail pages** — shopping *cards* on 통합검색 only, not full PDP specs
- **Map reviews or Place full profiles** — Place ids and ratings when shown on the SERP card; not a Map crawler
- **Blog / cafe full-text** — titles, URLs, and snippets, not post bodies
- **US/EU Amazon keyword SERP** — use [Amazon Search Scraper](https://apify.com/crawloop/amazon-search-scraper)
- **SEA marketplace search** — use [Shopee Search Scraper](https://apify.com/crawloop/shopee-search-scraper)
- **AliExpress retail search** — use [AliExpress Search Scraper](https://apify.com/crawloop/aliexpress-search-scraper)
- **Completed-sale comps** — use [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper)

***

### Key features

- **통합검색 layout** — ranked blocks as they appear on Naver Search, not one isolated vertical
- **One row per result** — `query`, `device`, `blockType`, `position`, title, URL, snippet, source
- **Powerlink ads** — advertiser destination URL when Naver exposes it on the card
- **PC and mobile** — `device`: `pc`, `mobile`, or `both`
- **Batch keywords** — `query` or `queries`, optional pasted `searchUrls`
- **Filters** — drop ads, keep selected `blockTypes`, cap with `maxItems`
- **URL dedupe** — optional unique destinations across a batch (`deduplicateUrls`)
- **Fast HTTP** — `curl_cffi` Chrome TLS impersonation; no headless browser
- **KR residential proxy** — default Apify Proxy group + country KR

***

### Input

| Field | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `query` | string | — | Primary search keyword |
| `queries` | string\[] | — | Extra keywords, same settings |
| `searchUrls` | string\[] | — | Pasted Naver search URLs (query and PC/mobile read from the URL) |
| `device` | enum | `pc` | `pc`, `mobile`, or `both` |
| `maxItems` | integer | — | Cap rows per keyword and device |
| `includeAds` | boolean | `true` | Keep Powerlink and shopping ads |
| `blockTypes` | string\[] | all | Optional: `powerlink`, `blog`, `cafe`, `kin`, `news`, `place`, `shopping`, `web`, `influencer`, `video`, `ai_overview` |
| `deduplicateUrls` | boolean | `true` | Unique destination URLs across the run |
| `maxConcurrency` | integer | `2` | Parallel keyword/device jobs (1–4) |
| `proxyConfiguration` | object | KR residential | Apify Proxy |

**Basic — one keyword, PC layout:**

```json
{
  "query": "아이폰",
  "device": "pc",
  "includeAds": true
}
```

**Rank tracker — PC + mobile, selected blocks:**

```json
{
  "queries": ["강남 맛집", "아이폰"],
  "device": "both",
  "blockTypes": ["powerlink", "blog", "place", "shopping"],
  "maxItems": 40,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "KR"
  }
}
```

**Paste a Naver search URL:**

```json
{
  "searchUrls": ["https://search.naver.com/search.naver?where=nexearch&query=%EA%B0%95%EB%82%A8%20%EB%A7%9B%EC%A7%91"]
}
```

***

### Output

Each dataset item is one SERP row.

| Field | Description |
| :--- | :--- |
| `query` | Keyword |
| `device` | `pc` or `mobile` |
| `position` | 1-based rank in the parsed layout |
| `blockType` | `powerlink`, `blog`, `cafe`, `kin`, `news`, `place`, `shopping`, `web`, `influencer`, `video`, `ai_overview` |
| `isAd` | Powerlink or shopping AD card |
| `title` | Headline |
| `url` | Destination (advertiser URL for Powerlink when available) |
| `displayUrl` | Visible host / site |
| `snippet` | Passage text |
| `sourceName` | Blogger, publisher, shop, or advertiser |
| `dateText` | Relative date on the card |
| `placeId` / `rating` / `reviewCount` | Place cards |
| `priceValue` / `productId` | Shopping cards |
| `scrapedAt` | UTC ISO timestamp |

```json
{
  "source": "naver_search",
  "query": "아이폰",
  "device": "pc",
  "page": 1,
  "position": 1,
  "blockType": "powerlink",
  "isAd": true,
  "title": "iPhone 18 Pro 요금할인 32%",
  "url": "http://shop.kt.com",
  "displayUrl": "shop.kt.com",
  "snippet": "KT다이렉트샵 초이스더블 요금제",
  "sourceName": "KT다이렉트샵",
  "scrapedAt": "2026-09-20T13:00:00Z"
}
```

***

### Typical workflow

1. Run a keyword (or batch) with KR residential proxy and `device: "pc"` (or `"both"`).
2. Filter with `blockTypes` / `includeAds` if you only need Powerlink, blog, or Place.
3. Save as an Actor Task and attach an Apify Schedule for rank tracking.
4. Pull the dataset as JSON/CSV, or call the Actor from Python, Node.js, or MCP.

***

### Use cases

| Use case | What you get | Why it helps |
| :--- | :--- | :--- |
| **Korean SEO rank tracking** | `position` + `blockType` per keyword | See whether a brand ranks as blog, Place, or web |
| **Powerlink monitoring** | Ad titles, advertisers, destination URLs | Track paid competitors on Naver Search |
| **Local / Place visibility** | Place id, rating, review count | Restaurant and clinic SEO |
| **Shopping SERP snapshot** | Product id, price, ad vs organic | Compare shopping-block share |
| **PC vs mobile** | Two layouts for the same query | Catch device-specific ranking gaps |
| **Naver API alternative** | Layout-faithful rows, not a vertical dump | AEO and rank jobs that need block order |

***

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/naver-search-scraper').call({
  query: '아이폰',
  device: 'pc',
  proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'], apifyProxyCountry: 'KR' },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 10));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token)
run = client.actor("crawloop/naver-search-scraper").call(
    run_input={
        "query": "아이폰",
        "device": "pc",
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
            "apifyProxyCountry": "KR",
        },
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("position"), item.get("blockType"), item.get("title"))
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~naver-search-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query":"아이폰","device":"pc","proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"],"apifyProxyCountry":"KR"}}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Connect your Apify account, then call `crawloop/naver-search-scraper`.

Example prompts:

- "Run Naver Search Scraper for 강남 맛집 on PC and return position, blockType, title, isAd as JSON"
- "Scrape Naver Search for 아이폰 on PC and mobile, then summarize Powerlink advertisers"
- "Chain Naver Search Scraper then Amazon Search Scraper for the same keyword to compare KR vs US SERP"

### Suite next step

After a Naver rank dump, run [Amazon Search Scraper](https://apify.com/crawloop/amazon-search-scraper) for the same keyword on US/DE SERP, [AliExpress Search Scraper](https://apify.com/crawloop/aliexpress-search-scraper) for China retail cards, or [Shopee Search Scraper](https://apify.com/crawloop/shopee-search-scraper) when the query is a product sold across SEA marketplaces. For completed-sale comps, use [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper).

***

### FAQ

**What input do I need?**\
A keyword in `query` (or a list in `queries`), or Naver search URLs in `searchUrls`. All other parameters are optional.

**Is this a Naver API alternative?**\
Yes, for layout-faithful 통합검색. It is not the official Search API. You get Powerlink / blog / Place / shopping **block order** that a vertical API dump does not return.

**Can I scrape Naver with Python or Node.js?**\
Yes. Use `apify-client` as in the examples above, or call the Actor from an AI assistant via Apify MCP.

**Can I scrape only blog, Place, or Powerlink?**\
Yes — set `blockTypes` to the blocks you want. Powerlink is `powerlink`. 지식iN is `kin`.

**PC vs mobile?**\
Naver layouts differ. Use `device: "both"` for rank jobs that need both.

**What if the dataset is empty?**\
Naver likely blocked the IP. Use Apify **KR residential** proxy. Datacenter IPs often fail. A scheduled tick can also finish with 0 rows if filters match nothing.

**Does it paginate beyond 통합검색 page 1?**\
v1 parses the main 통합검색 page (the layout Korean SEO actually ranks against). Use `maxItems` to cap rows on that page.

***

### Troubleshooting

| Issue | Likely cause | What to try |
| :--- | :--- | :--- |
| Empty dataset | Datacenter IP or captcha | Enable KR residential proxy |
| Missing Place or shopping | Query has no local/shopping block | Expected — block mix depends on the keyword |
| Duplicate URLs in a batch | Dedupe disabled | Set `deduplicateUrls: true` |
| Slow runs | `device: both` plus many keywords | Lower `maxConcurrency` or split batches |

***

### Limitations

- **KR residential proxy strongly recommended**
- **통합검색 page 1** — not vertical tab crawls (View / News / Shop tabs)
- **Fields depend on the card** — Place ratings and shopping prices appear only when Naver renders them
- **Not a full-text blog or review scraper**

***

### Related Actors

| Actor | Best for |
| :--- | :--- |
| [Amazon Search Scraper](https://apify.com/crawloop/amazon-search-scraper) | US/EU Amazon keyword SERP |
| [AliExpress Search Scraper](https://apify.com/crawloop/aliexpress-search-scraper) | AliExpress retail search, sold count |
| [Shopee Search Scraper](https://apify.com/crawloop/shopee-search-scraper) | SEA Shopee search cards |
| [Mercado Libre Listings Scraper](https://apify.com/crawloop/mercado-libre-listings-scraper) | LATAM Mercado Libre search |
| [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) | Completed eBay sold comps |
| [eBay Sold Price Intelligence](https://apify.com/crawloop/ebay-sold-price-intelligence) | Recommended price, demand, CSV/report |
| [888lots Scraper](https://apify.com/crawloop/888lots-scraper) | Wholesale ASIN lots |

**Tags:** naver search scraper, naver serp scraper, naver rank tracker, naver powerlink, 통합검색, korean seo scraper, naver blog search, naver place search, naver shopping search, naver api alternative, scrape naver with python, naver mcp

# Actor input Schema

## `query` (type: `string`):

Primary Naver search keyword or phrase (Korean or English).

## `queries` (type: `array`):

Optional list of keywords. Each query uses the same device, ads, and block-type settings. Up to 4 queries can run in parallel (`maxConcurrency`).

## `searchUrls` (type: `array`):

Paste search.naver.com or m.search.naver.com URLs. Query and PC/mobile are read from the URL.

## `device` (type: `string`):

Which 통합검색 layout to scrape. `both` runs PC then mobile for every keyword.

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

Optional cap on SERP rows saved per keyword and device. Rank order is preserved.

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

Keep paid placements (Powerlink and shopping AD cards). Turn off to save organic blocks only.

## `blockTypes` (type: `array`):

Optional filter. When empty, every parsed 통합검색 block is saved. Use to keep only Powerlink, blog, Place, etc.

## `deduplicateUrls` (type: `boolean`):

When enabled, each destination URL is saved only once across all queries in the run.

## `maxConcurrency` (type: `integer`):

How many keyword/device jobs to scrape in parallel (1–4). Each job uses its own sticky KR residential session. Default 2.

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

Apify Proxy settings. KR residential is strongly recommended for Naver 통합검색.

## Actor input object example

```json
{
  "query": "아이폰",
  "device": "pc",
  "includeAds": true,
  "deduplicateUrls": true,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "KR"
  }
}
```

# Actor output Schema

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

Default dataset items.

# 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 = {
    "query": "아이폰",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "KR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/naver-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 = {
    "query": "아이폰",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "KR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/naver-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 '{
  "query": "아이폰",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "KR"
  }
}' |
apify call crawloop/naver-search-scraper --silent --output-dataset

```

## MCP server setup

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