Naver Place Reviews + Blog — Korean Review Scraper avatar

Naver Place Reviews + Blog — Korean Review Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Naver Place Reviews + Blog — Korean Review Scraper

Naver Place Reviews + Blog — Korean Review Scraper

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.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

OrbitData Labs

OrbitData Labs

Maintained by Community

Actor stats

2

Bookmarked

188

Total users

39

Monthly active users

5 hours ago

Last modified

Share

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

FieldDescription
reviewTextFull review body (Korean)
reviewRating1-5 stars
reviewerNameAuthor nickname + profile URL + total review count
reviewDateReview creation date (YYYY-MM-DD)
visitDateActual visit date
visitCount"2번째 방문" (2nd visit)
reviewVerificationHow Naver verified the visit: 영수증 (receipt), 예약 (booking), 결제내역 (payment record); null if unverified
orderedItemMenu item or ticket the reviewer bought, when Naver links one
reviewerAverageRatingReviewer's average star rating across all their reviews; null if they don't rate
votedKeywords"음식이 맛있어요", "분위기가 좋아요", etc.
reviewPhotosPhoto URLs (optional)
reviewReplyTextBusiness owner's response

Blog review fields

FieldDescription
blogTitleBlog post title
blogContentsPost excerpt/contents
blogUrlLink to full blog post
blogSourceblog (Naver Blog) or cafe (Naver Café post)
bloggerNameBlogger name
blogDatePost date

Aggregated statistics

When includeReviewStats is enabled (default), one stats row per place — a single dataset item.

Whole place (Naver's own statistics, the full review history):

  • totalVisitorReviews, averageRating — review count and average star rating
  • placeRatingDistribution — star histogram, e.g. {"4.5": 68, "5": 364}
  • placeThemes — what reviews talk about, e.g. {"맛": 782, "분위기": 184}
  • placeTopMenus — most-mentioned menu items, e.g. {"타코": 374}
  • placeKeywordDistribution — voted keywords ("음식이 맛있어요" …) with vote counts

This run (only the reviews you scraped):

  • ratingDistribution, keywordDistribution — the same histograms over this run's reviews
  • scrapedVisitorReviews, scrapedBlogReviews — how many rows this run collected

Histograms are ordered highest count first (stars ascending). Verticals Naver does not rate or tag — clinics, hospitals — return {}; null means Naver's statistics could not be fetched on this run.

Stats only, or blog reviews only

Set includeVisitorReviews to false:

  • with includeBlogReviews: true — blog reviews only;
  • with includeBlogReviews: false — just the stats row: one dataset item per place, the cheapest way to compare themes, menus and keyword votes across many places.

Input options

Option 1: Direct Place URLs or IDs

{
"placeUrls": [
"https://map.naver.com/v5/entry/place/37234567",
"37234567"
],
"maxReviewPages": 3
}

Option 2: Search by keyword

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

Option 3: Every review since a date

{
"placeUrls": ["37234567"],
"visitedSince": "2026-09-01"
}

Visitor reviews whose visit date is on or after visitedSince. Naver lists reviews by visit date, so the run stops as soon as it reaches older visits — you only pay for the window you asked for. Without maxReviews, every review in the window is collected; with it, maxReviews still caps each place. A review written recently about an older visit is outside the window — for scheduled runs that must catch every new review, use Option 4.

Option 4: Scheduled runs — only new reviews

{
"placeUrls": ["37234567"],
"maxReviews": 50,
"onlyNewReviews": true
}

Each run looks at the same newest reviews it normally would, but skips the ones an earlier onlyNewReviews run already returned — they are not returned and not charged again. A re-run with nothing new returns 0 items; the run status says how many were skipped. The stats row (if enabled) gains skippedPreviouslyScraped.

  • History is kept per place in a key-value store in your Apify account (naver-place-reviews-seen by default). Use reviewHistoryName to keep separate histories for separate pipelines; delete the store or change the name to start over.
  • Only reviews that were actually stored count as delivered — if a run's cost limit cuts it short, the rest are offered again next time.
  • Don't run two onlyNewReviews runs for the same place at the same moment; both would see the same history and return the same new reviews.

Full input example

{
"placeUrls": ["37234567"],
"maxReviewPages": 10,
"visitedSince": "2026-09-01",
"includeVisitorReviews": true,
"includeBlogReviews": true,
"maxBlogReviewPages": 10,
"includeReviewPhotos": false,
"includeReviewStats": true,
"onlyNewReviews": false
}

Pagination guide

maxReviewPagesReviews collected
1~50
3~150
10~500
50~2,500
100~5,000

Output format

Visitor review

{
"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,
"reviewerAverageRating": 4.9,
"reviewVerification": "영수증",
"orderedItem": "치즈닭갈비",
"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

{
"reviewType": "blog",
"placeId": "37234567",
"placeName": "맛있는 식당",
"blogTitle": "강남 맛집 탐방기",
"blogContents": "오늘은 강남에 위치한...",
"blogUrl": "https://blog.naver.com/...",
"blogSource": "blog",
"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

ActorDescription
Naver MapBusiness listings & details
Naver BlogBlog posts & content
Naver ShoppingProduct data & prices
Naver NewsNews articles & headlines
Naver Place ReviewsThis actor
KRX StockKorean stock market data