# Naver Search Scraper - Korean SERP Web Results, Ads & Places (`santhej/naver-search-scraper`) Actor

Scrape Naver search results for any keyword: ranked web results with title, URL, domain, snippet and date, up to 100 per query, plus place listings, mobile ads and images at no extra charge. Desktop or mobile, South Korea. Clean JSON/CSV for Korean SEO and rank tracking. No API key.

- **URL**: https://apify.com/santhej/naver-search-scraper.md
- **Developed by:** [Santhej Kallada](https://apify.com/santhej) (community)
- **Categories:** SEO tools, Marketing
- **Stats:** 2 total users, 1 monthly users, 92.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 web search results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 Web Results, Ads & Places

**Scrape Naver search results for any keyword and get every ranked web result as a clean row — title, link, domain, snippet and date, up to 100 per search term — with Naver's place listings, mobile search ads and images included free, for $3.00 per 1,000 web results.**

Naver is where South Korea searches. If you sell, rank or advertise in Korea, Google's results tell you little: you need to see what Naver shows for your keywords. This Actor searches Naver for as many terms as you like in one run and returns the results as structured rows, with no browser to manage, no Korean proxies to rent and no API keys.

### What does Naver Search Scraper do?

For each search term you give it, the Actor runs a Naver search as a user in South Korea sees it, on desktop or mobile, and returns:

- **Web results** — the ranked websites Naver lists for the term (웹사이트 / 웹문서), in Naver's order, starting with the ones on the main results page and continuing down the full web listing to as many as 100 per search term. Results that Naver repeats from one page to the next are returned once.
- **Places** — for local searches such as `강남역 카페`, the places in Naver's place block, each with its Naver place ID, link, rating, review count and open status.
- **Ads** — Naver's search ads (파워링크) on mobile searches: headline, ad text, advertiser domain and sitelinks.
- **Images** — optionally, the images of Naver's image block (thumbnail and original image address).

Only web results are charged. Places, ads and images come along at no extra cost.

**What it does not return:** Naver's blog (블로그), café (카페), Knowledge iN (지식iN), news, shopping and video blocks are not part of the output, and a place row carries the place's ID and link rather than its name. If those blocks are what you need, this is not the right tool; if you need to know which websites, places and advertisers Naver puts in front of a searcher, it is.

### What you get per result

| Field | What it tells you |
|---|---|
| `query` | The search term this row was found for |
| `block` | Which part of the results the row comes from: `web`, `place`, `ad` or `image` |
| `position` | Rank within that block for the search term (1 = first) |
| `page` | The results page the item was on. `1` is Naver's main results page |
| `title` | The result's title (ad headline for ads) |
| `url` | Link to the page, the place or the ad |
| `domain` | The site's domain without `www.` — the advertiser's domain for ads |
| `displayed_url` | The address line Naver shows with the result, e.g. `namu.wiki›날씨` |
| `description` | The snippet under the title; the ad text for ads; the tagline or address for places |
| `date` | The date label Naver shows with a result, as written: `2026.05.01.` or `3일 전` |
| `published_date` | The same date as `YYYY-MM-DD` (Korea time) where it can be told to the day |
| `highlighted` | The words Naver prints in bold in the snippet |
| `sitelinks` | Ads: the extra links under the ad, each with `title` and `url` |
| `place_id`, `rating`, `reviews_count`, `open_status` | Places: Naver's place ID, star rating, number of reviews and the open/closed label |
| `thumbnail_url`, `image_url` | Images: Naver's thumbnail and the original image address |
| `device`, `country`, `checked_at` | Exactly which search the row came from, so results stay reproducible |

Every row has the same columns, so exports to CSV, Excel or a database stay stable; columns that do not apply to a block are empty. A run summary is saved alongside the data with the number of searches, rows per block, duplicates removed and the billing breakdown.

### Use cases

- **Korean SEO rank tracking** — where your domain ranks on Naver for each keyword, on desktop and on mobile, as deep as position 100.
- **Competitor research** — which sites own a keyword's top results in Korea, and how that changes week to week.
- **Ad monitoring** — who is buying your keywords on Naver, with their headlines, ad text and sitelinks.
- **Local visibility** — which places Naver lists for a local search, tracked by place ID with rating and review counts.
- **Market-entry research** — what Korean searchers are shown for your category before you localise a page.
- **AI agents and RAG pipelines** — fresh, structured Korean web results with source and position on every item.

### How to use

1. Add one or more **Search terms** — each one is a separate Naver search. Korean terms return the richest results.
2. Set **Web results per search term** (1–100).
3. Choose the **Device**: desktop or mobile. Pick mobile if you want ads.
4. Leave **Include places** and **Include ads** on to get those rows free, and turn on **Include image results** if you want images too.
5. Click **Start**, then export the dataset as JSON, CSV or Excel, or read it through the Apify API.

Schedule the Actor to run every morning and you have a Naver rank tracker.

#### Example input

```json
{
  "queries": ["날씨", "서울 맛집", "아이폰 16"],
  "maxResultsPerQuery": 30,
  "device": "mobile",
  "includePlaces": true,
  "includeAds": true,
  "includeImages": false
}
```

#### Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `queries` | array of strings | — (required) | Search terms, up to 200 per run. Duplicates are removed. |
| `maxResultsPerQuery` | integer | `10` | Web results to return per search term, 1–100. |
| `device` | string | `desktop` | `desktop` or `mobile`. Ads are returned on mobile. |
| `includePlaces` | boolean | `true` | Return the places of Naver's place block as extra rows (not charged). |
| `includeAds` | boolean | `true` | Return search ads as extra rows (not charged). |
| `includeImages` | boolean | `false` | Return the image block as extra rows (not charged). |

The country is always South Korea: Naver is searched the way a user there sees it.

#### Example output

Two real rows from a `서울 맛집` search. A web result:

```json
{
  "record_type": "result",
  "query": "서울 맛집",
  "block": "web",
  "position": 3,
  "page": 1,
  "title": "서울 맛집 추천 베스트 15 | 2026 맛집 베스트 지도 리스트",
  "url": "https://suggestravel.com/%EC%84%9C%EC%9A%B8-%EB%A7%9B%EC%A7%91/",
  "domain": "suggestravel.com",
  "displayed_url": "suggestravel.com›서울-맛집",
  "description": "서울 맛집 추천 베스트 15를 2026년 기준으로 정리했습니다. 명동, 광화문, 여의도, 마포, 강남, 송파 맛집 을 지도 링크와 상황별 코스로 확인하세요.",
  "date": "2026.05.01.",
  "published_date": "2026-05-01",
  "highlighted": ["서울 맛집", "맛집"],
  "sitelinks": null,
  "place_id": null,
  "rating": null,
  "reviews_count": null,
  "open_status": null,
  "thumbnail_url": null,
  "image_url": null,
  "device": "desktop",
  "country": "kr",
  "checked_at": "2026-10-12T02:56:02.659Z"
}
```

And a place from the same search (not charged):

```json
{
  "record_type": "result",
  "query": "서울 맛집",
  "block": "place",
  "position": 3,
  "page": 1,
  "title": null,
  "url": "https://map.naver.com/p/entry/place/2081278821",
  "domain": "map.naver.com",
  "displayed_url": null,
  "description": null,
  "date": null,
  "published_date": null,
  "highlighted": null,
  "sitelinks": null,
  "place_id": "2081278821",
  "rating": 4.94,
  "reviews_count": 1669,
  "open_status": "영업 중",
  "thumbnail_url": null,
  "image_url": null,
  "device": "desktop",
  "country": "kr",
  "checked_at": "2026-10-12T02:56:02.659Z"
}
```

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

Pay per event. No monthly fee, no setup fee, and you never pay for a search that failed.

| Event | Price |
|---|---|
| Actor start | $0.002 per run |
| Web search result | **$0.003 per web result — $3.00 per 1,000** |
| Place, ad and image rows | free |

- One search term, 10 web results: $0.002 + 10 × $0.003 = **$0.032**.
- Ten search terms, 10 web results each (100 rows): **$0.302**.
- Ten search terms, 100 web results each (1,000 rows): **$3.002**.

You pay per web result actually returned. Each search has a small fixed cost of its own, so a search that returns only one or two web results can be billed as up to three; the run summary shows any such units as `minimum_charge_units_added`. A search with no results adds nothing beyond the start fee.

### FAQ

**Do I need an API key, a Naver account or a proxy?** No. Add your search terms and run — everything else is handled for you.

**Why did a search return fewer results than I asked for?** Naver lists what it has for that term. Common terms have 100 or more web results; a narrow or misspelled term can have a handful. You are charged only for the web results returned, and the log names every search that came back short.

**Does it return blog, café, news or shopping results?** No. The output is the ranked web results, the place block, mobile ads and, optionally, images. Naver's blog, café, Knowledge iN, news, shopping and video blocks are not included.

**Why does a place row have no name?** Place rows identify the place by its Naver place ID and link, and carry its rating, review count and open status. The name is not part of the output; open the link, or match the ID against your own list of places.

**Why are there no ads in my desktop run?** Ads are returned for mobile searches. Set **Device** to mobile to get them.

**What is `page`, and why do positions not restart on each page?** `position` is the rank in the full list for the search term. `page` tells you where Naver showed the result: page 1 is the main results page, the following pages are the rest of the web listing. Results Naver repeats on a later page are returned once, at the first position they appeared.

**Can I search in English?** Yes. Any language works, but Naver indexes the Korean web first, so Korean terms return the most.

**Can I search other countries?** No. Naver is a South Korean search engine and the Actor always searches it as a user in South Korea.

**How long does a run take?** Usually under a minute, however many search terms are in it: the searches run side by side.

**Can I run it on a schedule or from my own code?** Yes. Use Apify schedules for recurring runs, or call the Actor through the Apify API, n8n, Make or Zapier.

### More search and SERP tools

- [Yandex SERP Scraper](https://apify.com/santhej/yandex-serp-scraper) — organic results and ads from the other big non-Google engine.
- [Google SERP API](https://apify.com/santhej/google-search-results-scraper) — organic results, People Also Ask and AI Overview for any query.
- [Google News Scraper](https://apify.com/santhej/google-news-scraper) — articles, publishers and publish times for any topic, including the South Korean edition.
- [Google Maps Scraper](https://apify.com/santhej/google-maps-scraper) — business listings with phone, reviews and GPS.

***

*Tags: naver search scraper, naver scraper, naver search api, naver serp, naver serp api, naver rank tracker, korean seo, korea search engine scraper, naver keyword ranking, naver ads, naver powerlink, naver place, korean serp, 네이버 검색, 네이버 검색 순위*

# Actor input Schema

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

What to type into the Naver search bar, for example 날씨, 서울 맛집 or 아이폰 16. Korean terms return the richest results; English works too. One search per line, up to 200 per run. Duplicates are removed.

## `maxResultsPerQuery` (type: `integer`):

How many ranked web results to return for each search term (1-100). You are charged per web result actually returned.

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

Desktop returns the results of search.naver.com. Mobile returns the results a phone sees and is where Naver's search ads are returned. The country is always South Korea.

## `includePlaces` (type: `boolean`):

For local searches such as 강남역 카페, Naver shows a block of places. With this on, each place is returned as an extra row with its Naver place ID, link, rating and review count. These rows are not charged.

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

Return Naver's search ads (파워링크) as extra rows: headline, ad text, advertiser domain and sitelinks. Ads are returned for mobile searches. These rows are not charged.

## `includeImages` (type: `boolean`):

Return the images of Naver's image block as extra rows (thumbnail and original image address), up to about 30 per search term. These rows are not charged. Off by default to keep the dataset focused on ranked results.

## Actor input object example

```json
{
  "queries": [
    "날씨"
  ],
  "maxResultsPerQuery": 10,
  "device": "desktop",
  "includePlaces": true,
  "includeAds": true,
  "includeImages": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

One row per result.

## `summary` (type: `string`):

What was requested, what came back, any failures and the billing breakdown for the run.

# 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 = {
    "queries": [
        "날씨"
    ],
    "maxResultsPerQuery": 10,
    "device": "desktop"
};

// Run the Actor and wait for it to finish
const run = await client.actor("santhej/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 = {
    "queries": ["날씨"],
    "maxResultsPerQuery": 10,
    "device": "desktop",
}

# Run the Actor and wait for it to finish
run = client.actor("santhej/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 '{
  "queries": [
    "날씨"
  ],
  "maxResultsPerQuery": 10,
  "device": "desktop"
}' |
apify call santhej/naver-search-scraper --silent --output-dataset

```

## MCP server setup

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