# Naver Place Korea Local Business Review Scraper (`jungle_synthesizer/naver-place-korea-local-business-review-scraper`) Actor

Search Naver Place — Korea's dominant local directory — by region and category for business records: address, phone, hours, category, coordinates, visitor/blog review counts, booking/order flags, menu items, amenities, photos. Restaurants, salons, clinics, lodging, general businesses, nationwide.

- **URL**: https://apify.com/jungle\_synthesizer/naver-place-korea-local-business-review-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.04 / 1,000 record 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Korea Local Business Directory Scraper

Scrape local business listings from [Naver Place](https://map.naver.com), the dominant local-business
directory in Korea. Returns name, address, phone, category, hours, coordinates, and visitor/blog review
counts for restaurants, salons, clinics, lodging, and general businesses nationwide, keyed by region and
search category.

***

### Naver Place Scraper Features

- Searches by region + category phrase, exactly the way you'd search on Naver itself
- Covers five business verticals — restaurants, hair salons, clinics, lodging, and general businesses
- Returns road address, jibun (lot-number) address, sido/sigungu region, and coordinates per record
- Includes visitor review count and score, blog review count, and coupon/booking/order-delivery flags
- Optional detail enrichment pulls full menu line items (with price and description), richer amenities, and business hours
- No account or API key required — just a search phrase

***

### Who Uses Naver Place Data?

- **Marketing agencies** — build prospect lists of Korean SMBs by region and category before outreach
- **Reputation-management vendors** — track visitor and blog review counts across a client's competitor set
- **F\&B and retail franchise teams** — scope competitive density in a target neighborhood before opening a location
- **Market-entry researchers** — map Korea's local-business landscape by category, a market Google Maps covers thinly
- **K-beauty and K-food export analysts** — pull blog review volume, a Korea-specific signal no Western-directory-shaped dataset carries

***

### How Naver Place Scraper Works

1. Give it one or more search phrases the way you'd type them into Naver — `"강남 맛집"` (Gangnam restaurants), `"역삼 헤어샵"` (Yeoksam hair salons).
2. Pick which business types to search each phrase against, or leave it blank to search all five.
3. The scraper pages through the result set for each phrase/type combination and returns every business it finds, up to your item limit.
4. Turn on detail enrichment if you want full menu items and richer amenity/hours data per business — it costs one extra fetch per record.

***

### Input

```json
{
  "maxItems": 50,
  "searchQueries": ["강남 맛집", "역삼 헤어샵"],
  "types": ["restaurant", "hairshop"],
  "enrichDetails": false
}
```

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `maxItems` | Integer | 10 | Maximum number of records to return. |
| `searchQueries` | Array of strings | — (required) | 지역+업종 search phrases, exactly as typed into Naver — e.g. `"강남 맛집"` or `"역삼 헤어샵"`. Each phrase is searched against every selected type. |
| `types` | Array of strings | all five | Which Naver Place verticals to search: `restaurant`, `hairshop`, `hospital`, `place`, `accommodation`. Leave empty to search all of them. |
| `enrichDetails` | Boolean | `false` | Fetch each place's own detail page for a fuller menu, description, and amenity list. Costs one extra premium-priced request per place. |

#### Resuming a large crawl

Every run emits a `resumeCursor` in its Output. If a large crawl stops before it finishes — because it hit `maxItems`, your spend cap (`maxTotalChargeUsd`), or was aborted — start a new run with **the same input** plus that `resumeCursor` to continue from where it left off. The crawl resumes from the queued work the previous run didn't reach.

- You are **not re-charged** for records the earlier run already delivered.
- Resume within your account's run-retention window — on the free tier, roughly your 10 most recent runs. Once the source run is pruned, its `resumeCursor` is no longer valid.
- `resumeCursor` is opaque — supply it unmodified.

***

### Naver Place Scraper Output Fields

```json
{
  "place_id": "18485199",
  "name": "베이징덕 압구정 본점",
  "category": "오리요리",
  "categories_all": ["오리요리"],
  "road_address": "서울특별시 강남구 논현로 874 1층",
  "jibun_address": "서울특별시 강남구 신사동 610-1 1층",
  "sido": "서울특별시",
  "sigungu": "강남구",
  "latitude": 37.5265654,
  "longitude": 127.0288056,
  "phone": "0507-1412-5252",
  "business_hours": { "status": "영업 전", "description": "11:30에 영업 시작" },
  "visitor_review_count": 2245,
  "visitor_review_score": 4.69,
  "blog_review_count": 1297,
  "booking_available": true,
  "order_available": true,
  "has_coupon": true,
  "menu_items": [],
  "amenities": ["예약", "단체 이용 가능", "포장", "주차"],
  "images": ["https://ldb-phinf.pstatic.net/..."],
  "description": "특별한 날 더욱 빛나는 메뉴 선택",
  "place_url": "https://m.place.naver.com/restaurant/18485199/home",
  "source_query": "강남 맛집",
  "scraped_at": "2026-09-01T22:09:54.243Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `place_id` | String | Naver Place's numeric business id — the join key across Naver surfaces. |
| `name` | String | Business name (Korean). |
| `category` | String | Primary business category. |
| `categories_all` | Array | All categories tagged to the business. |
| `road_address` | String | Full road-style address, including sido and sigungu. |
| `jibun_address` | String | Full lot-number (지번) style address. |
| `sido` | String | Province/metropolitan city (e.g. `서울특별시`). |
| `sigungu` | String | District within the sido (e.g. `강남구`). |
| `latitude` | Number | Latitude. |
| `longitude` | Number | Longitude. |
| `phone` | String | Contact phone number. |
| `business_hours` | Object | Current open/closed status and a short hours description. |
| `visitor_review_count` | Integer | Number of visitor reviews. |
| `visitor_review_score` | Number | Average visitor review score. |
| `blog_review_count` | Integer | Number of Naver blog reviews — Korea's primary local-marketing review channel. |
| `booking_available` | Boolean | Whether Naver Booking is available for this business. |
| `order_available` | Boolean | Whether Naver delivery/pickup/table ordering is available. |
| `has_coupon` | Boolean | Whether the business currently offers a Naver coupon. |
| `menu_items` | Array | Menu line items with name, price, description, and images. Populated when `enrichDetails` is on. |
| `amenities` | Array | Facility/amenity tags (parking, reservations, wifi, etc.). |
| `images` | Array | Business photo URLs. |
| `description` | String | Short business description or highlight line. |
| `place_url` | String | The business's Naver Place detail page. |
| `source_query` | String | The search phrase that surfaced this record. |
| `scraped_at` | String | Timestamp the record was collected. |

***

### FAQ

#### How do I scrape Naver Place business listings?

Naver Place Scraper needs no account and no API key. Give it a search phrase — a region plus a category, the same way you'd search on Naver — and it returns every business the query matches, up to your item limit.

#### What data can I get from Naver Place?

Full business records: address (both road and lot-number formats), phone, hours, category, coordinates, visitor and blog review counts, booking/order availability, and coupon status. Turn on `enrichDetails` for menu items and richer amenity data too.

#### Can I filter by business type?

Yes. Set `types` to any combination of `restaurant`, `hairshop`, `hospital`, `place`, and `accommodation`. Leave it empty to search all five for each query.

#### How much does Naver Place Scraper cost to run?

Standard records bill per record scraped. Detail-enriched records (`enrichDetails: true`) bill at the premium rate, since each one is an extra fetch beyond the base listing.

#### Does this cover reviews-only lookups?

No — this actor is built for discovery (finding businesses by region and category), not for pulling reviews off a business you already have a URL for. If you already have a Naver Place id or URL and just want its reviews, a review-focused actor is a better fit.

***

### Need More Features?

Need custom fields, filters, or a different target site? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use Naver Place Scraper?

- **Discovery, not just lookup** — search by region and category instead of needing a business id or URL in hand first.
- **The full business record** — phone, address, hours, booking/order flags, and blog review counts in one payload, not just a review feed.
- **Blog review counts** — a Korea-specific signal (Naver blog reviews are the primary local-marketing channel) that a Western-directory-shaped dataset doesn't carry at all.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

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

Maximum number of records to scrape

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

지역+업종 search phrases, exactly as typed into Naver — e.g. "강남 맛집" (Gangnam restaurants) or "역삼 헤어샵" (Yeoksam hair salons). Each phrase is searched against every selected type.

## `types` (type: `array`):

Which Naver Place verticals to search each query against. Leave empty to search all five.

## `enrichDetails` (type: `boolean`):

Fetch each place's own detail page for a fuller menu, description and photo gallery. Costs one extra premium-priced request per place.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "searchQueries": [
    "강남 맛집"
  ],
  "enrichDetails": false
}
```

# Actor output Schema

## `results` (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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "searchQueries": [
        "강남 맛집"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/naver-place-korea-local-business-review-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "searchQueries": ["강남 맛집"],
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/naver-place-korea-local-business-review-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "searchQueries": [
    "강남 맛집"
  ]
}' |
apify call jungle_synthesizer/naver-place-korea-local-business-review-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/naver-place-korea-local-business-review-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/LtINXy9Mr43QJgjgX/builds/5016CjG0waweerlTA/openapi.json
