Naver Map Scraper avatar

Naver Map Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Naver Map Scraper

Naver Map Scraper

Scrape places, menus, business hours, reviews and more from Naver Map (map.naver.com). Supports keyword search and direct URL input.

Pricing

from $3.00 / 1,000 results

Rating

5.0

(2)

Developer

OrbitData Labs

OrbitData Labs

Maintained by Community

Actor stats

5

Bookmarked

317

Total users

52

Monthly active users

a day ago

Last modified

Share

Extract rich, structured data from Naver Map — Korea's dominant local search platform. Collect place details, menus, business hours, reviews, and more through keyword search or direct URL input.

Features

  • Keyword Search — Search terms like "강남 맛집" or "홍대 카페" and scrape all matching places.
  • Up to 300 Places per Keyword, or Whole Areas — Full pagination to Naver's 300-per-keyword limit, plus area search that sweeps every place within a radius (e.g. ~1,270 cafés within 1 km of Hongdae).
  • Sorting & Location — Sort by relevance, distance, most reviewed or most saved; set your own reference coordinates.
  • Monitoring Mode — Scheduled runs return only new or changed places, so recurring jobs cost only what changed.
  • Direct URL Input — Provide specific Naver Map place URLs to scrape individual businesses. Supports full URLs and short URLs (naver.me links).
  • Rich Place Details — Name, category, address, coordinates, phone, virtual phone, homepage, website URL, business hours, facilities, conveniences, parking info, images, subway stations, and more.
  • Popularity & Booking Signals — Save count (how many users bookmarked the place), Naver booking link, Naver Pay, TalkTalk link, coupon count, payment methods, TV appearances and Michelin Guide info.
  • Transit Info — Nearest subway exit with walking time/distance, plus nearby bus stops.
  • Traceable Results — Every item carries a ready-to-open placeUrl, plus the searchKeyword and searchRank it came from (or the input sourceUrl), so results are easy to join back to your inputs.
  • Full Menu Data — Menu items with names, prices, descriptions, images, and recommendation flags.
  • Review Collection — Visitor reviews (rating, body, author, tags, media) and blog reviews (title, content, URL, thumbnail).
  • Review Filtering — Set a cutoff date to only collect recent reviews.
  • Proxy Support — Built-in Apify proxy support to avoid rate limiting (HTTP 429).
  • Anti-blocking — Uses TLS fingerprinting (Chrome impersonation) for reliable access.

How It Works

  1. Search Phase — For each keyword, the Actor searches Naver Map and collects place IDs (up to maxResultsPerKeyword per keyword). For direct URLs, place IDs are extracted automatically.
  2. Detail Phase — For each place ID, the Actor fetches the detail page and parses the __APOLLO_STATE__ for structured data.
  3. Review Phase (optional) — If includeReviews is enabled, visitor reviews and blog reviews are collected via Naver's GraphQL API with pagination.

Input Parameters

ParameterTypeDefaultDescription
searchKeywordsstring[]—Search terms (e.g. ["강남 맛집", "홍대 카페"])
urlsstring[]—Naver Map place URLs (full or short naver.me links)
maxResultsPerKeywordinteger5Max places to collect per keyword (1–10,000). Naver returns at most 300 per keyword; use area search to go beyond.
includeDetailsbooleantrueWhen true, fetches each place's detail page (menus, hours, facilities, images, description). When false (fast mode), skips it and returns search-level data only (name, category, phone, virtual phone, address, coordinates, review counts) — ~2× faster and cheaper. No effect on direct URL inputs.
includeReviewsbooleanfalseWhether to collect visitor and blog reviews
maxReviewPagesinteger50Max review pages per place. Visitor: 50 reviews/page (no server limit). Blog: 10 reviews/page (server cap ~100/place).
reviewCutoffDatestring"2024-01-01"Only collect reviews on or after this date (YYYY-MM-DD)
sortBystring"relevance"relevance, distance (needs searchCoordinates), reviews (most reviewed), saved (most bookmarked)
searchCoordinatesstring—"latitude,longitude", e.g. "37.4979,127.0276". Reference point for distance sort and the center of area search
searchRadiusKmnumber—With searchCoordinates: sweep the whole circle (max 20 km), beyond the 300-per-keyword limit
monitoringModebooleanfalseReturn only places that are new or changed since the last run with the same input
monitoringStateKeystring—Optional name for the monitoring state (default: derived from input)
emitUnchangedbooleanfalseIn monitoring mode, also return unchanged places
proxyConfigurationobject—Apify proxy settings (recommended)

You must provide at least one of searchKeywords or urls.

Supported URL Formats

  • Full place URL: https://map.naver.com/p/entry/place/1976543477
  • Search result URL: https://map.naver.com/p/search/강남맛집/place/1234567890
  • Short URL: https://naver.me/FqW0LLx9 (automatically resolved via redirect)
  • Mobile URL: https://m.place.naver.com/place/1234567890

Example Input

Search by keyword:

{
"searchKeywords": ["강남 맛집"],
"maxResultsPerKeyword": 50,
"includeReviews": true,
"maxReviewPages": 10,
"reviewCutoffDate": "2025-01-01",
"proxyConfiguration": {
"useApifyProxy": true
}
}

Every café within 1 km of Hongdae (area search, beyond the 300 limit):

{
"searchKeywords": ["카페"],
"searchCoordinates": "37.5567,126.9227",
"searchRadiusKm": 1,
"maxResultsPerKeyword": 3000,
"includeDetails": false
}

Nearest restaurants to Gangnam Station:

{
"searchKeywords": ["맛집"],
"searchCoordinates": "37.4979,127.0276",
"sortBy": "distance",
"maxResultsPerKeyword": 50
}

Daily monitoring (schedule this; later runs return only new/changed places):

{
"searchKeywords": ["성수 카페"],
"maxResultsPerKeyword": 300,
"monitoringMode": true
}

Monitoring output adds changeType (NEW / UPDATED / UNCHANGED) and, for updates, changedFields (e.g. ["phone", "menus"]). Changes are detected on name, category, address, phone, homepage, weekly opening hours and menu names/prices — review counts and "open now" status are ignored, so you are not billed for noise.

Scrape a single place by URL:

{
"urls": ["https://naver.me/FqW0LLx9"],
"includeReviews": true,
"maxReviewPages": 5
}

Output Example

Each dataset item contains full place details:

{
"place_id": "1887323843",
"name": "더 플라자 도원",
"category": "중식당",
"categoryCode": "restaurant",
"address": "서울 중구 소공로 119",
"roadAddress": "서울 중구 소공로 119 더 플라자 3층",
"phone": "02-310-7300",
"virtualPhone": "0507-1234-5678",
"homepage": "https://www.hoteltheplaza.com/kr/dining/taoyuen.jsp",
"siteUrl": "https://booking.naver.com/...",
"x": "126.9784",
"y": "37.5660",
"businessHours": [
{
"name": "영업시간",
"status": "영업 중",
"description": "21:30에 영업 종료",
"schedule": [
{ "day": "매일", "start": "11:30", "end": "21:30" }
]
}
],
"conveniences": ["예약", "단체 이용 가능", "주차", "발렛파킹"],
"facilities": ["예약", "주차", "발렛파킹", "무선 인터넷"],
"hasMobilePhoneNumber": false,
"visitorReviewsTotal": 724,
"visitorReviewsScore": 4.52,
"reviewStats": {
"avgRating": 4.52,
"totalCount": 724,
"imageReviewCount": 512,
"authorCount": 680
},
"reviewThemes": [
{ "code": "TASTE", "label": "맛", "count": 450 }
],
"reviewMenus": [
{ "label": "북경오리", "count": 120 }
],
"menus": [
{
"name": "도원 오마카세",
"price": "350000",
"description": "",
"images": ["https://ldb-phinf.pstatic.net/..."],
"recommend": true
}
],
"images": [
"https://ldb-phinf.pstatic.net/..."
],
"subwayStations": [
{ "name": "1", "typeDesc": "시청역 1호선", "stationName": "시청역",
"nearestExit": "6", "walkTime": 2, "walkingDistance": 87 }
],
"busStations": [
{ "name": "시청앞.덕수궁", "displayCode": "02123", "walkTime": 3, "walkingDistance": 180 }
],
"primaryPhone": "02-310-7300",
"saveCount": "10,000+",
"saveCountNum": 10000,
"hasBooking": true,
"bookingUrl": "https://m.booking.naver.com/booking/6/bizes/...",
"naverBookingUrl": "https://m.booking.naver.com/booking/6/bizes/...",
"hasNPay": true,
"paymentInfo": ["제로페이", "지역화폐 (카드형)"],
"couponCount": 0,
"broadcastInfos": [
{ "channel": "SBS", "program": "생방송투데이", "episode": "2551", "date": "20.04.13.", "menu": "북경오리" }
],
"michelinGuide": null,
"description": "서울의 가장 명망 있는 전통 중식 레스토랑 도원이...",
"placeUrl": "https://map.naver.com/p/entry/place/1887323843",
"searchKeyword": "명동 중식",
"searchRank": 3
}

When includeReviews is enabled, each item also includes:

{
"visitorReviews": [
{
"review_id": "abc123",
"rating": 5,
"body": "음식이 정말 맛있었습니다...",
"author_nickname": "홍길동",
"visited": "2025-02-15",
"created": "2025-02-20",
"tags": ["맛있어요", "분위기좋아요"],
"voted_keywords": ["맛", "서비스"],
"media_count": 3
}
],
"blogReviews": [
{
"title": "강남 맛집 추천 후기",
"contents": "지난 주말에 방문했는데...",
"author_name": "맛집블로거",
"url": "https://blog.naver.com/...",
"date": "2025-03-01"
}
]
}

Use Cases

  • Market Analysis — Compare businesses by ratings, review counts, and pricing across locations.
  • Competitor Research — Track competitors' menus, pricing changes, and customer feedback over time.
  • Local SEO Research — Analyze category rankings and review patterns for specific keywords.
  • Restaurant & Retail Intelligence — Gather menu items, pricing, business hours, and facility data at scale.
  • Review Monitoring — Collect and filter reviews by date for ongoing sentiment tracking.

Pricing

This Actor uses the Pay-Per-Event model — you only pay for what you scrape, with no monthly subscription.

EventPricePer 1,000Description
Place scraped$0.003$3.00Per place in the dataset
Review page$0.001$1.00Per review page fetched (20 reviews/page). Only charged when includeReviews is enabled.

Cost examples:

  • 100 places (no reviews) = ~$0.30
  • 1,000 places (no reviews) = ~$3.00
  • 100 places + reviews (avg 5 pages each) = ~$0.80
  • 1,000 places + reviews (avg 5 pages each) = ~$8.00

No hidden fees. Platform usage costs are included in the event prices. Free-tier users get $5/month of Apify platform credit — enough for ~1,600 places.

Review Collection Limits

Review TypePage SizeServer LimitNotes
Visitor reviews50 reviews/pageNo limitCursor-based pagination. All reviews can be collected by increasing maxReviewPages.
Blog reviews10 reviews/page~100 per placeNaver imposes a maxItemCount cap (~100–113) per place. The actor collects up to ~90% of this limit.

Example: For a place with 3,000 visitor reviews and 400 blog reviews:

  • maxReviewPages=3 → 150 visitor reviews + ~30 blog reviews
  • maxReviewPages=10 → 500 visitor reviews + ~90 blog reviews
  • maxReviewPages=60 → all 3,000 visitor reviews + ~90 blog reviews (blog reviews hit server cap)

Tips for Best Results

  • Use proxy — Enable Apify proxy to avoid HTTP 429 rate limiting from Naver.
  • Need more than 300 places? Use area search (searchCoordinates + searchRadiusKm), or split the keyword by district (e.g. 강남구 카페, 서초구 카페).
  • Recurring jobs — Schedule the Actor with monitoringMode: true to receive only new and changed places each run.
  • Start small — Test with a low maxResultsPerKeyword value first to verify output before scaling up.
  • Review filtering — Set reviewCutoffDate to a recent date to reduce scraping time and collect only relevant reviews.
  • Spending limit — Set a maximum cost per run in the Apify Console to control your budget. The Actor will stop gracefully when the limit is reached.

Changelog

v1.9.x — contact & popularity fields (2026-10)

  • primaryPhone: one phone column — the business's own number when published, otherwise Naver's virtual 0507 number (many places publish only the virtual one).
  • saveCountNum: the save/bookmark count as a sortable number ("49,000+" → 49000, "~100" → 100).

v1.9.x — area search & monitoring (2026-10)

  • Fixed: keyword searches stopped at 50 places. Naver's search page started ignoring the page offset, so maxResultsPerKeyword above 50 silently returned only 50. Search now uses Naver's paginated API and returns up to Naver's limit of 300 places per keyword.
  • Sort order (sortBy): relevance, distance, most reviewed, or most saved.
  • Search coordinates (searchCoordinates): set the reference point for distance sorting and the distance field.
  • Area search (searchRadiusKm): sweep every matching place within a radius, splitting dense areas automatically — goes beyond the 300-per-keyword limit.
  • Monitoring mode (monitoringMode): scheduled runs return only new or changed places (changeType, changedFields), so you pay only for changes.
  • Faster fast mode: removed an unnecessary per-place pause when includeDetails is off (no Naver request is made per place), cutting run time — and compute cost — substantially for large keyword/area runs.

v1.9.x (2026-10)

  • More data per place: save count (popularity), Naver booking link, Naver Pay, TalkTalk link, full address, photo count, payment methods, coupon count, TV appearances, Michelin Guide, nearest subway exit with walking time/distance, and nearby bus stops. All existing fields are unchanged.
  • Traceable results: every item now has placeUrl (Naver Map link) and either searchKeyword + searchRank (keyword input) or sourceUrl (URL input).
  • No more empty error rows for keyword results: if a place's detail page fails to load, the item is filled from search results (name, phone, address, coordinates, review counts) and tagged basicInfoOnly: true and detailFetchFailed: true, instead of returning an empty {place_id, error} row.

v1.9 (2026-06)

  • Added fast mode (includeDetails): Set includeDetails=false to skip the per-place detail page fetch and return search-level data only (name, category, phone, virtual phone, address, coordinates, review counts). Roughly halves run time and cost — ideal for bulk contact/address lookups. Results are tagged basicInfoOnly: true.
  • Further cost optimization: Lowered run memory to 256 MB after telemetry showed real usage never exceeds ~85 MB even on large runs. Halves compute cost with no impact on speed or reliability.
  • Use Apify's synthetic apify-actor-start event for run-start billing (auto-charged by the platform, first 5 s of compute free) instead of a manually-charged start event.

v1.8 (2026-06)

  • Fixed medical/category search returning 0 results: Naver serves some categories (e.g. dermatology/hospitals via the hospitals key) under root keys the parser didn't recognize. Search now auto-detects any place-list key, so medical, dental, vet, fitness, beauty, etc. searches work.

v1.7 (2026-06)

  • Added hasMobilePhoneNumber: Distinguishes places with no phone from places whose number exists but Naver withholds it from the page (in that case phone/virtualPhone may both be null).

v1.6 (2026-06)

  • Cost optimization: Reduced run memory (1024→512 MB) and shortened inter-request delays, cutting platform usage cost substantially while keeping success rate. Retry/backoff on HTTP 429 unchanged.

v1.5 (2026-05)

  • Fixed search: Adapted to Naver's new placeList API structure (previously restaurantList/places)
  • Fixed blog review count: blogReviewTotal was always 0 due to parameterized key mismatch
  • Improved blog review collection: Changed page size from 20 to 10, collecting ~90% of server cap (up from ~80%)
  • Added keywords as an alias for searchKeywords for flexibility
  • Added warnings for unrecognized input fields
  • Documented review collection limits in README

v1.4 (2026-04)

  • Added per-place billing: Every place scraped now triggers a place-scraped charge event ($0.003/place)
  • Graceful stop when charge limit is reached with user-friendly status message
  • Review collection automatically disabled when review charge limit is hit
  • Input descriptions now show per-event pricing for transparency

v1.3 (2026-04)

  • Added virtualPhone, homepage, siteUrl, conveniences to output table views
  • Added missing fields (homepageEtc, siteLanding, categoryCodeList) to dataset schema
  • Updated README output example with full contact/website fields

v1.2 (2026-04)

  • Added output schema for structured table view in Apify Console
  • Fixed proxy configuration to correctly use Apify proxy credentials
  • Improved error handling — individual place failures no longer crash the entire run
  • Reduced retry aggressiveness (3 retries, capped backoff) for faster completion
  • Success rate improved to 100%

v1.1 (2026-04)

  • Proxy password resolution via APIFY_PROXY_PASSWORD environment variable
  • Exception handling for all scraping stages (search, detail, reviews, charging)
  • Graceful budget limit enforcement

v1.0 (2026-03)

  • Initial release
  • Keyword search and direct URL input
  • Full place detail extraction
  • Visitor and blog review collection with date filtering
  • Pay-Per-Event pricing with review page charging