# Naver Place Reviews Scraper | $0.50/1K 네이버 플레이스 리뷰 (`unitbytes/naver-place-reviews-scraper`) Actor

⚡ 네이버 플레이스 방문자 리뷰·블로그 리뷰 추출 ($0.50/1K): 영수증 인증 리뷰, 별점, 방문 키워드, 사장님 답글, 고화질 사진, 블로그 포스팅까지 수집. Scrape Naver Place visitor reviews, ratings, sentiment keywords, owner replies, HD photos & linked Naver Blog reviews by URL, ID or keyword.

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

## Pricing

from $0.50 / 1,000 review 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-place-reviews-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 Place Reviews Scraper (네이버 플레이스 리뷰) by UnitBytes" width="100%" />
  </a>
</p>

<p align="center">
  <a href="https://console.apify.com/actors/fCXUoRmPLDbfbTmIq/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> Extract Naver Place receipt-verified visitor reviews & blog reviews from \$0.50 / 1,000</sub>
</p>

## Naver Place Reviews Scraper | $0.50 / 1K (네이버 플레이스 방문자·블로그 리뷰 수집)

Extract receipt-verified **Naver Place Visitor Reviews (`방문자 리뷰`)**, star ratings, customer-selected sentiment keywords (`votedKeywords`), owner replies (`사장님 답글`), visit dates, verification methods (`영수증` / `결제내역` / `예약`), uncropped HD review photos, and linked **Naver Blog & Cafe Reviews (`블로그 리뷰`)** by Place URL, Place ID, or search keyword.

> **🇰🇷 한국어 요약 (Korean Overview):**
> **네이버 플레이스(Naver Place)** 매장 링크(`map.naver.com`, `m.place.naver.com`), 플레이스 ID, 또는 검색어(`강남 맛집`, `성수동 카페`, `강남 피부과`)를 입력하여 **방문자 영수증 리뷰 본문, 별점, 방문일, 재방문 횟수, 방문자 선택 키워드("음식이 맛있어요", "친절해요"), 사장님 답글, 원본 고화질 리뷰 사진, 연동된 네이버 블로그·카페 리뷰**를 \*\*1,000건당 $0.50~\*\*의 초저가로 수집합니다. 서버 사이드 \*\*사진 리뷰 전용 필터링(`onlyPhotoReviews`)\*\*을 지원하며 Excel, CSV, JSON으로 즉시 내보낼 수 있습니다.

***

### Why Choose This Naver Place Reviews Scraper?

- **Lowest Price on Apify Store (From $0.50 / 1,000 Reviews)**: Collect up to 5,000 visitor reviews and 500 blog reviews per business starting at **$0.0005 per review** (Gold+ tier; $0.80/1K on Free tier) with zero extra charges for photos or parent place metadata.
- **Both Visitor Reviews (`방문자 리뷰`) & Blog Reviews (`블로그 리뷰`)**: Captures verified in-store customer reviews alongside long-form Naver Blog and Cafe review posts in one unified flat schema.
- **100% Server-Side Photo Review Filtering (`onlyPhotoReviews`)**: Filter directly on Naver's review server (`isPhotoUsed`) to pull exclusively reviews containing customer-uploaded photos without wasting quota on text-only reviews.
- **Rich Consumer Sentiment & Verification Metadata**: Extracts `votedKeywords` (e.g., *"음식이 맛있어요"*, *"재료가 신선해요"*), `verificationMethod` (`영수증`, `결제내역`, `네이버페이`), `visitCount` (repeat visitor tracking), `bookingItemName`, and `ownerReplyText` (`사장님 답글`).
- **100% Working Permanent HD Review Photos**: Automatically strips low-resolution thumbnail crop parameters from `pstatic.net` CDN links to deliver full-resolution original review images.
- **Clean Flat Schema for Excel, CSV & AI / LLM Pipelines**: Every review row is flattened with parent business context (`placeId`, `placeName`, `placeCategory`, `placeAddress`, `placeRating`) for instant export to Excel, Google Sheets, Pandas, or [Apify MCP Server](https://mcp.apify.com/).

***

### What Review Data Can You Extract?

| Category | Extracted Fields |
| :--- | :--- |
| **Review Content & Rating** | `reviewId`, `reviewType` (`visitor` or `blog`), `rating`, `title` (for blog posts), `text`, `createdAt`, `visitedAt`, `reviewUrl` |
| **Verification & Sentiment** | `verificationMethod` (`영수증`, `결제내역`, `예약`, `Blog`), `visitCount`, `viewCount`, `bookingItemName`, `votedKeywords`, `votedKeywordsText` |
| **Owner Reply (`사장님 답글`)** | `ownerReplyText`, `ownerReplyCreatedAt` |
| **HD Review Media** | `hasPhotos`, `photoCount`, `mainPhotoUrl`, `photoUrls` (full-resolution uncropped URLs) |
| **Reviewer Profile** | `authorId`, `authorNickname`, `authorProfileUrl`, `authorImageUrl`, `authorTotalReviews` |
| **Parent Business Context** | `placeId`, `placeName`, `placeCategory`, `businessCategory`, `placeAddress`, `placeRating`, `placeUrl`, `searchQuery`, `scrapedAt` |

***

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `placeUrls` | `array` | `["https://map.naver.com/p/entry/place/2025884279"]` | Direct Naver Map URLs (`https://map.naver.com/p/entry/place/2025884279`), Mobile Place URLs (`https://m.place.naver.com/restaurant/2025884279/home`), `naver.me` shortlinks, or numeric Place IDs (`2025884279`). |
| `queries` | `array` | `[]` | Optional search terms on Naver Map / Place (e.g., `강남 맛집`, `성수동 카페`, `강남 피부과`). Automatically overrides the prefilled Place URL when provided. |
| `maxItems` | `integer` | `20` | Maximum total number of reviews to collect across the run (`1`–`10000`). |
| `maxReviewsPerPlace` | `integer` | `20` | Maximum visitor reviews (`방문자 리뷰`) to fetch per place (`0`–`5000`). Automatically scales up to `maxItems` when scraping direct Place URLs. |
| `onlyPhotoReviews` | `boolean` | `false` | Filter visitor reviews 100% server-side on Naver (`isPhotoUsed`) to only return reviews with customer-uploaded photos. |
| `includeBlogReviews` | `boolean` | `true` | Include linked Naver Blog & Cafe review posts (`블로그 리뷰`) for each place. |
| `maxBlogReviewsPerPlace` | `integer` | `10` | Maximum linked blog/cafe reviews to fetch per place (`0`–`500`). |
| `mode` | `string` | `"reviews"` | `"reviews"` (default — one dataset row per review) or `"places"` (one row per place with embedded reviews). |
| `language` | `string` | `"ko"` | `"ko"` (original Korean) or `"en"` (English localized category and address names). |
| `resumptionToken` | `string` | `""` | Continuation token from `RESUMPTION_TOKEN` in the Key-Value Store to resume multi-batch runs with 0 duplicate overlap. |

***

### Input Examples

#### Example 1: Scrape Visitor & Blog Reviews from Specific Naver Place URLs or IDs

```json
{
    "placeUrls": [
        "https://map.naver.com/p/entry/place/2025884279",
        "https://m.place.naver.com/restaurant/1707220837/home"
    ],
    "maxItems": 200,
    "maxReviewsPerPlace": 100,
    "includeBlogReviews": true,
    "onlyPhotoReviews": false
}
```

#### Example 2: Scrape Only Photo-Verified Visitor Reviews (`onlyPhotoReviews: true`)

```json
{
    "placeUrls": [
        "2025884279"
    ],
    "onlyPhotoReviews": true,
    "includeBlogReviews": false,
    "maxItems": 150
}
```

#### Example 3: Search Businesses by Keyword & Collect Reviews Across Top Places

```json
{
    "queries": [
        "성수동 카페",
        "강남 피부과"
    ],
    "maxItems": 100,
    "maxReviewsPerPlace": 25,
    "includeBlogReviews": true
}
```

***

### Output Sample (`reviews` Mode)

```json
{
    "reviewId": "671a9b2c8f01e20001a4b912",
    "reviewType": "visitor",
    "placeId": "2025884279",
    "placeName": "서울 미식 다이닝 강남점",
    "placeCategory": "한식",
    "businessCategory": "restaurant",
    "placeAddress": "서울 강남구 테헤란로 100 1층",
    "placeRating": 4.97,
    "placeUrl": "https://map.naver.com/p/entry/place/2025884279",
    "rating": 5.0,
    "title": null,
    "text": "숙성회가 정말 두툼하고 신선해요! 소금김밥이랑 같이 먹으면 궁합이 최고입니다. 직원분들도 친절하셔서 다음 모임 때 또 방문할 예정이에요.",
    "createdAt": "10.24.토",
    "visitedAt": "10.24.토",
    "visitCount": 2,
    "viewCount": 48,
    "verificationMethod": "영수증",
    "bookingItemName": "네이버 예약",
    "votedKeywords": [
        "음식이 맛있어요",
        "재료가 신선해요",
        "친절해요",
        "매장이 넓어요"
    ],
    "votedKeywordsText": "음식이 맛있어요, 재료가 신선해요, 친절해요, 매장이 넓어요",
    "mainPhotoUrl": "https://pup-review-phinf.pstatic.net/example_review_photo_01.jpg",
    "photoUrls": [
        "https://pup-review-phinf.pstatic.net/example_review_photo_01.jpg",
        "https://pup-review-phinf.pstatic.net/example_review_photo_02.jpg"
    ],
    "photoCount": 2,
    "hasPhotos": true,
    "authorId": "user_4c9b",
    "authorNickname": "reviewer_4a9c",
    "authorProfileUrl": "https://m.place.naver.com/my/user_4c9b/review",
    "authorImageUrl": null,
    "authorTotalReviews": 84,
    "ownerReplyText": "소중한 영수증 리뷰와 멋진 사진 감사드립니다! 언제나 신선한 숙성회로 보답하겠습니다.",
    "ownerReplyCreatedAt": "10.25.일",
    "reviewUrl": "https://m.place.naver.com/place/2025884279/review/visitor",
    "searchQuery": null,
    "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. |
| **Review Scraped** | `result-scraped` | **$0.80 / 1,000**<br>(`$0.0008`) | **$0.70 / 1,000**<br>(`$0.0007`) | **$0.60 / 1,000**<br>(`$0.0006`) | **$0.50 / 1,000**<br>(`$0.0005`) | Charged per valid Naver Place visitor review or linked blog review 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 review and place data** from public Naver Map and Naver Place listings for consumer sentiment research, market intelligence, and policy-compliant review auditing. 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

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

Direct Naver Map URLs (`https://map.naver.com/p/entry/place/2025884279`), Mobile Place URLs (`https://m.place.naver.com/restaurant/2025884279/home`), `naver.me` shortlinks, or numeric Place IDs (`2025884279`) to extract visitor & blog reviews from.

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

Optional search keywords on Naver Map / Place (e.g., `강남 맛집`, `성수동 카페`, `강남 피부과`). When provided, overrides the prefilled Place URL and extracts reviews across matching businesses.

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

Maximum total number of reviews (visitor + blog reviews) to collect across the run.

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

Maximum number of receipt-verified visitor reviews (방문자 리뷰) to fetch per place (`0`–`5000`). Automatically scales up to `maxItems` when scraping direct Place URLs.

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

Filter visitor reviews 100% server-side on Naver (`isPhotoUsed`) to only return reviews that include customer-uploaded photos.

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

Include Naver Blog and Cafe review posts linked to each place (author name, post title, URL, snippet, date, and thumbnail).

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

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

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

Outputs one flat row per review (`reviews`, default) or one row per place with embedded reviews (`places`).

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

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

## `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 Place review endpoints reliably.

## Actor input object example

```json
{
  "placeUrls": [
    "https://map.naver.com/p/entry/place/2025884279"
  ],
  "maxItems": 20,
  "maxReviewsPerPlace": 20,
  "onlyPhotoReviews": false,
  "includeBlogReviews": true,
  "maxBlogReviewsPerPlace": 10,
  "mode": "reviews",
  "language": "ko",
  "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 = {
    "placeUrls": [
        "https://map.naver.com/p/entry/place/2025884279"
    ]
};

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

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

```

## MCP server setup

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