# Naver Map Scraper: Korean Leads & Menus | $1/1K 네이버 지도 (`unitbytes/naver-map-scraper`) Actor

⚡ 네이버 지도 검색·B2B DB 수집 ($1.00/1K): 지역·업종별 상호명, 전화번호(0507), 도로명·지번주소, 위경도(GPS), 홈페이지·인스타그램, 영업시간, 메뉴 가격표 추출. Fast Naver Map Scraper for Korean B2B business leads, phones, coordinates, menus, hours & ratings by keyword or GPS.

- **URL**: https://apify.com/unitbytes/naver-map-scraper.md
- **Developed by:** [UnitBytes | Enterprise Web Data](https://apify.com/unitbytes) (community)
- **Categories:** Lead generation, SEO tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 business lead scrapeds

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

<p align="center">
  <a href="https://apify.com/unitbytes/naver-map-scraper?fpr=939u3w&fp_sid=readme" target="_blank">
    <img src="https://raw.githubusercontent.com/unitbytes/.github/main/assets/banners/unitbytes-naver-map-place-scraper-korea-business-leads-reviews-banner.jpg" alt="Naver Map Scraper (네이버 지도 크롤러) by UnitBytes" width="100%" />
  </a>
</p>

<p align="center">
  <a href="https://console.apify.com/actors/X795KjJzpAwmol4yi/input" target="_blank">
    <img src="https://raw.githubusercontent.com/unitbytes/.github/main/assets/try-it-for-free.svg" width="240" height="48" alt="Try it for Free">
  </a>
  <br>
  <sub>⚡ <b>1-Click Free Trial:</b> Search & extract South Korean local businesses from Naver Map (`map.naver.com`) from \$1.00 / 1,000</sub>
</p>

## Naver Map Scraper: Korean Leads & Menus | $1.00 / 1K (네이버 지도 데이터·상권 DB 수집)

Search **Naver Map (`map.naver.com`)** by keyword, GPS coordinates, or direct Map URL to extract verified South Korean local business leads, phone numbers (`0507` SmartCall & direct lines), road (`도로명`) and lot (`지번`) addresses, GPS coordinates (`latitude` / `longitude`), official websites & Instagram links, 7-day opening hours, full menus with KRW prices, and customer reviews.

> **🇰🇷 한국어 요약 (Korean Overview):**
> \*\*네이버 지도(Naver Map, `map.naver.com`)\*\*에서 지역·업종 검색어(예: `강남 맛집`, `성수동 카페`, `강남 피부과`, `명동 호텔`, `홍대 미용실`) 또는 위경도 좌표(`searchCoordinates`)를 기준으로 \*\*전국 매장·기업 DB(상호명, 업종 카테고리, 전화번호·0507 안심번호, 도로명·지번 주소, 우편번호 코드, 위경도 GPS 좌표, 홈페이지·인스타그램·톡톡 링크, 지하철 출구 도보 안내, 주차 정보, 7일 영업시간, 전체 메뉴 및 가격표, 방문자·블로그 리뷰 수 및 평점)\*\*를 \*\*1,000건당 $1.00~\*\*의 최저가로 수집합니다.

***

### Why Choose This Naver Map Scraper?

- **All-in-One Transparent Pricing (From $1.00 / 1,000 Leads)**: Pay one flat rate (`result-scraped`) per business lead with full place details, menus, 7-day hours, websites, and embedded reviews included at **$0.00 extra add-on charge**.
- **Complete 45+ Field Korean B2B Lead Records**: Captures company/store names, categories across all verticals (`restaurant`, `hospital`, `hairshop`, `accommodation`, `place`), phone & SmartCall (`0507`) numbers, road & lot addresses, GPS coordinates, websites, Instagram links, Naver TalkTalk (`talktalkUrl`), and Naver Booking (`bookingUrl`).
- **GPS Coordinate Centering & Server-Side Distance Sorting**: Pass any `searchCoordinates` (`latitude,longitude`, e.g., `37.497942,127.027610`) and `sortBy: "distance"` or `"popular"` to map hyper-local commercial districts (`상권 분석`) across Seoul, Busan, Incheon, Daegu, and nationwide.
- **Full Menus, KRW Prices & Spend Analytics**: Extracts every menu item with integer KRW price (`priceKrw`), description, recommended flags, high-resolution menu photos, popular dishes (`popularMenusText`), average spend, and average stay time.
- **Clean Flat Schema for Excel, CSV & AI Workflows**: Exports directly to Excel, CSV, Google Sheets, Pandas (`pd.DataFrame(items)`), or [Apify MCP Server](https://mcp.apify.com/) without `[object Object]` formatting issues.

***

### What Data Can You Extract from Naver Map?

| Category | Extracted Fields |
| :--- | :--- |
| **B2B Identity & Contact** | `placeId`, `name`, `businessCategory` (`restaurant`, `hospital`, `hairshop`, `accommodation`, `place`), `category`, `categoryCode`, `phone`, `virtualPhone`, `talktalkUrl`, `homepageUrl`, `instagramUrl`, `allLinks` |
| **Address, GPS & Transit** | `roadAddress`, `address`, `commonAddress`, `fullAddress`, `postalCode`, `latitude`, `longitude`, `distance`, `directions`, `nearestSubway`, `parkingInfo`, `url`, `mapUrl` |
| **Operating Hours & Booking** | `businessStatus` (e.g., `영업 중`), `businessHoursText`, `businessHours` (7-day schedule with break times & last order), `conveniences`, `paymentMethods`, `hasBooking`, `bookingUrl` |
| **Menus & Spend Insights** | `menuCount`, `menus` (`name`, `priceText`, `priceKrw`, `description`, `isRecommended`, `imageUrl`), `menuImages`, `popularMenusText`, `priceAvgDescription`, `stayTimeDescription` |
| **Ratings & Sentiment** | `rating`, `visitorReviewCount`, `blogCafeReviewCount`, `bookingReviewCount`, `saveCount`, `imageReviewCount`, `topVotedKeywords`, `reviewThemes`, `microReview`, `description` |
| **Embedded Reviews & Photos** | `visitorReviews`, `blogReviews`, `mainImage`, `imageCount`, `images` (permanent uncropped HD URLs) |

***

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `queries` | `array` | `["강남 맛집"]` | Search terms to look up on Naver Map (e.g., `강남 맛집`, `성수동 카페`, `강남 피부과`, `명동 호텔`, `홍대 미용실`). Also accepts direct URLs or Place IDs. |
| `placeUrls` | `array` | `[]` | Direct Naver Map URLs (`https://map.naver.com/p/entry/place/2025884279`), Map search URLs (`https://map.naver.com/p/search/강남%20맛집`), Mobile Place URLs, `naver.me` shortlinks, or numeric Place IDs. Automatically overrides prefilled `queries`. |
| `scrapeDetails` | `boolean` | `true` | Fetch complete business details (menus, 7-day hours, subway directions, website & social links, sentiment breakdown, and reviews). Set `false` for rapid 50-per-page summary cards. |
| `maxItems` | `integer` | `20` | Maximum number of businesses (or reviews in `reviews` mode) to collect. |
| `sortBy` | `string` | `"popular"` | Server-side search sort order: `"popular"` (Relevance/Popularity), `"precision"` (Exact Match), or `"distance"` (Nearest to `searchCoordinates`). |
| `searchCoordinates` | `string` | `""` | Optional map center coordinates as `latitude,longitude` (e.g., `37.497942,127.027610` for Gangnam Station). |
| `maxReviewsPerPlace` | `integer` | `10` | Maximum visitor reviews (`방문자 리뷰`) to embed per business (`0`–`5000`). |
| `includeBlogReviews` | `boolean` | `true` | Include linked Naver Blog & Cafe reviews (`블로그 리뷰`) for each business. |
| `maxBlogReviewsPerPlace` | `integer` | `10` | Maximum linked blog/cafe reviews per business (`0`–`500`). |
| `onlyPhotoReviews` | `boolean` | `false` | Filter visitor reviews 100% server-side on Naver (`isPhotoUsed`) to only return photo reviews. |
| `mode` | `string` | `"places"` | `"places"` (one record per business) or `"reviews"` (one record per review). |
| `language` | `string` | `"ko"` | `"ko"` (original Korean) or `"en"` (English localized category and address names). |
| `startPage` | `integer` | `1` | Starting page number for keyword searches (50 businesses per page). |
| `resumptionToken` | `string` | `""` | Continuation token from `RESUMPTION_TOKEN` in the Key-Value Store to resume multi-batch pagination with 0 duplicate overlap. |

***

### Input Examples

#### Example 1: Search Korean Businesses by District & Category (`강남 맛집`, `성수동 카페`)

```json
{
    "queries": [
        "강남 맛집",
        "성수동 카페",
        "강남 피부과"
    ],
    "scrapeDetails": true,
    "maxItems": 50,
    "maxReviewsPerPlace": 10,
    "includeBlogReviews": true
}
```

#### Example 2: Hyper-Local GPS Radius Search Sorted by Nearest Distance (`sortBy: "distance"`)

```json
{
    "queries": [
        "홍대 미용실"
    ],
    "sortBy": "distance",
    "searchCoordinates": "37.5563,126.9236",
    "scrapeDetails": true,
    "maxItems": 30
}
```

#### Example 3: Fast Summary Discovery Mode (50 Businesses per Page)

```json
{
    "queries": [
        "명동 호텔"
    ],
    "scrapeDetails": false,
    "maxItems": 100
}
```

***

### Output Sample (`places` Mode)

```json
{
    "placeId": "2025884279",
    "name": "서울 미식 다이닝 강남점",
    "businessCategory": "restaurant",
    "category": "한식",
    "categoryCode": "220053",
    "phone": "0507-0000-0000",
    "virtualPhone": "0507-0000-0000",
    "roadAddress": "서울 강남구 테헤란로 100 1층",
    "address": "서울 강남구 역삼동 100-1",
    "commonAddress": "서울 강남구 역삼동",
    "fullAddress": "서울 강남구 테헤란로 100 1층",
    "postalCode": "09680108",
    "latitude": 37.5206335,
    "longitude": 127.0361667,
    "distance": "2.6km",
    "directions": "강남구청역 3-1번 출구로 나오셔서 보이는 올리브영 방향으로 쭉 직진하시다가 커피빈 골목에서 왼쪽으로 꺾어서 200m정도 오시면 왼쪽에 있습니다.",
    "nearestSubway": "강남구청역 7호선",
    "parkingInfo": "2시간 4000원 (발렛파킹 가능)",
    "businessStatus": "영업 중",
    "businessHoursText": "02:00에 영업 종료",
    "businessHours": [
        {
            "day": "월",
            "start": "11:00",
            "end": "02:00"
        }
    ],
    "rating": 4.97,
    "visitorReviewCount": 177,
    "blogCafeReviewCount": 37,
    "bookingReviewCount": 0,
    "imageReviewCount": 143,
    "popularMenusText": "소금김밥, 대물 숙성회 정식(광어), 1% 대광어 숙성회",
    "menuCount": 6,
    "menus": [
        {
            "name": "1% 대광어 숙성회",
            "priceText": "56,000원",
            "priceKrw": 56000,
            "description": "중 56000 / 대 78000",
            "isRecommended": true,
            "imageUrl": "https://ldb-phinf.pstatic.net/example_place_photo_01.jpg"
        }
    ],
    "topVotedKeywords": [
        {
            "code": "food_good",
            "keyword": "음식이 맛있어요",
            "count": 165
        },
        {
            "code": "fresh",
            "keyword": "재료가 신선해요",
            "count": 121
        }
    ],
    "conveniences": [
        "포장",
        "단체 이용 가능",
        "예약",
        "남/녀 화장실 구분",
        "간편결제",
        "주차",
        "발렛파킹"
    ],
    "paymentMethods": [
        "간편결제"
    ],
    "hasBooking": true,
    "homepageUrl": "https://map.naver.com/p/entry/place/2025884279",
    "instagramUrl": null,
    "allLinks": [
        "https://map.naver.com/p/entry/place/2025884279"
    ],
    "microReview": "한 점 한 점 정성 가득한 숙성회",
    "mainImage": "https://ldb-phinf.pstatic.net/example_place_photo_01.jpg",
    "imageCount": 57,
    "url": "https://map.naver.com/p/entry/place/2025884279",
    "mapUrl": "https://m.place.naver.com/restaurant/2025884279/home",
    "searchQuery": "강남 맛집",
    "detailLevel": "full",
    "language": "ko",
    "scrapedAt": "2026-10-28T12:00:00.000000+00:00"
}
```

***

### Pricing (Pay-Per-Event)

This Actor uses transparent **Pay-Per-Event (PPE)** pricing with Apify Compute and Proxy usage included:

| Event Name | Event ID | No Discount (Free) | Bronze Discount | Silver Discount | Gold+ Discount | Description |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| **Actor Start** | `apify-actor-start` | **$0.00005** | **$0.00005** | **$0.00005** | **$0.00005** | Charged once when the run starts. |
| **Business Lead Scraped** | `result-scraped` | **$1.40 / 1,000**<br>(`$0.0014`) | **$1.20 / 1,000**<br>(`$0.0012`) | **$1.10 / 1,000**<br>(`$0.0011`) | **$1.00 / 1,000**<br>(`$0.0010`) | Charged per valid Naver Map business listing (or standalone review item) pushed to the dataset. |

- **$0.00 for Missing Targets or Empty Searches**: Non-existent Place IDs, zero-result queries, and input validation errors are never billed.
- **Strict Maximum Cost Cap Support**: Respects your Apify run budget limit (`maxTotalChargeUsd`) and stops cleanly the instant your cap is reached.

***

### Support & Feedback

Need custom fields, higher volume tips, or found an edge case? Open an issue directly in the Actor's **Issues** tab on the Apify Console and we will respond promptly.

***

### Legal & Compliance Disclaimer

This Actor extracts **strictly publicly available business directory and review data** from public Naver Map and Naver Place listings. It does not log in, bypass authentication walls, or collect private user account details. Users are responsible for ensuring that their data collection and processing comply with all applicable laws, privacy regulations, and platform terms of service. See Apify's guide on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) for more information.

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by NAVER Corp. or any of its subsidiaries.

# Actor input Schema

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

Keywords to search on Naver Map (`map.naver.com`, e.g., `강남 맛집`, `성수동 카페`, `강남 피부과`, `명동 호텔`, `홍대 미용실`). You can also paste direct Naver Map URLs or Place IDs here.

## `placeUrls` (type: `array`):

Optional list of direct Naver Map URLs (`https://map.naver.com/p/entry/place/2025884279`), Map Search URLs (`https://map.naver.com/p/search/강남%20맛집`), Mobile Place URLs, `naver.me` shortlinks, or numeric Place IDs (`2025884279`). Overrides prefilled search queries.

## `scrapeDetails` (type: `boolean`):

When enabled (default), extracts 7-day opening hours, full menu list with KRW prices & photos, walking directions, nearest subway stations, parking fees, website/Instagram links, sentiment keyword breakdown, and recent reviews. Disable for rapid 50-per-page map search cards.

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

Maximum number of business listings (or reviews in `reviews` mode) to collect across the run.

## `sortBy` (type: `string`):

Server-side sorting order for Naver Map search results (`popular` / relevance default, `precision`, or `distance` from `searchCoordinates`).

## `searchCoordinates` (type: `string`):

Optional GPS center point as `latitude,longitude` (e.g., `37.497942,127.027610` for Gangnam Station, Seoul) used for localized map search ranking and `distance` sorting.

## `maxReviewsPerPlace` (type: `integer`):

Maximum number of visitor reviews (방문자 리뷰) to embed per business when `scrapeDetails` is enabled.

## `includeBlogReviews` (type: `boolean`):

Include Naver Blog and Cafe review posts linked to each business.

## `maxBlogReviewsPerPlace` (type: `integer`):

Maximum number of linked Naver Blog / Cafe reviews to fetch per business.

## `onlyPhotoReviews` (type: `boolean`):

Filter visitor reviews server-side to only return reviews that include customer-uploaded photos.

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

Outputs one record per business (`places`, default) or one row per review (`reviews`).

## `language` (type: `string`):

Language preference for Naver Map category and address fields (`ko` for original Korean, `en` for English localized strings where available).

## `startPage` (type: `integer`):

1-indexed search page to start from (50 businesses per page).

## `resumptionToken` (type: `string`):

Optional compact continuation token emitted at the end of a previous batch run (`RESUMPTION_TOKEN` in Key-Value Store) to resume pagination with 0 duplicate overlap.

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

Proxy settings for accessing Naver Map endpoints reliably.

## Actor input object example

```json
{
  "queries": [
    "강남 맛집"
  ],
  "scrapeDetails": true,
  "maxItems": 20,
  "sortBy": "popular",
  "maxReviewsPerPlace": 10,
  "includeBlogReviews": true,
  "maxBlogReviewsPerPlace": 10,
  "onlyPhotoReviews": false,
  "mode": "places",
  "language": "ko",
  "startPage": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "queries": [
        "강남 맛집"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("unitbytes/naver-map-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": ["강남 맛집"] }

# Run the Actor and wait for it to finish
run = client.actor("unitbytes/naver-map-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": [
    "강남 맛집"
  ]
}' |
apify call unitbytes/naver-map-scraper --silent --output-dataset

```

## MCP server setup

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