# Naver Place Reviews — Korean Business Review Data (`huggable_quote/naver-place-reviews-scraper`) Actor

Extract visitor reviews, ratings, keywords and visit details from Naver Place. Supports place URL and ID input. Korean sentiment analysis ready. From the #1 Naver data provider on Apify.

- **URL**: https://apify.com/huggable\_quote/naver-place-reviews-scraper.md
- **Developed by:** [OrbitData Labs](https://apify.com/huggable_quote) (community)
- **Categories:** Travel, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 85.7% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Naver Place Reviews Scraper

Extract **visitor reviews** and **blog reviews** from Naver Place — Korea's #1 local business platform.
Cursor-based pagination with no server-side limit on visitor reviews.

### Features
- **Visitor reviews**: cursor-based pagination, 50 per page, **no upper limit** on total reviews
- **Blog reviews**: offset-based pagination, ~100 items per place (server-side cap)
- **TLS fingerprinting**: `curl_cffi` with Chrome impersonation — bypasses bot detection
- **Structured output**: voted keywords, visit counts, owner replies, star distribution
- **Two input modes**: direct Place URL/ID or keyword search

### What you get

#### Visitor review fields
| Field | Description |
|-------|-------------|
| reviewText | Full review body (Korean) |
| reviewRating | 1-5 stars |
| reviewerName | Author nickname + profile URL + total review count |
| reviewDate | Review creation date (YYYY-MM-DD) |
| visitDate | Actual visit date |
| visitCount | "2번째 방문" (2nd visit) |
| votedKeywords | "음식이 맛있어요", "분위기가 좋아요", etc. |
| reviewPhotos | Photo URLs (optional) |
| reviewReplyText | Business owner's response |

#### Blog review fields
| Field | Description |
|-------|-------------|
| blogTitle | Blog post title |
| blogContents | Post excerpt/contents |
| blogUrl | Link to full blog post |
| bloggerName | Blogger name |
| blogDate | Post date |

#### Aggregated statistics
When `includeReviewStats` is enabled (default):
- Total visitor reviews count
- Average rating
- Star rating distribution (5★, 4★, 3★, 2★, 1★)
- Scraped visitor/blog review counts

### Input options

#### Option 1: Direct Place URLs or IDs
```json
{
    "placeUrls": [
        "https://map.naver.com/v5/entry/place/37234567",
        "37234567"
    ],
    "maxReviewPages": 3
}
````

#### Option 2: Search by keyword

```json
{
    "searchKeywords": ["강남 맛집", "Seoul BBQ"],
    "maxPlacesPerKeyword": 5,
    "maxReviewPages": 1
}
```

#### Full input example

```json
{
    "placeUrls": ["37234567"],
    "maxReviewPages": 10,
    "reviewSort": "NEWEST",
    "includeBlogReviews": true,
    "maxBlogReviewPages": 10,
    "includeReviewPhotos": false,
    "includeReviewStats": true
}
```

#### Pagination guide

| maxReviewPages | Reviews collected |
|---------------|-------------------|
| 1 | ~50 |
| 3 | ~150 |
| 10 | ~500 |
| 50 | ~2,500 |
| 100 | ~5,000 |

### Output format

#### Visitor review

```json
{
    "reviewType": "visitor",
    "placeId": "37234567",
    "placeName": "맛있는 식당",
    "placeCategory": "음식점",
    "placeAddress": "서울특별시 강남구 ...",
    "placeRating": 4.52,
    "placeTotalReviews": 3162,
    "placeUrl": "https://pcmap.place.naver.com/place/37234567",
    "reviewId": "abc123",
    "reviewText": "정말 맛있었어요! 분위기도 좋고 서비스도 훌륭합니다.",
    "reviewRating": 5,
    "reviewerName": "맛집탐험가",
    "reviewerProfileUrl": "https://m.place.naver.com/my/...",
    "reviewerReviewCount": 42,
    "reviewDate": "2026-05-15",
    "visitDate": "2026-05-10",
    "visitCount": "2번째 방문",
    "votedKeywords": ["음식이 맛있어요", "분위기가 좋아요"],
    "reviewPhotos": null,
    "reviewReplyText": "감사합니다! 또 방문해주세요.",
    "reviewReplyDate": "2026-05-16",
    "searchKeyword": null,
    "language": "ko",
    "scrapedAt": "2026-05-17T12:00:00.000Z"
}
```

#### Blog review

```json
{
    "reviewType": "blog",
    "placeId": "37234567",
    "placeName": "맛있는 식당",
    "blogTitle": "강남 맛집 탐방기",
    "blogContents": "오늘은 강남에 위치한...",
    "blogUrl": "https://blog.naver.com/...",
    "bloggerName": "맛집블로거",
    "bloggerHome": "https://blog.naver.com/blogger123",
    "blogDate": "2026-05-10",
    "blogThumbnailUrl": "https://...",
    "isRepresentative": false,
    "scrapedAt": "2026-05-17T12:00:00.000Z"
}
```

### Technical details

- **HTTP client**: `curl_cffi` with TLS fingerprinting (`impersonate="chrome"`)
- **Visitor review pagination**: cursor-based via `after` parameter (not page-based)
- **Blog review pagination**: offset-based (`page` + `display=10`)
- **Rate limiting**: automatic retry with exponential backoff on HTTP 429
- **Deduplication**: `reviewId`-based dedup for visitor reviews, `id`-based for blog reviews

### Use cases

- Korean market entry research — what do locals say about competitors?
- Restaurant/cafe competitive intelligence
- Customer sentiment analysis (NLP-ready structured data)
- Brand reputation monitoring in Korea
- Academic research on Korean consumer behavior

### Korea Data Suite by huggable\_quote

| Actor | Description |
|-------|-------------|
| [Naver Map](https://apify.com/huggable_quote/naver-map-scraper) | Business listings & details |
| [Naver Blog](https://apify.com/huggable_quote/naver-blog-scraper) | Blog posts & content |
| [Naver Shopping](https://apify.com/huggable_quote/naver-shopping-scraper) | Product data & prices |
| [Naver News](https://apify.com/huggable_quote/naver-news-scraper) | News articles & headlines |
| **Naver Place Reviews** | **This actor** |
| [KRX Stock](https://apify.com/huggable_quote/krx-stock-scraper) | Korean stock market data |

# Actor input Schema

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

Naver Place URLs or Place IDs. Examples: 'https://map.naver.com/v5/entry/place/37234567' or just '37234567'

## `searchKeywords` (type: `array`):

Search keywords to find places, then scrape their reviews. Example: \['강남 맛집', 'Seoul BBQ']

## `maxPlacesPerKeyword` (type: `integer`):

Maximum number of places per keyword search

## `maxReviewPages` (type: `integer`):

Number of visitor review pages to scrape per place (50 reviews per page). Set to 1 for 50 reviews, 10 for 500, etc. No server-side limit.

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

Sort order for visitor reviews

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

Also scrape blog reviews (Naver Blog posts linked to the place)

## `maxBlogReviewPages` (type: `integer`):

Number of blog review pages per place (10 items per page). Server limits to ~100 items total.

## `includeReviewPhotos` (type: `boolean`):

Include photo URLs attached to each visitor review

## `includeReviewStats` (type: `boolean`):

Include aggregated stats (rating distribution, total counts) per place

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

Proxy settings. Recommended to avoid rate limiting.

## Actor input object example

```json
{
  "maxPlacesPerKeyword": 5,
  "maxReviewPages": 1,
  "reviewSort": "NEWEST",
  "includeBlogReviews": true,
  "maxBlogReviewPages": 10,
  "includeReviewPhotos": false,
  "includeReviewStats": true
}
```

# Actor output Schema

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

All extracted visitor reviews, blog reviews, and statistics. Use reviewType field to filter: visitor, blog, or stats.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("huggable_quote/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("huggable_quote/naver-place-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call huggable_quote/naver-place-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=huggable_quote/naver-place-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Naver Place Reviews — Korean Business Review Data",
        "description": "Extract visitor reviews, ratings, keywords and visit details from Naver Place. Supports place URL and ID input. Korean sentiment analysis ready. From the #1 Naver data provider on Apify.",
        "version": "0.3",
        "x-build-id": "MIWjnaxqTYWF3amFt"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/huggable_quote~naver-place-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-huggable_quote-naver-place-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/huggable_quote~naver-place-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-huggable_quote-naver-place-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/huggable_quote~naver-place-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-huggable_quote-naver-place-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "placeUrls": {
                        "title": "Place URLs or IDs",
                        "type": "array",
                        "description": "Naver Place URLs or Place IDs. Examples: 'https://map.naver.com/v5/entry/place/37234567' or just '37234567'",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchKeywords": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "Search keywords to find places, then scrape their reviews. Example: ['강남 맛집', 'Seoul BBQ']",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPlacesPerKeyword": {
                        "title": "Max places per keyword",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of places per keyword search",
                        "default": 5
                    },
                    "maxReviewPages": {
                        "title": "Max review pages",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Number of visitor review pages to scrape per place (50 reviews per page). Set to 1 for 50 reviews, 10 for 500, etc. No server-side limit.",
                        "default": 1
                    },
                    "reviewSort": {
                        "title": "Review sort order",
                        "enum": [
                            "NEWEST",
                            "RANKING"
                        ],
                        "type": "string",
                        "description": "Sort order for visitor reviews",
                        "default": "NEWEST"
                    },
                    "includeBlogReviews": {
                        "title": "Include blog reviews",
                        "type": "boolean",
                        "description": "Also scrape blog reviews (Naver Blog posts linked to the place)",
                        "default": true
                    },
                    "maxBlogReviewPages": {
                        "title": "Max blog review pages",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Number of blog review pages per place (10 items per page). Server limits to ~100 items total.",
                        "default": 10
                    },
                    "includeReviewPhotos": {
                        "title": "Include review photos",
                        "type": "boolean",
                        "description": "Include photo URLs attached to each visitor review",
                        "default": false
                    },
                    "includeReviewStats": {
                        "title": "Include review statistics",
                        "type": "boolean",
                        "description": "Include aggregated stats (rating distribution, total counts) per place",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Recommended to avoid rate limiting."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
