# Naver Map Scraper — Korean Places, Menus, Hours & Reviews (`unfenced-group/naver-map-scraper`) Actor

Scrape Naver Map (map.naver.com) places by keyword, map area or link: address, phone, coordinates, rating, review counts, opening hours, menus with prices, transit, review keywords, Michelin and TV listings, plus optional visitor reviews. Beyond the 300-result limit.

- **URL**: https://apify.com/unfenced-group/naver-map-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Lead generation, Travel, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 1,000 places

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Naver Map Scraper

![Naver Map Scraper](https://api.apify.com/v2/key-value-stores/QfIHVgQ2Pi0otSZTD/records/banner.png)

Scrape Korean businesses from Naver Map (map.naver.com) by keyword, map area or place link: name, category, address, phone, coordinates, rating, review counts, opening hours, full menus with prices, transit access, review analysis and, optionally, visitor reviews. No API key or Naver account required.

***

### Why this scraper?

#### 🇰🇷 Built for Naver Map

Naver Map is where Koreans look up restaurants, cafés, clinics, salons and shops. This scraper returns the same data a user sees on a Naver place page, in clean English field names, with Korean values left exactly as Naver publishes them.

#### 🗺️ Past the 300-result limit

A Naver search stops at 300 places. Give the scraper a map area and it splits the area into tiles until every matching place is collected: a whole district, not just the first pages.

#### 🍽️ Full place details included

Opening hours per day with break times and last order, full menus with prices, website and social links, facilities, parking, payment methods, and the nearest subway exits and bus stops. Included in the place price.

#### ⭐ Review intelligence

Rating, visitor and blog review counts, save count, Naver's review keyword statistics, the dishes reviewers mention most, top blog reviews, and optionally the visitor reviews themselves with visit dates, photos and owner replies.

#### 🏆 Michelin and TV

Michelin Guide listings (stars, Bib Gourmand, Selected) and TV appearances by channel, programme and episode, with a filter to return Michelin-listed places only.

#### 🔎 Naver's own filters

Sort by most searched, trending, featured on TV, most saved or most reviewed, and filter on open now, open 24 hours, delivery, takeout, reservations, new openings, coupons, Naver Pay, wheelchair access or a specific dish.

***

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array | `[]` | Searches as you would type them on Naver Map, e.g. `"강남 맛집"`, `"홍대 카페"`, `"부산 피부과"`. |
| `startUrls` | array | `[]` | Place links: map.naver.com, m.place.naver.com or pcmap.place.naver.com. |
| `placeIds` | array | `[]` | Naver place IDs (the number in a place link). |
| `maxResultsPerQuery` | integer | `50` | Places per query. A search stops at 300; with `boundingBox` set, `0` collects every place in the area. |
| `maxItems` | integer | `0` | Cap on places across the whole run. `0` means no cap. |
| `searchCenter` | string | (empty) | Point Naver ranks results around, as `"latitude,longitude"`. |
| `boundingBox` | string | (empty) | Map area to sweep, as `"minLongitude,minLatitude,maxLongitude,maxLatitude"`. |
| `sortBy` | string | `"relevance"` | `relevance`, `popular`, `trendy`, `tv`, `saved` or `reviewTotalCount`. |
| `openNow` | boolean | `false` | Only places open at run time. |
| `open24Hours` | boolean | `false` | Only places open 24 hours. |
| `deliveryOnly` | boolean | `false` | Only places offering delivery. |
| `takeoutOnly` | boolean | `false` | Only places offering takeout. |
| `bookingOnly` | boolean | `false` | Only places accepting Naver reservations. |
| `newlyOpenedOnly` | boolean | `false` | Only newly opened places. |
| `couponOnly` | boolean | `false` | Only places with a Naver coupon. |
| `naverPayOnly` | boolean | `false` | Only places accepting Naver Pay. |
| `wheelchairAccessibleOnly` | boolean | `false` | Only places with a wheelchair-accessible entrance. |
| `michelinOnly` | boolean | `false` | Only Michelin Guide places. |
| `menuFilter` | string | (empty) | Only restaurants serving this dish, in Korean, e.g. `"파스타"`. |
| `includeDetails` | boolean | `true` | Add hours, menus, links, facilities, transit, review analysis and photos. No extra charge. |
| `includeReviews` | boolean | `false` | Add visitor reviews to each place. Charged per review. |
| `maxReviewsPerPlace` | integer | `20` | Reviews per place. `0` means all, up to 1,000. |
| `reviewSort` | string | `"newest"` | `newest` or `recommended`. |
| `proxyConfiguration` | object | (empty) | Optional. Leave empty; the scraper manages its own connections. |

Sort and filter options follow Naver's restaurant and café search. For other categories Naver ignores the options it does not support.

***

### Output schema

Every field below is present on every record. Values Naver does not publish for a place are `null` (or `[]` for lists).

#### Always present

| Field | Type | Description |
|---|---|---|
| `placeId` | string | Naver place ID. |
| `name` | string | Business name as shown on Naver Map. |
| `category` | string | Naver category, in Korean (e.g. 카페, 중식당, 피부과). |
| `categoryCodes` | array | Naver category codes, from broad to specific. |
| `businessType` | string | Naver business type: restaurant, cafe, hospital, accommodation, hairshop, place and others. |
| `url` | string | Link to the place on map.naver.com. |
| `mobileUrl` | string | Link to the place on m.place.naver.com. |
| `phone` | string | Phone number as published by the business (null if none). |
| `virtualPhone` | string | Naver safe number (0507-…) when the business uses one (null otherwise). |
| `address` | string | Full lot-number (jibun) address. |
| `roadAddress` | string | Full road-name address. |
| `district` | string | City, district and neighbourhood, e.g. "서울 강남구 신사동". |
| `latitude` | number | Latitude. |
| `longitude` | number | Longitude. |
| `distance` | string | Distance from the search centre as Naver shows it (e.g. "1.2km"). |
| `rating` | number | Average visitor rating out of 5 (null when Naver hides the score). |
| `visitorReviewCount` | integer | Number of visitor reviews. |
| `blogReviewCount` | integer | Number of blog and café reviews. |
| `bookingReviewCount` | integer | Number of reviews left through Naver Booking. |
| `saveCount` | string | How many users saved the place, as Naver shows it (e.g. "49,000+"; null when hidden). |
| `imageCount` | integer | Number of photos on the place page. |
| `imageUrl` | string | Main photo URL. |
| `imageUrls` | array | Representative photo URLs. |
| `amenities` | array | Amenities and options, e.g. 주차 (parking), 단체 이용 가능 (groups), 무선 인터넷 (Wi-Fi). |
| `businessStatus` | string | Status at the time of the run, e.g. 영업 중 (open), 영업 종료 (closed), 브레이크타임. |
| `businessStatusText` | string | Status detail, e.g. "22:00에 영업 종료" (closes at 22:00). |
| `shortReview` | string | One-line summary of the place written by Naver (null if none). |
| `description` | string | Business description written by the owner (null if none). |
| `hasBooking` | boolean | Accepts Naver reservations. |
| `bookingUrl` | string | Naver reservation link (null if not bookable). |
| `hasNaverPay` | boolean | Accepts Naver Pay. |
| `talktalkUrl` | string | Naver TalkTalk chat link (null if none). |
| `delivery` | boolean | Offers delivery through Naver (null when unknown). |
| `tableOrder` | boolean | Offers table ordering through Naver (null when unknown). |
| `preOrder` | boolean | Offers pre-ordering through Naver (null when unknown). |
| `pickup` | boolean | Offers pickup through Naver (null when unknown). |
| `coupons` | array | Active Naver coupons: title, description, type, url. |
| `michelinGuide` | object | Michelin Guide listing: year, distinction (star, Bib Gourmand or Selected), comment, url. Null if not listed. |
| `tvPrograms` | array | TV programmes the place has appeared on. |
| `isNewOpening` | boolean | Marked by Naver as newly opened. |
| `wheelchairAccessible` | boolean | Has a wheelchair-accessible entrance (null when unknown). |
| `repeatVisitNote` | string | Naver repeat-visit note, e.g. share of repeat visitors (null if none). |
| `searchQuery` | string | The query that found this place (null for place links). |
| `searchRank` | integer | Position in the search results (null for place links). |
| `detailsFetched` | boolean | True when the detail fields below were collected. |
| `reviews` | array | Visitor reviews (empty unless includeReviews is on). See the review table below. |
| `reviewsFetched` | integer | Number of reviews attached to this record. |
| `contentHash` | string | Stable hash of place ID and name, for change tracking. |
| `scrapedAt` | string | ISO timestamp of when the record was saved. |

#### With `includeDetails: true` (default)

| Field | Type | Description |
|---|---|---|
| `directions` | string | Directions written by the owner, e.g. "2번 출구에서 50m". |
| `openingHours` | array | One entry per day: day (Mon–Sun), dayKo, open, close, breaks (start/end), lastOrder, closed, note. |
| `openingHoursNote` | string | Free-text hours note or regular closing day. |
| `upcomingClosures` | array | Announced irregular closures: name, startDate, endDate. |
| `menus` | array | Menu items: name, price (KRW integer), priceText, description, imageUrl, badges, isSetMenu. |
| `menuCount` | integer | Number of menu items Naver lists. |
| `menuImageUrls` | array | Photos of the printed menu. |
| `homepage` | string | Main website or social link. |
| `websites` | array | All published links: url, type (website, Instagram, blog…), isPrimary. |
| `keywords` | array | Keywords the business lists for itself. |
| `facilities` | array | Facilities, e.g. 주차, 포장, 무선 인터넷. |
| `parking` | object | Parking: description, free, fee, valet (null if not published). |
| `petsAllowed` | boolean | Pets allowed (null when not stated). |
| `paymentMethods` | array | Accepted payment methods, e.g. 제로페이, 지역화폐. |
| `subwayStations` | array | Nearest subway stations: name, line, exit, walkMinutes, walkMeters. |
| `busStations` | array | Nearest bus stops: name, stopCode, walkMinutes, walkMeters, routes. |
| `photoReviewCount` | integer | Visitor reviews with photos. |
| `reviewerCount` | integer | Number of distinct reviewers. |
| `reviewThemes` | array | What reviews talk about, with counts: theme (맛 taste, 서비스 service…), code, count. |
| `reviewMenuMentions` | array | Dishes most mentioned in reviews: menu, count. |
| `reviewKeywords` | array | Naver's voted review keywords with counts, e.g. "음식이 맛있어요" (the food is good). |
| `blogReviews` | array | Top blog and café reviews: title, url, source, blogName, date, excerpt, thumbnailUrl. |
| `broadcasts` | array | TV appearances: channel, program, episode, date, menu. |
| `photoUrls` | array | Business photo URLs from the place page. |
| `mediaReviewCount` | integer | Visitor reviews with photos or video. |
| `couponCount` | integer | Number of active coupons. |
| `naverBookingUrl` | string | Direct Naver Booking link (null if not bookable). |
| `regionCode` | string | Naver administrative region code. |
| `staticMapUrl` | string | Static map image of the location. |

#### Each review (with `includeReviews: true`)

| Field | Type | Description |
|---|---|---|
| `reviewId` | string | Review ID. |
| `rating` | number | Star rating given. |
| `text` | string | Review text. |
| `visitedDate` | string | ISO date of the visit. |
| `visitedLabel` | string | Visit date as Naver shows it (e.g. "9.19.토"). |
| `createdLabel` | string | Posting date as Naver shows it. |
| `visitCount` | integer | Which visit this was for the reviewer. |
| `viewCount` | integer | Times the review was viewed. |
| `verification` | string | How the visit was verified, e.g. 영수증 (receipt), 예약 (booking). |
| `language` | string | Review language. |
| `authorNickname` | string | Reviewer's public nickname (often partly masked by Naver). |
| `keywords` | array | Keywords the reviewer picked. |
| `visitContext` | array | Visit context tags, e.g. 데이트 (date), 혼밥 (dining alone). |
| `orderedItem` | string | Item ordered or booked (null if not shown). |
| `photoUrls` | array | Review photos. |
| `videoUrls` | array | Review videos. |
| `ownerReply` | object | Owner reply: text, date (null if none). |

#### Example record

```json
{
  "placeId": "1273833411",
  "name": "홍대카페",
  "category": "카페,디저트",
  "categoryCodes": [
    "220036",
    "220052",
    "220563"
  ],
  "businessType": "cafe",
  "url": "https://map.naver.com/p/entry/place/1273833411",
  "mobileUrl": "https://m.place.naver.com/place/1273833411/home",
  "phone": null,
  "virtualPhone": null,
  "address": "서울특별시 마포구 서교동 363-17",
  "roadAddress": "서울 마포구 어울마당로 68",
  "district": "서울 마포구 서교동",
  "latitude": 37.551176,
  "longitude": 126.9214848,
  "distance": "5.3km",
  "rating": 4.84,
  "visitorReviewCount": 1796,
  "blogReviewCount": 2212,
  "bookingReviewCount": 0,
  "saveCount": "20,000+",
  "imageCount": 12,
  "imageUrl": "https://naverbooking-phinf.pstatic.net/20250512_190/1747039631107tWYKO_PNG/%B7%E7%C7%C1%C5%BE%BB%E7%C1%F8_%C5%A9%B1%E2%C1%B6%C1%A4_20250109-1-1-1-light-1.png",
  "imageUrls": [
    "https://naverbooking-phinf.pstatic.net/20250512_190/1747039631107tWYKO_PNG/%B7%E7%C7%C1%C5%BE%BB%E7%C1%F8_%C5%A9%B1%E2%C1%B6%C1%A4_20250109-1-1-1-light-1.png",
    "https://naverbooking-phinf.pstatic.net/20250512_295/1747040136560yza7R_JPEG/KakaoTalk_20250512_174219279----.jpg"
  ],
  "amenities": [
    "남/녀 화장실 구분",
    "단체 이용 가능"
  ],
  "businessStatus": "영업 종료",
  "businessStatusText": "11:00에 영업 시작",
  "shortReview": "다양한 층별 컨셉으로 골라 앉는 재미",
  "description": "서울최대규모 8개층 홍대카페 <ㅎㄷ카페>\n\n서울 최대규모 복합문화공간 공연, 문화, 예술, 카페, 루프탑\n\n9F ROOF TOP - VIEW\n8F COFFEE BAR\n7F MEDIA ART\n6F LP - MUSIC\n5F GALLERY\n4F STONE VALLEY\n3F PLANT\nB1 ㅎ",
  "hasBooking": false,
  "bookingUrl": null,
  "hasNaverPay": false,
  "talktalkUrl": "http://talk.naver.com/w7ib1cu?frm=pnmb",
  "delivery": false,
  "tableOrder": false,
  "preOrder": false,
  "pickup": false,
  "coupons": [
    {
      "title": "1,500원 할인 쿠폰",
      "description": "알림받기한 고객님들께 드려요",
      "type": "discount",
      "url": "https://m.booking.naver.com/coupon/placeId/1273833411/promotion/634032"
    }
  ],
  "michelinGuide": null,
  "tvPrograms": [],
  "isNewOpening": false,
  "wheelchairAccessible": null,
  "repeatVisitNote": null,
  "searchQuery": "홍대 카페",
  "searchRank": 1,
  "detailsFetched": true,
  "directions": "홍대입구역 9번 출구에서 638m 도보 8분 이내\n\n합정역 3번 출구에서 635m 도보 8분 이내\n\n상수역 1번 출구에서 511m 도보 8분 이내",
  "openingHours": [
    {
      "day": "매일",
      "dayKo": "매일",
      "open": "11:00",
      "close": "21:00",
      "breaks": [],
      "lastOrder": null,
      "closed": false,
      "note": null
    }
  ],
  "openingHoursNote": "연중무휴",
  "upcomingClosures": [],
  "menus": [
    {
      "name": "에그타르트",
      "price": 3500,
      "priceText": "3,500원",
      "description": null,
      "imageUrl": "https://ldb-phinf.pstatic.net/20241214_102/1734156952503abyVX_JPEG/KakaoTalk_20241214_150428147.jpg",
      "badges": [],
      "isSetMenu": false
    },
    {
      "name": "우유크림 소금빵",
      "price": 5500,
      "priceText": "5,500원",
      "description": "진한 버터를 가득 넣은 프리미엄 소금빵에 우유크림을 가득채워 짭짤함과 달콤한 소금빵",
      "imageUrl": null,
      "badges": [],
      "isSetMenu": false
    }
  ],
  "menuCount": 14,
  "menuImageUrls": [
    "https://ldb-phinf.pstatic.net/20260113_202/1768290344294wp9A1_JPEG/%C4%C9%C0%CC%C5%A9.jpg",
    "https://ldb-phinf.pstatic.net/20251223_133/1766471788702XVKrV_JPEG/%C8%AB%B4%EB%B8%DE%B4%BA01.jpg"
  ],
  "homepage": "https://https//www.hongdaesquare.co.kr/in_corporate_promotion/in_corporate_promotion.php",
  "websites": [
    {
      "url": "https://https//www.hongdaesquare.co.kr/in_corporate_promotion/in_corporate_promotion.php",
      "type": "블로그",
      "isPrimary": false
    },
    {
      "url": "https://www.hongdaesquare.co.kr",
      "type": "홈페이지",
      "isPrimary": false
    },
    {
      "url": "https://www.instagram.com/hongdae.cafe/",
      "type": "인스타그램",
      "isPrimary": false
    }
  ],
  "keywords": [
    "공연",
    "예술"
  ],
  "facilities": [
    "남/녀 화장실 구분",
    "단체 이용 가능"
  ],
  "parking": {
    "description": null,
    "free": null,
    "fee": null,
    "valet": null
  },
  "petsAllowed": null,
  "paymentMethods": [],
  "subwayStations": [
    {
      "name": "상수역",
      "line": "6",
      "exit": "1",
      "walkMinutes": 8,
      "walkMeters": 513
    }
  ],
  "busStations": [
    {
      "name": "레드로드입구",
      "stopCode": "14879",
      "walkMinutes": 1,
      "walkMeters": 63,
      "routes": [
        "마포08",
        "마포16"
      ]
    },
    {
      "name": "레드로드입구",
      "stopCode": "14884",
      "walkMinutes": 2,
      "walkMeters": 149,
      "routes": [
        "마포08"
      ]
    }
  ],
  "photoReviewCount": 1460,
  "reviewerCount": 195,
  "reviewThemes": [
    {
      "theme": "만족도",
      "code": "total",
      "count": 1020
    },
    {
      "theme": "맛",
      "code": "taste",
      "count": 775
    }
  ],
  "reviewMenuMentions": [
    {
      "menu": "커피",
      "count": 501
    },
    {
      "menu": "케이크",
      "count": 190
    }
  ],
  "reviewKeywords": [
    {
      "keyword": "인테리어가 멋져요",
      "category": null,
      "count": 1165
    },
    {
      "keyword": "커피가 맛있어요",
      "category": null,
      "count": 1012
    }
  ],
  "blogReviews": [
    {
      "title": "2026 청년문화주간 ‘요즘 청년, 요즘 문화’｜홍대에서 만나는 무료 강연·공연·문화체험✨",
      "url": "https://m.blog.naver.com/mcstkorea/224397397671",
      "source": "블로그",
      "blogName": "도란도란 문화놀이터",
      "date": "2026.09.02.",
      "excerpt": "9월 4일(금)부터 5일(토)까지 서울 홍대에서 <2026 청년문화주간, ‘요즘 청년, 요즘 문화’>가 열립니다. 올해 청년문화주간의 주제는 ‘사유의 깊이를 더하고 취향을 나누다’입니다. 조승연 작가를 비롯해 문화예",
      "thumbnailUrl": "http://blogfiles.naver.net/MjAyNjA5MDFfMjMy/MDAxNzg4MjQ0ODE1MDQ1.0RoK20OLzYOW1s5IB8vRJmOtjH9GRI1TDVJEzfdDdmUg.6g3r6WqgUs6lVcrEJS5gzjG-irqTd3ckfrxhUScRBi0g.PNG/%A1%DA%282026%29_%BA%ED%B7%CE%B1%D7_%BD%E6%B3%D7%C0%CF%28%C6%F9%C6%AE_%B1%B3%C3%BC%29.png#533x533"
    },
    {
      "title": "홍대 층별 테마가 다른 이색 대형카페 ㅎㄷ카페",
      "url": "https://m.blog.naver.com/q7313q/224380627395",
      "source": "블로그",
      "blogName": "삐더리의 일상의순간들",
      "date": "2026.08.16.",
      "excerpt": "안녕하세요 주말에 홍대 근처에서 여유로운 시간을 보낼 수 있는 멋진 공간을 찾다가 정말 놀라운 곳을 발견하게 되었어요. 홍대입구역, 상수역, 합정역 근처에서 약속 장소를 고를 때마다 수많은 카페들 중에서 어디를 가야",
      "thumbnailUrl": "http://blogfiles.naver.net/MjAyNjA4MThfMzcg/MDAxNzg3MDMzNzE0NTk1.tgzOWdbGkOQdQBq5fQ5d3qn5xyaJvurPmlIrHVTbMoUg.LTAlgjou5yFDgnACKMBuX0tHTgswT16yUVOm1G5Xkm8g.GIF/%A4%BE%A4%A7.gif#1080x1080#g"
    }
  ],
  "broadcasts": [],
  "photoUrls": [
    "https://naverbooking-phinf.pstatic.net/20250512_190/1747039631107tWYKO_PNG/%B7%E7%C7%C1%C5%BE%BB%E7%C1%F8_%C5%A9%B1%E2%C1%B6%C1%A4_20250109-1-1-1-light-1.png"
  ],
  "mediaReviewCount": 6256,
  "couponCount": 1,
  "naverBookingUrl": null,
  "regionCode": "09440120",
  "staticMapUrl": "https://simg.pstatic.net/static.map/v2/map/staticmap.bin?center=126.9214848%2C37.551176&level=16&dataversion=178.03&caller=naver_mstore&markers=pos%3A126.9214848%2037.551176%7Ctype%3Ac%7Ccolor%3Ablue%7Clabel%3Arestaurant",
  "reviews": [
    {
      "reviewId": "6aae38a3c75861538513f3ec",
      "rating": 5,
      "text": "분위기가 다양해서 좋아요",
      "visitedDate": "2026-09-19T07:22:00.000Z",
      "visitedLabel": "9.19.토",
      "createdLabel": "9.19.토",
      "visitCount": 2,
      "viewCount": 0,
      "verification": "영수증",
      "language": "ko",
      "authorNickname": "jyn****",
      "keywords": [
        "커피가 맛있어요",
        "디저트가 맛있어요"
      ],
      "visitContext": [
        "예약 없이 이용",
        "바로 입장",
        "친목",
        "지인・동료"
      ],
      "orderedItem": null,
      "photoUrls": [
        "https://pup-review-phinf.pstatic.net/MjAyNjA5MTlfMTc1/MDAxNzg5ODAyNjU3NTQx.57bDnaj1E70mUZJEOaf4AlXx5f6q4w8qHFJKUnGCJIIg.gi6IZVuHLF6hqNW4fTcCQRkibD-0peBrG3lrMOXRBTgg.JPEG/20260919_162319.jpg.jpg?type=w1500_60_sharpen"
      ],
      "videoUrls": [],
      "ownerReply": null
    },
    {
      "reviewId": "6aae35e53e86b039eea546e2",
      "rating": 5,
      "text": "추천합니다^^",
      "visitedDate": "2026-09-19T07:12:00.000Z",
      "visitedLabel": "9.19.토",
      "createdLabel": "9.19.토",
      "visitCount": 2,
      "viewCount": 0,
      "verification": "영수증",
      "language": "ko",
      "authorNickname": "이문수",
      "keywords": [
        "커피가 맛있어요",
        "인테리어가 멋져요",
        "친절해요"
      ],
      "visitContext": [
        "예약 없이 이용",
        "바로 입장",
        "친목",
        "지인・동료"
      ],
      "orderedItem": "유기농오렌지쥬스",
      "photoUrls": [],
      "videoUrls": [],
      "ownerReply": null
    }
  ],
  "reviewsFetched": 5,
  "contentHash": "a30534004574f648",
  "scrapedAt": "2026-09-19T13:44:07.754Z"
}
```

***

### Examples

**Top 100 restaurants around Gangnam Station, with details:**

```json
{
  "searchQueries": ["강남역 맛집"],
  "searchCenter": "37.4979,127.0276",
  "maxResultsPerQuery": 100
}
```

**Every café in a map area, past the 300 limit:**

```json
{
  "searchQueries": ["카페"],
  "boundingBox": "126.97,37.55,127.01,37.58",
  "maxResultsPerQuery": 0
}
```

**Most-reviewed Hongdae restaurants that deliver and are open now:**

```json
{
  "searchQueries": ["홍대 맛집"],
  "sortBy": "reviewTotalCount",
  "deliveryOnly": true,
  "openNow": true,
  "maxResultsPerQuery": 50
}
```

**Specific places with their 200 newest reviews:**

```json
{
  "startUrls": [{ "url": "https://map.naver.com/p/entry/place/11724463" }],
  "placeIds": ["2065894706"],
  "includeReviews": true,
  "maxReviewsPerPlace": 200
}
```

**Fast lead list without details, several districts:**

```json
{
  "searchQueries": ["강남 피부과", "서초 피부과", "송파 피부과"],
  "maxResultsPerQuery": 300,
  "includeDetails": false
}
```

***

### 💰 Pricing

**$1.49 per 1,000 places**, with full place details included. Visitor reviews, when switched on, are **$0.39 per 1,000 reviews**. You only pay for places and reviews actually delivered. Failed retries are never charged.

| Results | Places only | Places + 20 reviews each |
|---|---|---|
| 100 places | ~$0.15 | ~$0.93 |
| 1,000 places | ~$1.49 | ~$9.29 |
| 10,000 places | ~$14.90 | ~$92.90 |
| 100,000 places | ~$149.00 | ~$929.00 |

> Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Use **Max places in total** and **Max reviews per place** to control your spend exactly.

***

### Performance

| Run size | Typical time |
|---|---|
| 100 places with details | under 30 seconds |
| 300 places with details and 5 reviews each | about 1 minute |
| 1,500 places with details (area sweep) | about 5–6 minutes |
| 1,500 places without details | under 1 minute |

***

### Known limitations

- A single Naver search returns at most 300 places. Use `boundingBox` to cover a larger set.
- Naver paces heavy traffic. Large runs slow down at times rather than fail; the scraper waits and retries automatically.
- Values are in Korean as published by Naver (names, categories, addresses, menus). Field names are English.
- Filters and sort orders follow Naver's restaurant and café search and have limited effect on other categories.
- Reviews are capped at 1,000 per place.

***

### Technical details

- **Source:** map.naver.com (Naver Place): South Korean businesses of every category
- **Coverage:** all of South Korea, by keyword, map area or place link
- **Retry:** automatic retry with backoff and route switching when Naver paces requests

***

### Rate this actor

If this scraper does its job, a short review on the **Reviews** tab helps other users find it. Something not working? Open an issue on the **Issues** tab instead — issues get fixed.

***

### Need a custom scraper?

**[Unfenced Group](https://www.unfencedgroup.nl)** builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

**Get in touch:** [www.unfencedgroup.nl](https://www.unfencedgroup.nl)

# Actor input Schema

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

What to search for on Naver Map, exactly as you would type it on map.naver.com. Include an area for local results, e.g. "강남 맛집" (Gangnam restaurants), "홍대 카페", "부산 피부과". Each query returns up to 300 places; use boundingBox to cover a whole area.

## `startUrls` (type: `array`):

Specific Naver places to scrape. Accepts map.naver.com place links and m.place.naver.com or pcmap.place.naver.com links.

## `placeIds` (type: `array`):

Naver place IDs to scrape directly (the number in a Naver Map place link).

## `maxResultsPerQuery` (type: `integer`):

Maximum places saved per search query. A normal search stops at 300 (Naver's limit). With boundingBox set, 0 collects every matching place in the area.

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

Hard cap on places saved across all queries and place links. 0 means no cap.

## `searchCenter` (type: `string`):

Optional map point Naver ranks results around, as "latitude,longitude" (e.g. "37.4979,127.0276" for Gangnam Station). Without it Naver uses the area named in the query.

## `boundingBox` (type: `string`):

Optional map rectangle as "minLongitude,minLatitude,maxLongitude,maxLatitude". The actor splits the area into tiles until every matching place is collected, going past the 300-per-search limit. Example: "127.02,37.49,127.07,37.53" covers most of Gangnam-gu.

## `sortBy` (type: `string`):

Result order. relevance = Naver default, popular = most searched, trendy = trending now, tv = featured on TV, saved = most saved, reviewTotalCount = most reviewed. Sort options other than relevance apply to restaurants and cafés.

## `openNow` (type: `boolean`):

Only places open at the time of the run.

## `open24Hours` (type: `boolean`):

Only places open around the clock.

## `deliveryOnly` (type: `boolean`):

Only places offering delivery.

## `takeoutOnly` (type: `boolean`):

Only places offering takeout.

## `bookingOnly` (type: `boolean`):

Only places accepting Naver reservations.

## `newlyOpenedOnly` (type: `boolean`):

Only places Naver marks as newly opened.

## `couponOnly` (type: `boolean`):

Only places offering a Naver coupon.

## `naverPayOnly` (type: `boolean`):

Only places accepting Naver Pay.

## `wheelchairAccessibleOnly` (type: `boolean`):

Only places with a wheelchair-accessible entrance.

## `michelinOnly` (type: `boolean`):

Only places listed in the Michelin Guide (stars, Bib Gourmand or selected).

## `menuFilter` (type: `string`):

Only restaurants serving this dish, in Korean, e.g. "파스타" (pasta), "삼겹살" (pork belly), "카페" (café).

## `includeDetails` (type: `boolean`):

Adds opening hours by day with break times, full menu with prices, website, keywords, facilities, parking, payment methods, nearest subway and bus stops, review theme analysis, blog reviews, TV appearances and all photos. No extra charge.

## `includeReviews` (type: `boolean`):

Adds visitor reviews (text, rating, visit date, keywords, photos, owner reply) to each place. Charged per review.

## `maxReviewsPerPlace` (type: `integer`):

Maximum visitor reviews per place when reviews are included. 0 means all (up to 1,000).

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

Which reviews come first: newest or Naver's recommended order.

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

Optional. Leave empty: the actor manages its own connections to Naver. Set only if you need your own proxies.

## Actor input object example

```json
{
  "searchQueries": [
    "강남 맛집"
  ],
  "startUrls": [],
  "placeIds": [],
  "maxResultsPerQuery": 20,
  "maxItems": 0,
  "searchCenter": "",
  "boundingBox": "",
  "sortBy": "relevance",
  "openNow": false,
  "open24Hours": false,
  "deliveryOnly": false,
  "takeoutOnly": false,
  "bookingOnly": false,
  "newlyOpenedOnly": false,
  "couponOnly": false,
  "naverPayOnly": false,
  "wheelchairAccessibleOnly": false,
  "michelinOnly": false,
  "menuFilter": "",
  "includeDetails": true,
  "includeReviews": false,
  "maxReviewsPerPlace": 20,
  "reviewSort": "newest"
}
```

# 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 = {
    "searchQueries": [
        "강남 맛집"
    ],
    "maxResultsPerQuery": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/naver-map-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 = {
    "searchQueries": ["강남 맛집"],
    "maxResultsPerQuery": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/naver-map-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 '{
  "searchQueries": [
    "강남 맛집"
  ],
  "maxResultsPerQuery": 20
}' |
apify call unfenced-group/naver-map-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unfenced-group/naver-map-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/feS7LhDThsfJEDBu4/builds/GBYoVGAIB9XcQxqiT/openapi.json
