# Naver Map Places Scraper - Korea Local Business API (`roadster/naver-local-search`) Actor

Find Korean restaurants, cafes, shops and businesses on Naver (Korea's #1 map/search) by keyword and area. Get name, category, address, phone, lat/lng. Official NAVER API, no blocking. Free sample.

- **URL**: https://apify.com/roadster/naver-local-search.md
- **Developed by:** [yonghoon choi](https://apify.com/roadster) (community)
- **Categories:** Lead generation, Travel
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 place results

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

## Naver Map Places Scraper — Korea Local Business API (Official)

**Scrape Korean places from Naver Map search — restaurants, cafes, hotels, clinics, shops — by keyword and area.** Naver is Korea's #1 search engine and map, where Google Maps data is thin. This Actor uses the **official NAVER Local Search API**, so there are no blocks, captchas or proxies. Export name, category, road address, phone, latitude/longitude and website to CSV, Excel or JSON for lead generation, store-location analysis and Korea market maps. Run without a key to get a free sample.

> 한국어: 네이버 지도/플레이스 장소 검색(맛집, 카페, 상점)을 공식 API로 수집합니다.

### What it does

- Queries NAVER Local Search for every `region + keyword` combination.
- Optionally queries both sort orders (`random` = relevance, `comment` = most reviewed) to get more unique places.
- Deduplicates by name + address, strips HTML, converts coordinates to WGS84 lat/lng.

### Input example

```json
{
  "keywords": ["카페"],
  "regions": ["성수동", "연남동"],
  "sortBoth": true,
  "maxItems": 100,
  "clientId": "<your NAVER API HUB Client ID>",
  "clientSecret": "<your Client Secret>"
}
```

### Output example (real run)

```json
{
  "name": "한입베이글 성수점",
  "category": "음식점>카페,디저트",
  "description": null,
  "address": "서울특별시 성동구 성수동1가 656-253 1층",
  "roadAddress": "서울특별시 성동구 뚝섬로 317 1층",
  "telephone": null,
  "mapx": 1270461763, "mapy": 375413535,
  "longitude": 127.0461763, "latitude": 37.5413535,
  "link": "https://blog.naver.com/hanibbagel",
  "keyword": "카페", "region": "성수동", "query": "성수동 카페",
  "sort": "random", "scrapedAt": "2026-10-25T12:11:44.628Z"
}
```

### Limits & tips

- **NAVER returns at most ~5 places per API call.** With both sort orders you get ~9–10 unique places per query. To get hundreds of places, add **more regions** (동/구 names like 성수동, 합정동, 강남구 역삼동) and **more keywords** (카페, 디저트, 베이커리…).
- Quota: NAVER API HUB search APIs share **25,000 calls/day** per application (free tier). Each query uses 1–2 calls.
- Runs are fast and cheap (a 2-query run took ~5 s and ~0.002 compute units).

### How to get your free NAVER API key (5 minutes)

1. Sign up / log in at [NAVER Cloud Platform](https://www.ncloud.com) (individual membership is fine).
2. Open the console: [NAVER API HUB](https://console.ncloud.com/naver-api-hub) and subscribe (free tier; no payment needed for the free quota).
3. Go to **Application > Register application**, name it (e.g. `apify`), and enable the APIs this Actor needs.
4. Open the application, tab **인증 정보 (Credentials)**, copy **Client ID** and **Client Secret**.
5. Paste them into the secret input fields of this Actor. They are stored encrypted by Apify and only used to call NAVER on your behalf.

Your key, your quota: all calls count against **your** NAVER API HUB quota, not a shared one.

### Free sample mode

Run without a key to preview the output: the Actor returns 2–3 fixed sample rows marked `"isSample": true`, makes **no API call and charges nothing**, and logs a warning. Real rows have `"isSample": false`. Add your own key for real data.

### Pricing

Pay-per-event: **$1.50 per 1,000 results** (one place = one result) plus normal Apify platform usage, which is tiny for this Actor.

### Official API & terms

This Actor only calls the **official NAVER API HUB** (`naverapihub.apigw.ntruss.com`) with your own credentials. It does not scrape naver.com pages, bypass logins or collect personal data. You are responsible for complying with the [NAVER Cloud Platform terms](https://www.ncloud.com/policy/terms/service) and NAVER API usage policies (display/attribution, no resale of raw data where prohibited). Not affiliated with or endorsed by NAVER.

### 한국어 요약

키 없이 실행하면 무료 샘플 데이터 2~3건(isSample=true)만 반환하며 API 호출·과금이 없습니다. 실제 데이터는 본인 키가 필요합니다.
네이버 공식 API(NAVER API HUB 지역 검색)로 지역×키워드 조합의 매장 정보(상호, 업종, 도로명주소, 전화, 위경도, 링크)를 수집합니다. 호출당 최대 약 5건이므로 지역(동/구)과 키워드를 늘려 주세요. 본인의 NAVER Cloud API HUB Client ID/Secret(무료)이 필요합니다. 결과 1,000건당 $1.5.

# Actor input Schema

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

Business/place search terms, e.g. 카페, 치과, 헬스장.

## `regions` (type: `array`):

Districts/neighborhoods combined with every keyword (e.g. 강남구, 서초구, 정자동). Each keyword × region pair is one API call (max 5 results each), so more regions = more coverage.

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

random = relevance; comment = places with most blog/cafe review mentions first.

## `sortBoth` (type: `boolean`):

Call each query with both sort orders to get up to 10 unique places per query instead of 5.

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

Stop after this many unique places.

## `clientId` (type: `string`):

Your own NAVER API HUB Client ID (free; NAVER Cloud console > NAVER API HUB > Application > 인증 정보). Stored encrypted. Leave empty to get a small FREE SAMPLE dataset (isSample=true) without any API call or charge.

## `clientSecret` (type: `string`):

Your own NAVER API HUB Client Secret (free; NAVER Cloud console > NAVER API HUB > Application > 인증 정보). Stored encrypted. Leave empty to get a small FREE SAMPLE dataset (isSample=true) without any API call or charge.

## Actor input object example

```json
{
  "keywords": [
    "카페"
  ],
  "regions": [
    "강남구",
    "서초구"
  ],
  "sort": "random",
  "sortBoth": true,
  "maxItems": 1000
}
```

# Actor output Schema

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

All places rows

# 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 = {
    "keywords": [
        "카페"
    ],
    "regions": [
        "강남구",
        "서초구"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("roadster/naver-local-search").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 = {
    "keywords": ["카페"],
    "regions": [
        "강남구",
        "서초구",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("roadster/naver-local-search").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 '{
  "keywords": [
    "카페"
  ],
  "regions": [
    "강남구",
    "서초구"
  ]
}' |
apify call roadster/naver-local-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,roadster/naver-local-search"
        }
    }
}
```

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/pmgcud5KmzBWJoPUR/builds/2EDKdVvgfaqVZHkgo/openapi.json
