ActorStack.dev
Lead generationTravelv0.1.10updated 19 August 2026

Naver Place Business & Reviews Scraper (Korea)

The out-of-area padding removed, and counted.

Korean local business data from Naver Place — the directory Koreans actually use, where Google Maps coverage is thin — with businesses, visitor reviews, Naver's own reputation aggregates, menus and photos. Naver pads its search results with businesses from outside the area you asked for, silently and with no marker; this Actor filters them out and reports how many it dropped.

oswaldocarabano/naver-place-scraper

input.json
{
  "queries": ["치과", "카페"],
  "regions": ["서울 강남구", "서울 마포구"],
  "entityType": "businesses",
  "maxResults": 200,
  "includeReputation": true
}
Version
v0.1.10
Memory
512 MB
Browser
none
Proxy
None needed: plain HTTP from datacenter IPs works

Short answer

The Naver Place Business & Reviews Scraper extracts Korean local businesses and visitor reviews from Naver Place without a login or a browser. Its distinguishing behaviour is that it removes the out-of-area results Naver pads its own search responses with — measured on 역삼동 치과, only 162 of the 300 results Naver served were actually in the area — and it reports the count it dropped. Fill rates were measured on 3,295 businesses across 8 verticals and 8 regions. Pricing is $0.0014 per business and $0.00045 per review.

Key points

  • Naver pads search results with businesses from neighbouring areas, silently, with HTTP 200 and no marker in the response. This Actor filters them and reports how many were dropped.
  • Measured on 역삼동 치과: Naver reports 638 matches, serves 300, and only 162 are actually in the area. For 율현동 치과 it reports 52, serves 52, and 2 are in the area.
  • The real ceiling is 300 results per query, and the run log says so rather than letting you assume you got everything.
  • Reviewer identities are never returned — no nickname, no account id, no link to a review history. An automated test fails the build if a reviewer identifier appears in any delivered row, at any depth.
  • Fill rates measured on 3,295 businesses across 8 verticals and 8 regions. Phone is 88% on average and 37% in the worst vertical measured, and `phone_is_virtual` says whether you got Naver's relay number or the real one.
  • Star ratings depend on the vertical: restaurants and cafés carry them, clinics and pharmacies do not, and the field is `null` rather than a made-up zero.
On this page11 sections

What it does

Korean local business data from Naver Place — the directory Koreans actually use, where Google Maps coverage is thin — with businesses, visitor reviews, Naver's own reputation aggregates, menus and photos. Naver pads its search results with businesses from outside the area you asked for, silently and with no marker; this Actor filters them out and reports how many it dropped.

output — one row
{
  "place_id": "1234567890",
  "name": "강남예치과",
  "category": "Dentist",
  "category_ko": "치과",
  "region": "서울 강남구",
  "phone": "0507-1234-5678",
  "phone_is_virtual": true,
  "road_address": "서울 강남구 테헤란로 123",
  "full_address": "서울 강남구 역삼동 678-9",
  "latitude": 37.5006,
  "longitude": 127.0364,
  "hours_status": "영업 중",
  "visitor_review_count": 214,
  "blog_review_count": 88,
  "reputation": {
    "average_rating": null,
    "star_distribution": null,
    "reviewer_count": 196,
    "image_review_count": 41,
    "themes": [{ "name": "친절해요", "count": 63 }]
  },
  "place_url": "https://map.naver.com/p/entry/place/1234567890",
  "scraped_at": "2026-08-19T09:12:00.000Z",
  "from_cache": false,
  "fetched_at": null,
  "data_age_hours": null
}

Why this one

It removes the padding, and tells you how much there was

This is the whole reason the Actor exists. Ask Naver for dentists in 역삼동 and it serves 300 results of which 162 are in 역삼동 — the rest are neighbouring areas, unmarked. Any tool that passes that through gives you a dataset whose geography is wrong by 46% while looking complete. The filter runs on the address, and the run log reports the dropped count and warns that Naver's own match count includes padding and is not an inventory figure.

Reviewer identity is not available, at any price

Every Naver review carries the reviewer's nickname, a stable account id and a link to their entire public review history. None of it is returned — not behind a flag, not on request — and a build-time test fails if a reviewer identifier appears anywhere in a delivered row. What you get is what was said and how it was rated, which is what competitor analysis needs, not who said it.

Vertical-dependent fields are declared, not silently empty

`visitor_review_score` is absent for clinics, academies and pharmacies because Naver does not compute one there. `micro_review` and `save_count` only appear for restaurants and cafés. The row always includes the key with an explicit `null`, and the documentation says which vertical produces which — so a pipeline built on a rating column knows before it runs that a dentist sweep will not have one.

The relay number is flagged rather than passed off as a phone

Between 37% and 87% of businesses, depending on vertical, publish only the `0507-…` relay number Naver puts in front of the real line. `phone_is_virtual` tells you which one you got, because a dataset that mixes the two silently is a call list that partly reaches a redirect service.

Use cases

  • Build a region-accurate directory of Korean businesses in a vertical, without the neighbouring-area padding.
  • Analyse Korean visitor reviews — text, star rating, visit date, receipt-verified flag — without collecting reviewer identities.
  • Read Naver's own reputation aggregates: average rating, the ten-band star distribution and its theme analysis with counts.
  • Collect menus with prices in KRW for restaurant and café benchmarking.
  • Compare a vertical across districts by adding regions, which is also how you get past the 300-per-query ceiling.
  • Reach Korean local data where Google Maps coverage is thin, which is most of it.

Input

Every field has a default, and the defaults are deliberately small so a first run is cheap enough to inspect before you commit to a sweep. This table mirrors the Actor's own input schema field for field.

FieldDefaultWhat it does
queriesstring[]["치과"]Search termsCategory or business terms. Korean gives far better coverage than English, because Naver's search is Korean-first: `치과` returns far more than `dentist`.
regionsstring[][]RegionsKorean administrative regions, e.g. `["서울 강남구", "부산 해운대구"]`. Empty sweeps all 17 first-level regions. Results are filtered so only businesses actually located in the region are returned.
entityTypeselect"businesses"What to scrapeOne entity type per run: businesses, reviews, menu items or photos. Their fields genuinely differ, so each run writes a single clean shape.
businessTypeselect"restaurant"Business typeWhich Naver vertical to read detail pages from. It does not filter search results — Naver ignores it — and the search term is what selects the category.
maxResultsinteger100Max businessesHard cap on rows of the selected type. Naver serves at most 300 results per query, so wide coverage needs more regions rather than a bigger number here.
includeReputationbooleantrueInclude reputation aggregatesAverage rating, the ten-band star distribution, reviewer count and Naver's own theme analysis with counts. Costs one detail request per business.
maxReviewsPerBusinessinteger50Max reviews per businessNaver paginates reviews by cursor, so the full corpus is reachable — 1,120 reviews cost 24 requests. Keep it low unless you need depth.
proxyConfigurationobject{ "useApifyProxy": false }ProxyOptional and not needed today: Naver Place answers plain HTTP requests from datacenter IPs.

Output and fill rates

A field being in the schema is not the same as it having a value. The percentages below were counted on real runs; the sample sizes are in Measurements. Anything not listed here is not promised.

FieldFilledMeaning
place_idstring100%Naver's business identifier. The join key across runs and entity types.
namestring100%Business name in Korean.
categorystring90%Category, translated, with the Korean original kept.
regionstring90%The region the business is actually in — the field the padding filter acts on.
road_addressstring90%Road-name address. `full_address` and the jibun form are separate fields.
phonestring88%Business phone. 88% on average across verticals, and 37% in the worst measured (pharmacies).
phone_is_virtualboolean88%Whether the number is Naver's `0507-…` relay rather than the real line. Between 37% and 87% of businesses publish only the relay.
latitudenumber90%Coordinates, with `longitude`.
hours_statusstringnot measuredOpening status and hours as Naver reports them.
visitor_review_countinteger90%Visitor review count. `blog_review_count` is separate and better filled.
reputationobjectnot measuredNaver's own aggregates: average rating, the ten-band star distribution, reviewer and image-review counts, theme analysis with counts.
ratingnumbernot measuredStar rating on a review. `null` for verticals where Naver computes none — clinics, academies, pharmacies.
bodystringnot measuredFull review text.
visited_atstringnot measuredVisit date on a review.
is_receipt_verifiedbooleannot measuredWhether Naver verified the review against a receipt.
pricenumbernot measuredMenu item price, with `currency` — KRW.
place_urlstring100%Public Naver Place URL for the business.
from_cacheboolean100%Always false today: shared caching is designed but not switched on.

Every key is always present. A field that exists but is empty comes back as explicit null, so a parser never has to guess.

Datasets

Different record types go to different datasets, so the main table never carries columns that are blank on most rows.

  • defaultOne row per entity of the type you selected: business, review, menu item or photo.billed
  • ERRORS (key-value store)Anything that failed, with the reason.never billed

Pricing

Pay per delivered result. Charges are applied as each row is produced rather than in a lump at the end, so an aborted run bills only for what it actually gave you.

EventPriceNotes
actor-startActor start$0.00001Effectively free. A run that finds nothing costs you nothing.
businessBusiness$0.0014One Korean local business: name, translated category, phone, both address forms, coordinates and hours.
business_reputationReputation aggregates$0.0008Average rating, the ten-band star distribution, reviewer counts and theme analysis.
reviewVisitor review$0.00045One review: text, rating, visit date, photos and the receipt-verified flag. No reviewer identity.
menuMenu item$0.0002One menu item with name, price in KRW, description and photos.
photoBusiness photo$0.0002One business photo URL. Photo author information is never returned.

Measurements

Each figure is shown with the method that produced it. A benchmark without a method is a marketing claim wearing a number's clothes.

Out-of-area padding

162 of 300 results in-area

Measured on 역삼동 치과: Naver reports 638 matches, serves 300, and 162 are actually in 역삼동. On 율현동 치과 it reports 52, serves 52, and 2 are in the area. Measured across 10 queries.

Per-query ceiling

300 results

Naver's own limit, regardless of the match count it reports. More coverage needs more regions or narrower terms.

Fill-rate sample

3,295 businesses

Across 8 verticals and 8 regions. Name, category, all three address forms, coordinates, image count and blog review count were present for at least 90% in every vertical.

Phone coverage

88% average, 37% worst vertical

Pharmacies were the worst measured. Between 37% and 87% of businesses publish only the 0507 relay number, which `phone_is_virtual` flags.

Review pagination cost

1,120 reviews in 24 requests

Naver paginates reviews by cursor, so the full corpus is reachable — but each business needs its own sweep, which is why reviews cost more than businesses.

Reviewer identity leakage

0, enforced at build time

An automated test fails the build if a reviewer nickname, account id or history link appears in any delivered row, at any depth.

What it will not do

Stated plainly so you can judge fit before spending anything.

  • Naver serves at most 300 results per query. Wide coverage needs more regions or narrower terms, and the run log states this.
  • Reviewer identities are never returned, under any setting.
  • Star ratings do not exist for every vertical: clinics, academies and pharmacies have none, and the field is `null`.
  • One entity type per run — businesses, reviews, menu items or photos — so each dataset has one shape.
  • `businessType` does not filter search results. Naver ignores it; the search term is what selects the category.
  • Photo author information is never returned with photos.
  • Shared caching is designed but not switched on, so `from_cache` is always false and `fetched_at` is null today.

Privacy

  • Reviewer nicknames, account ids and review-history links are never returned. A build-time test enforces it at any depth of the row.
  • Photo author information is never returned.
  • Business contact details are published by the businesses themselves, and `phone_is_virtual` distinguishes Naver's relay number from the real line.
  • Data policy and removal requests: naver.actorstack.dev, or privacy@actorstack.dev

See also the data removal process.

Frequently asked questions

Why do Naver searches return businesses from other areas?
Because Naver pads its results with businesses from neighbouring areas, silently, with HTTP 200 and no marker in the response. Measured on 역삼동 치과, only 162 of the 300 results served were actually in the area. This Actor filters them out on the address and reports how many it dropped.
How many results can one query return?
300, which is Naver's ceiling and not a scraper limitation. Its own match count is larger and includes the padding, so it is not an inventory figure. Cover more ground by adding regions or narrowing the term.
Can I get the reviewers' names?
No. Reviewer nicknames, account ids and links to review histories are never returned, and a build-time test fails if any of them appears in a delivered row. You get what was said and how it was rated, not who said it.
Why is the star rating null for some businesses?
Because Naver does not compute one for that vertical. Restaurants and cafés carry ratings; clinics, academies and pharmacies do not. The field is explicitly `null` rather than a zero that would read as a bad score.
Should I search in Korean or English?
Korean. Naver's search is Korean-first, and `치과` returns far more than `dentist`. English terms work but cover a fraction of the inventory.
What is the 0507 number?
A relay number Naver puts in front of the business's real line. Between 37% and 87% of businesses, depending on vertical, publish only that one — so every row carries `phone_is_virtual` to say which you got.
Do I need a proxy?
No. Naver Place answers plain HTTP requests from datacenter IPs, so proxy configuration is optional and unused by default.

Guides for this Actor