# Naver Place Details & Reviews Scraper - $1.50 / 1000 Places (`scrapeunblocker/naver-place-details-scraper`) Actor

Full Naver Place (네이버 플레이스) detail of Korean businesses: opening hours, menus with prices, photos, facilities, links, nearby subway, review stats, plus 10 visitor reviews (text, rating, dates, keywords, owner reply) and blog reviews per place. $1.50 per 1000 places.

- **URL**: https://apify.com/scrapeunblocker/naver-place-details-scraper.md
- **Developed by:** [Scrapeunblocker](https://apify.com/scrapeunblocker) (community)
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 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 Place Details & Reviews Scraper

Get the **full Naver Place (네이버 플레이스) detail** of Korean businesses as clean structured JSON, together with their **visitor reviews** and **blog / cafe reviews**: addresses, phone, coordinates, opening hours per day with breaks and last order, description, directions, conveniences, facilities, payment methods, keywords, menus with prices, photos, homepage and social links, booking link, nearby subway stations with walking time, Michelin flag and visitor-review statistics (average rating, star distribution, keyword votes, themes, most mentioned menus). Each place comes with its first 10 visitor reviews (text, rating, written and visit dates, receipt / booking verification, keywords, situations, photos, reactions, reviewer stats and owner reply) and its first blog reviews. Korean text is returned as is. No Naver account, no API key, no proxies to configure.

### Features

- **Any place input** - a Naver Map link (`https://map.naver.com/p/entry/place/11571707`), a Naver Place link (`https://m.place.naver.com/restaurant/2097258400/home`) or the numeric place id.
- **Or find places by search** - give search queries (`강남 맛집`, `홍대 카페`) and the top places of each search are fetched in full.
- **Every business type** - restaurants, cafes, hospitals, salons, hotels, attractions: the same detail page serves them all.
- **10 visitor reviews per place** - in Naver's default order or newest first, with the reviewer's review / photo counts, average rating and followers, and the owner's reply.
- **Review statistics** - average rating, total and photo review counts, star distribution, the "what's good here" keyword votes, themes and menu mentions.
- **Blog and cafe reviews** - title, link, excerpt, author, blog name, date and thumbnail, plus the place's total blog review count.
- **Deduplicated** - the same place given twice (id and link, or found by two searches) is fetched once.

### Use cases

- **Restaurant and retail intelligence** - menus and prices, hours, facilities and review sentiment of Korean businesses.
- **Reputation monitoring** - newest visitor reviews and owner replies for your own or competitors' places.
- **Lead generation** - homepage, Instagram, phone, booking link of businesses by category and area.
- **Travel and mapping apps** - coordinates, subway access, photos and opening hours.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `places` | array | Gyeongbokgung (example) | Naver Map / Naver Place links or place ids. |
| `searchQueries` | array | - | Optional Naver Map searches; their top places are fetched in full. |
| `maxPlacesPerQuery` | integer | `5` | Places fetched per search query (1-50). |
| `reviewSort` | string | `relevance` | `relevance` (Naver's default) or `recent` (newest first). |
| `proxyCountry` | string | - | Optional exit-IP country (ISO-2). Leave empty for the most reliable exit. |
| `concurrency` | integer | `3` | Places fetched at the same time (1-5). |

#### Example input

```json
{
  "places": [
    "https://map.naver.com/p/entry/place/2097258400",
    "11571707"
  ],
  "searchQueries": ["홍대 카페"],
  "maxPlacesPerQuery": 10,
  "reviewSort": "recent"
}
```

### Output

One dataset item per place (shortened):

```json
{
  "id": "2097258400",
  "name": "오몬자",
  "category": "일식당",
  "businessType": "restaurant",
  "address": "서울 강남구 봉은사로2길 19 1층",
  "jibunAddress": "서울 강남구 역삼동 810-4",
  "phone": "0507-1312-1321",
  "isVirtualPhone": true,
  "latitude": 37.5035726,
  "longitude": 127.0261977,
  "rating": 4.88,
  "visitorReviewCount": 6859,
  "textReviewCount": 6666,
  "blogReviewCount": 671,
  "status": "영업 전",
  "statusDescription": "11:30에 영업 시작",
  "businessHours": [{"name": null, "days": [{"day": "수", "open": "11:30", "close": "23:00", "breaks": [], "lastOrder": "22:00"}], "regularClosedDays": null}],
  "description": "강남 신논현에서 만나는 도쿄 츠키시마 스타일 몬자야끼 전문점 ...",
  "conveniences": ["예약", "남/녀 화장실 구분", "단체 이용 가능", "간편결제"],
  "keywords": ["몬자야끼", "강남몬자야끼", "강남야끼소바"],
  "homepage": "https://ohmonja.com",
  "links": [{"type": "인스타그램", "url": "https://www.instagram.com/oh_monja"}],
  "menus": [{"name": "명란모찌몬자야끼", "price": "21,800원", "description": "몬자야끼 대표메뉴 ...", "isSetMenu": false}],
  "photos": ["https://ldb-phinf.pstatic.net/20251117_3/1763339289891sVASH_JPEG/9577A393-DF75-47F6-B7A2-B171A154FB9E.jpeg"],
  "photoCount": 283,
  "bookingUrl": "https://m.booking.naver.com/booking/6/bizes/1529676",
  "subwayStations": [{"name": "신논현역", "line": "신분당선", "nearestExit": "4", "walkMinutes": 3, "walkMeters": 174}],
  "reviewStats": {
    "averageRating": 4.88,
    "totalCount": 6859,
    "imageReviewCount": 5847,
    "starDistribution": [{"score": 5.0, "count": 3100}, {"score": 4.5, "count": 384}],
    "keywordVotes": [{"keyword": "음식이 맛있어요", "code": "food_good", "count": 6356}]
  },
  "url": "https://map.naver.com/p/entry/place/2097258400",
  "reviewsCollected": 10,
  "reviewSort": "relevance",
  "reviews": [
    {
      "id": "6ab61551c01ba53a79f21fd0",
      "rating": 5.0,
      "body": "처음 먹어본 몬자야끼 ...",
      "createdDate": "2026-09-25",
      "visitedAt": "2026-09-21T10:00:00.000Z",
      "verifiedBy": "영수증",
      "orderedItem": "명란모찌몬자",
      "keywords": ["음식이 맛있어요", "재료가 신선해요"],
      "situations": ["예약 후 이용", "비즈니스"],
      "media": [{"type": "image", "url": "https://pup-review-phinf.pstatic.net/..."}],
      "reactions": {"helpful": 3},
      "author": {"nickname": "여행은 즐거워요", "reviewCount": 635, "photoCount": 7097, "averageRating": 4.9, "followerCount": 160},
      "ownerReply": null
    }
  ],
  "blogReviewsTotal": 673,
  "blogReviews": [
    {"type": "blog", "title": "[강남/신논현] 일식 철판요리 몬자야끼 맛집!, 오몬자", "url": "https://m.blog.naver.com/hyunji316/224424401691", "author": "이내", "date": "2026.09.28.", "imageCount": 6}
  ],
  "searchQuery": null,
  "placeInput": "2097258400"
}
```

The **Visitor reviews** view (and the `reviews` output link) shows the same data with one row per review. The key-value store also holds `ERRORS` - places or search queries that returned no place (unknown id, no match, blocked) with the reason. These are **not billed**.

### Pricing

**$1.50 per 1000 places**, each with its full detail, up to 10 visitor reviews and the first blog reviews included. You pay only for places delivered; failed places and searches are not charged, and the search itself is free.

### Notes

- Each place comes with the first 10 visitor reviews Naver shows on its page; the actor does not page deeper into a place's review history.
- `createdDate` is the review date as a full date; Naver itself shows a short form (`created`, e.g. `9.25.금`).
- Some places hide their rating or have no blog reviews; those fields are then `null` or empty.

# Actor input Schema

## `places` (type: `array`):

Naver places: a Naver Map link (https://map.naver.com/p/entry/place/11571707), a Naver Place link (https://m.place.naver.com/restaurant/2097258400/home) or the numeric place id (11571707). naver.me short links are not supported - open one and paste the link it lands on. Empty runs use the example only when Search queries is empty too.

## `searchQueries` (type: `array`):

Optional. Naver Map searches (e.g. 강남 맛집, 홍대 카페): the top places of each search are fetched in full, like places given above.

## `maxPlacesPerQuery` (type: `integer`):

How many of the top places of each search query to fetch in full (1-50).

## `reviewSort` (type: `string`):

Which 10 visitor reviews come with each place: Naver's default order or the newest.

## `proxyCountry` (type: `string`):

Optional exit-IP country (ISO-2, e.g. KR, US). Leave empty: the exit is chosen for Naver automatically, which is the most reliable.

## `concurrency` (type: `integer`):

How many places to fetch at the same time (1-5).

## Actor input object example

```json
{
  "places": [
    "https://map.naver.com/p/entry/place/11571707"
  ],
  "maxPlacesPerQuery": 5,
  "reviewSort": "relevance",
  "concurrency": 3
}
```

# Actor output Schema

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

One item per place: detail, review statistics, 10 visitor reviews and blog reviews

## `reviews` (type: `string`):

The visitor reviews with one row per review

## `errors` (type: `string`):

Places or search queries that returned no place (unknown id, no match or blocked), with the reason (not billed)

# 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 = {
    "places": [
        "https://map.naver.com/p/entry/place/11571707"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeunblocker/naver-place-details-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 = { "places": ["https://map.naver.com/p/entry/place/11571707"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapeunblocker/naver-place-details-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 '{
  "places": [
    "https://map.naver.com/p/entry/place/11571707"
  ]
}' |
apify call scrapeunblocker/naver-place-details-scraper --silent --output-dataset

```

## MCP server setup

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