# Kakao Map Scraper (`parsebird/kakao-map-scraper`) Actor

Scrape Kakao Map (카카오맵) places by keyword, area and category: name, category, phone, address, coordinates, rating, reviews, photos, opening hours, menu and facilities. Export JSON, CSV or Excel.

- **URL**: https://apify.com/parsebird/kakao-map-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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

### Kakao Map Scraper

Kakao Map Scraper extracts places from [Kakao Map (카카오맵)](https://map.kakao.com), one of Korea's main map apps: restaurants, cafés, hotels, salons, clinics and any other business, with phone, address, coordinates, rating, reviews and photos.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search in Korean or English, or combine 71 popular areas (Gangnam, Hongdae, Seongsu, Haeundae, Jeju…) with 43 business categories. Add place details to get opening hours with break times, menus with prices, facilities, parking, payments, nearest subway exit, KakaoTalk channel and Kakao Map reviews. Go past Kakao's 500-places-per-search limit.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor or any other LLM to start using this Actor.

```
Use the Apify Actor "parsebird/kakao-map-scraper" (Kakao Map Scraper) to get places (businesses) from Kakao Map (map.kakao.com, South Korea). Call it with the apify-client package: Python `ApifyClient("<APIFY_TOKEN>").actor("parsebird/kakao-map-scraper").call(run_input={...})`, or JavaScript `new ApifyClient({ token }).actor('parsebird/kakao-map-scraper').call({...})`, then read items from the run's default dataset. Inputs (all optional, but give searchQueries, areas with categories, or startUrls): searchQueries (array of Kakao Map searches in Korean or English, e.g. ["강남역 카페", "제주 맛집", "스타벅스"]), areas (array of Korean area names, e.g. ["강남", "홍대", "성수동", "해운대", "제주"]), categories (array of Korean business types, e.g. ["카페", "맛집", "미용실", "호텔", "병원"]; every area is searched with every category, e.g. "홍대 카페"), startUrls (array of {url}: place URLs https://place.map.kakao.com/{id} or search URLs https://map.kakao.com/?q=...), maxItems (int, default 100, total across all searches; Kakao shows max 500 places per search and the Actor splits bigger searches into smaller map areas), sortBy ("accuracy" default or "popularity"), includeDetails (bool, default false: opening hours, menu, facilities, parking, payments, subway, KakaoTalk channel, all phones and links), maxReviews (int, default 0, Kakao Map reviews per place, needs includeDetails), reviewSort ("recommended" default or "latest"), proxyConfiguration (object, default no proxy). Each item has placeId, name, placeUrl, category, categoryPath, categoryId, franchise, phone, address (lot/jibun), roadAddress, zipcode, province, district, neighborhood, latitude, longitude, ratingAverage, ratingCount (Kakao Map reviews), blogReviewCount, photoCount, imageUrl, photoUrls, homepage, keywords, amenities (object of booleans: parking, wifi, petFriendly, delivery, takeout, reservation, wheelchairAccessible, smokingRoom, nursery), isNewOpen, hasKakaoTalkChannel, searchQuery, scrapedAt; with includeDetails also phoneNumbers, homepages, links, openStatus, openStatusInfo, daysOff, openingHours (period, day, hours, breakTimes, lastOrder), openingHoursNext7Days, menu (name, price in KRW, description, recommended, photoUrl), menuUpdatedAt, facilities, parkingInfo, payments, nearestSubway (station, exit, distanceMeters, walkMinutes, lines), kakaoTalkChannel (name, friendCount, url), priceLevel, aiSummaryTitle, aiSummary, ownerIntro, reservationUrl, reviewStrengths, photoCounts, reviews (reviewId, rating, text, photoCount, likeCount, authorName, date). Pricing: pay per place saved. API docs: https://apify.com/parsebird/kakao-map-scraper/api. Get a token at https://console.apify.com/settings/integrations.
```

### What is Kakao Map Scraper?

**Kakao Map Scraper** turns [Kakao Map](https://map.kakao.com) search results into clean JSON, CSV or Excel. Type a search the way you would on Kakao Map, such as `강남역 카페`, `역삼동 미용실` or `제주 맛집`, or pick areas and categories from a list. The Actor returns **every matching place** with its **name, category, phone number, lot and road address, zip code, coordinates, star rating, review counts, photos, homepage and amenities**.

It works as a **Kakao Map API alternative**. Kakao's official Local API needs an app key and returns basic fields only. Kakao Map Scraper collects the data the Kakao Map website shows, including ratings, review counts, keywords, opening hours, menus and reviews, with no key and no login.

To try it, open the Input tab and click **Start**. The prefilled run saves 30 cafés near Gangnam Station with place details and 3 reviews each.

### What can Kakao Map Scraper do?

- 🔎 **Search Kakao Map**: add any search in Korean or English: an area plus a business type (`홍대 맛집`, `Gangnam station cafe`), a brand (`스타벅스`) or a place name. Each search runs on its own, and places found by more than one search are saved once.
- 📍 **Areas × categories**: pick from 71 popular areas, from Seoul's Gangnam, Hongdae, Seongsu-dong and Itaewon to Busan Haeundae, Jeju Aewol and Gyeongju, and 43 categories such as cafés, restaurants, Korean BBQ, hotels, hair salons, dermatology clinics and gyms. Every area is searched with every category.
- 🔗 **Scrape place URLs**: paste Kakao Map place links (`place.map.kakao.com/…`, `map.kakao.com/link/map/…`) to get full data for specific businesses, or Kakao Map search links to run their search.
- 📈 **Go past the 500-place limit**: Kakao Map shows at most 500 places for one search. When you ask for more, the Actor splits the area Kakao searched into smaller map areas and reads each one, so a search like `서울 맛집` (144,534 places on Kakao) isn't stuck at 500.
- 🕒 **Place details**: turn on **Scrape place details** to add opening hours per day with break times and last order, days off, today's open or closed status, the menu with prices, facilities, parking information, accepted payments, the nearest subway station and exit, the KakaoTalk channel with its friend count, all phone numbers and links, review keywords and photo counts.
- ⭐ **Kakao Map reviews**: add up to 1,000 reviews per place with star rating, text, photo count, likes and date, in recommended or latest order.
- ⚙️ **Built for automation**: [schedule runs](https://docs.apify.com/platform/schedules) to track new openings or rating changes, call the Actor through the [Apify API](https://apify.com/parsebird/kakao-map-scraper/api), send results to [Make, Zapier, n8n, Google Sheets, Slack and more](https://apify.com/integrations), and export as JSON, CSV, Excel or HTML.

### What data can you extract from Kakao Map?

| Field | Description |
|-------|-------------|
| `placeId`, `name`, `placeUrl` | Kakao place ID, business name and link to its Kakao Map page |
| `category`, `categoryPath`, `categoryId` | Most specific category, the full path such as `음식점 > 카페 > 커피전문점 > 블루보틀`, and Kakao's category ID |
| `franchise` | Brand for chain stores whose category ends with the brand, such as `스타벅스` or `준오헤어` |
| `phone`, `phoneNumbers` | Main phone number, and every number listed on the place page (details) |
| `address`, `roadAddress`, `zipcode` | Lot (jibun) address, road-name address and 5-digit postal code |
| `province`, `district`, `neighborhood` | Address parts, for example `서울`, `강남구`, `역삼동` |
| `latitude`, `longitude` | Coordinates (WGS84) |
| `ratingAverage`, `ratingCount`, `blogReviewCount` | Kakao Map star rating, number of Kakao Map reviews, and number of blog reviews linked to the place |
| `photoCount`, `imageUrl`, `photoUrls`, `photoCounts` | Total photos, main photo, up to 10 photo URLs, and photo counts by type such as food, indoor and menu (details) |
| `homepage`, `homepages`, `links` | Website or social page, and all of them with labels (details) |
| `keywords` | Kakao's keyword tags, such as `디저트카페`, `오션뷰` or `주차가능카페` |
| `amenities` | `parking`, `wifi`, `petFriendly`, `delivery`, `takeout`, `reservation`, `wheelchairAccessible`, `smokingRoom`, `nursery`: `true`, `false`, or `null` when Kakao has no data |
| `openStatus`, `openStatusInfo`, `daysOff` | Status at the time of the run (`영업 중`, `영업 마감`, `곧 영업 마감`), next change (`22:30 까지`), and days off such as `연중무휴` (details) |
| `openingHours`, `openingHoursNext7Days` | Regular hours per day and for public holidays, and hours for the next 7 days, each with break times, last order and closed days (details) |
| `menu`, `menuUpdatedAt` | Menu items with price in won, description, photo and recommended flag (details) |
| `facilities`, `parkingInfo`, `payments` | Facility and service labels by section, parking notes, and payment options such as `카카오페이` or `제로페이` (details) |
| `nearestSubway` | Nearest subway station, exit number, walking distance in metres, minutes and lines (details) |
| `kakaoTalkChannel`, `hasKakaoTalkChannel` | KakaoTalk channel name, friend count and link (details) |
| `priceLevel`, `aiSummaryTitle`, `aiSummary`, `ownerIntro` | Kakao's price level (`₩` to `₩₩₩₩`), the AI-written place summary Kakao shows, and the owner's introduction (details) |
| `reviewStrengths` | Review keywords with counts, such as 맛 (taste), 친절 (kindness), 분위기 (atmosphere) (details) |
| `reviews` | Kakao Map reviews: `rating`, `text`, `photoCount`, `likeCount`, `authorName`, `date` |
| `searchQuery`, `scrapedAt` | The search the place came from and when it was collected |

Fields a place doesn't have come back as `null` or an empty list. Hotels have no opening hours, many places have no menu on Kakao, and Kakao turns reviews off for some categories, such as hospitals.

### How to scrape Kakao Map

1. Open [Kakao Map Scraper](https://apify.com/parsebird/kakao-map-scraper) on Apify Store and go to the Input tab.
2. Type one or more **Search queries**, such as `성수동 카페` or `부산 서면 맛집`. Or pick **Areas** and **Categories**, or paste Kakao Map URLs.
3. Set **Max places** for the whole run and choose **Sort by**: accuracy or popularity.
4. Turn on **Scrape place details** for opening hours, menus and facilities, and set **Max reviews per place** if you want reviews.
5. Click **Start**. When the run finishes, download the dataset as JSON, CSV, Excel or HTML, or read it with the [dataset API](https://docs.apify.com/api/v2/dataset-items-get).

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchQueries` | array of strings | No | — | Kakao Map searches in Korean or English, such as `강남역 카페` or `제주 맛집` |
| `areas` | array of strings | No | — | Popular areas, such as `강남`, `홍대`, `성수동`, `해운대`, `제주`. Each one is searched with every category |
| `categories` | array of strings | No | — | Business types, such as `카페`, `맛집`, `미용실`, `호텔`, `병원`. Without areas, searched across Korea |
| `startUrls` | array | No | — | Kakao Map place URLs or search URLs |
| `maxItems` | integer | No | `100` | Maximum places to save in total, across all searches and URLs |
| `sortBy` | string | No | `accuracy` | `accuracy` (정확도순) or `popularity` (인기도순) |
| `includeDetails` | boolean | No | `false` | Add opening hours, menu, facilities, parking, payments, subway, KakaoTalk channel and more |
| `maxReviews` | integer | No | `0` | Kakao Map reviews per place (0–1,000). Needs `includeDetails` |
| `reviewSort` | string | No | `recommended` | `recommended` (추천순) or `latest` (최신순) |
| `proxyConfiguration` | object | No | no proxy | Proxy settings. Kakao Map works without one |

Give at least one search query, an area or category, or a URL. Example input:

```json
{
    "areas": ["홍대", "성수동"],
    "categories": ["카페", "베이커리"],
    "maxItems": 400,
    "sortBy": "popularity",
    "includeDetails": true,
    "maxReviews": 10
}
```

### Output example

A café with **Scrape place details** on and one review, and a hotel from search results only. Fields that are empty for the place are left out here to keep the example short.

```json
[
    {
        "placeId": "495658881",
        "name": "블루보틀 역삼카페",
        "placeUrl": "https://place.map.kakao.com/495658881",
        "category": "블루보틀",
        "categoryPath": "음식점 > 카페 > 커피전문점 > 블루보틀",
        "categoryId": "26249",
        "franchise": "블루보틀",
        "phone": "1533-6906",
        "address": "서울 강남구 역삼동 648-9 강남N타워 1층",
        "roadAddress": "서울 강남구 테헤란로 129",
        "zipcode": "06133",
        "province": "서울",
        "district": "강남구",
        "neighborhood": "역삼동",
        "latitude": 37.50003049,
        "longitude": 127.03237757,
        "ratingAverage": 4,
        "ratingCount": 145,
        "blogReviewCount": 163,
        "photoCount": 883,
        "imageUrl": "http://t1.kakaocdn.net/mystore/B1F2AC415A44461E8AC3DF6149C625E1",
        "homepage": "https://kr.bluebottlecoffee.com/",
        "keywords": ["핸드드립전문점"],
        "amenities": {"parking": true, "wifi": false, "petFriendly": false, "delivery": true, "takeout": true, "reservation": false, "wheelchairAccessible": true, "smokingRoom": null, "nursery": null},
        "isNewOpen": false,
        "hasKakaoTalkChannel": true,
        "phoneNumbers": ["1533-6906"],
        "homepages": ["https://kr.bluebottlecoffee.com/", "https://www.instagram.com/bluebottlekorea/"],
        "openStatus": "영업 마감",
        "openStatusInfo": "내일 08:00 오픈",
        "openingHours": [
            {"period": "기본 영업시간", "day": "매일", "hours": "08:00 ~ 20:00", "breakTimes": [], "lastOrder": null, "closed": null},
            {"period": "공휴일", "day": null, "hours": "08:00 ~ 20:30", "breakTimes": [], "lastOrder": null, "closed": null}
        ],
        "menu": [{"name": "아메리카노", "price": 5900, "description": null, "recommended": false, "photoUrl": null}],
        "menuUpdatedAt": "2025-03-31T23:52:13+09:00",
        "facilities": {"상세 정보": ["카카오페이", "핸드드립전문점", "주차 가능", "장애인 시설"]},
        "payments": ["카카오페이"],
        "nearestSubway": {"station": "역삼역", "exit": "4", "distanceMeters": 344, "walkMinutes": 6, "lines": ["2"]},
        "kakaoTalkChannel": {"name": "블루보틀역삼카페", "friendCount": 1, "url": "http://pf.kakao.com/_rTgSn"},
        "priceLevel": "₩",
        "aiSummaryTitle": "햇살 머금은 미니멀 감성카페",
        "reviewStrengths": [{"name": "맛", "count": 37}, {"name": "친절", "count": 34}, {"name": "분위기", "count": 26}],
        "photoCounts": {"kakaoMapReviews": 54, "food": 5, "indoor": 207, "outdoor": 41, "menu": 4},
        "reviews": [{"reviewId": "15783767", "rating": 5, "text": "싱글오리진 굿!", "photoCount": 1, "likeCount": 0, "date": "2026-06-19T15:37:02+09:00"}],
        "searchQuery": "블루보틀 역삼",
        "scrapedAt": "2026-10-30T13:25:21.144Z"
    },
    {
        "placeId": "7897884",
        "name": "웨스틴조선 부산",
        "placeUrl": "https://place.map.kakao.com/7897884",
        "category": "조선호텔",
        "categoryPath": "여행 > 숙박 > 호텔 > 조선호텔",
        "categoryId": "2993",
        "franchise": "조선호텔",
        "phone": "051-749-7000",
        "address": "부산 해운대구 우동 737",
        "roadAddress": "부산 해운대구 동백로 67",
        "zipcode": "48100",
        "province": "부산",
        "district": "해운대구",
        "neighborhood": "우동",
        "latitude": 35.15610748,
        "longitude": 129.15402361,
        "ratingAverage": 4.2,
        "ratingCount": 187,
        "blogReviewCount": 801,
        "photoCount": 2477,
        "homepage": "http://josunhotel.com/hotel/westinBusan.do",
        "keywords": ["가족실", "글램핑", "비즈니스호텔", "사우나", "연회장", "오션뷰", "조식서비스", "호캉스"],
        "amenities": {"parking": true, "wifi": null, "petFriendly": null, "delivery": null, "takeout": null, "reservation": true, "wheelchairAccessible": null, "smokingRoom": null, "nursery": null},
        "searchQuery": "웨스틴조선 부산",
        "scrapedAt": "2026-10-30T13:25:40.358Z"
    }
]
```

### Use Kakao Map Scraper from Python or JavaScript

Install the client with `pip install apify-client` or `npm install apify-client`, and get your API token from [Apify Console](https://console.apify.com/settings/integrations).

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("parsebird/kakao-map-scraper").call(run_input={
    "searchQueries": ["성수동 카페", "연남동 카페"],
    "maxItems": 300,
    "includeDetails": True,
})

for place in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(place["name"], place["ratingAverage"], place["phone"], place["roadAddress"], place["openStatus"])
```

**JavaScript**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('parsebird/kakao-map-scraper').call({
    areas: ['해운대', '광안리'],
    categories: ['호텔'],
    sortBy: 'popularity',
    maxItems: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((p) => console.log(p.name, p.ratingAverage, p.ratingCount, p.latitude, p.longitude));
```

### Use cases

- **Lead generation in Korea**: build lists of businesses by area and category with phone numbers, addresses, websites and KakaoTalk channels.
- **Market and location research**: count cafés, clinics or gyms per district, map them with coordinates, and compare ratings and review volume before opening a new store.
- **Competitor and franchise tracking**: collect every branch of a brand such as 스타벅스 across Korea, or watch a competitor's ratings, menu prices and hours.
- **Review analysis**: pull Kakao Map reviews and review keywords for sentiment analysis or reputation monitoring.
- **Travel and food guides**: gather top-rated restaurants, cafés and hotels in tourist areas such as Jeju, Gyeongju or Busan, with hours, menus and subway access.
- **Data for maps and apps**: feed places into GIS tools, dashboards, spreadsheets or local search apps.

### How it works

1. The Actor runs each search on Kakao Map, the same way the Kakao Map website does, and reads up to 500 places in one request.
2. Kakao shows at most 500 places for a search. When a search has more and **Max places** is higher, the Actor works out the map area Kakao searched (around a place name such as 강남역, a district such as 강남구, a province such as 제주, or all of Korea) and splits it into smaller areas until each holds 500 places or fewer.
3. With **Scrape place details** on, it opens each place's Kakao Map page, 8 at a time, and then reads the reviews you asked for, 20 per request.
4. Places are de-duplicated across searches and saved to the dataset as they come in. If Apify moves the run to another server, it continues without saving the same place twice.

In our tests on Apify, `강남역 카페` returned all 2,966 places Kakao reports for it, `스타벅스` returned all 2,820 Starbucks-related places across Korea, and 20,000 places for `서울 맛집` took under 5 minutes. 500 places with details and 20 reviews each took about 90 seconds.

### How much does it cost to scrape Kakao Map?

Kakao Map Scraper uses pay-per-event pricing: you pay for each place saved to the dataset. Compute and proxy costs are included in the event price, so they aren't billed separately.

| Event | Free | Bronze | Silver | Gold |
|-------|------|--------|--------|------|
| Place scraped | $3.99 / 1,000 | $3.49 / 1,000 | $2.99 / 1,000 | **$2.49 / 1,000** |

One saved place is one charge, with or without place details and reviews. At Free plan prices, 100 places cost about $0.40 and 10,000 places cost $39.90. To control spending, set **Max places**. The run also stops when it reaches the maximum cost per run you set in Apify Console.

### Is it legal to scrape Kakao Map?

Kakao Map Scraper only collects place information that Kakao Map shows publicly to visitors who aren't logged in. It doesn't log in and doesn't access private Kakao accounts or messages. Business listings are mostly business data, but reviews include the reviewer's nickname and their own text. If you store or use personal information, you're responsible for complying with Korea's Personal Information Protection Act (PIPA), other laws that apply to you, and Kakao's terms of service. Consult a lawyer if you're unsure. For more background, read Apify's article [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Other Korean and map scrapers from ParseBird

| Actor | What it does |
|-------|--------------|
| [NAVER Map Scraper](https://apify.com/parsebird/naver-map-scraper) | Places from Naver Map, Korea's other major map app |
| [Naver Map Scraper (한국어)](https://apify.com/parsebird/naver-map-scraper-korean) | The same Naver Map scraper with a Korean-language interface |
| [NAVER Place Review Scraper](https://apify.com/parsebird/naver-place-review-scraper) | Visitor and blog reviews of Naver places |
| [NAVER Blog & Cafe Scraper](https://apify.com/parsebird/naver-blog-cafe-scraper) | Posts from Naver Blog and Naver Cafe search |
| [Coupang Korea Product Scraper](https://apify.com/parsebird/coupang-scraper) | Products and prices from Coupang |
| [Coupang Review Scraper](https://apify.com/parsebird/coupang-review-scraper) | Product reviews from Coupang |
| [Yandex Maps Scraper](https://apify.com/parsebird/yandex-maps-scraper) | Businesses with phones and reviews from Yandex Maps |

### FAQ

**Do I need a Kakao account or API key?**
No. The Actor reads the same public data the Kakao Map website shows to logged-out visitors.

**Can I search in English?**
Yes. Kakao Map understands many English searches, for example `Gangnam station cafe`. Place names, addresses and categories come back in Korean, as Kakao Map shows them.

**Can I get more than 500 places from one search?**
Yes. Kakao Map stops at 500 places per search. When **Max places** is higher, the Actor splits the search into smaller map areas. Those places are saved area by area, so they don't follow your **Sort by** order. For searches with a province or region name, such as `제주 카페`, a few places can be missed (in our test, 4,036 of the 4,054 Kakao reported).

**Why does a search for an area return places just outside it?**
Kakao searches a square map area around the place name you type, not the exact district borders. For example, `강남역 카페` includes cafés in Seocho-gu near Gangnam Station. Use the `district` and `neighborhood` fields to filter.

**Why are opening hours, menu or reviews empty for some places?**
They're only filled when **Scrape place details** is on, and only when the business has them on Kakao Map. Hotels usually have no opening hours, many places have no menu, and Kakao doesn't show reviews for some categories, such as hospitals.

**What is `aiSummary`?**
It's the AI-written summary that Kakao Map shows on the place page. The Actor copies it as is.

**Is the "latest" review order exact?**
It's Kakao Map's own latest order (최신순). It's newest first, but Kakao sometimes lists two reviews from close dates in swapped order.

**Do I need a proxy?**
No. Kakao Map Scraper runs without a proxy by default. If Kakao starts refusing requests, it switches to Apify datacenter proxy and then Korean residential proxy by itself.

**Can I run it on a schedule or from my own code?**
Yes. Use [Apify schedules](https://docs.apify.com/platform/schedules) for daily or weekly runs, the [Apify API](https://apify.com/parsebird/kakao-map-scraper/api) or the Python and JavaScript clients above, and [integrations](https://apify.com/integrations) to push results to Google Sheets, Slack, Make, Zapier or n8n.

**Something doesn't work or a field is missing. What should I do?**
Open an issue on the Actor's [Issues tab](https://apify.com/parsebird/kakao-map-scraper/issues) with your input and run ID, and we'll look into it.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/kakao-map-scraper/changelog.md

# Actor input Schema

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

Type what you would type into Kakao Map, in Korean or English: a place or area plus a business type (강남역 카페, 역삼동 미용실, 제주 맛집), a brand (스타벅스) or a place name. Each query runs as its own search.

## `areas` (type: `array`):

Pick popular Korean areas. Each area is searched with every category you pick below (for example Hongdae + Cafés searches 홍대 카페). Use Search queries for any other area.

## `categories` (type: `array`):

Pick business types to search in every area above. With no area, each category is searched across all of Korea.

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

Add Kakao Map place URLs (https://place.map.kakao.com/27254228) to scrape specific places, or Kakao Map search URLs (https://map.kakao.com/?q=홍대 맛집) to run their search.

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

Maximum number of places to save in total, across all searches and URLs. Kakao Map shows up to 500 places per search; above that the Actor splits the search into smaller map areas to get more.

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

Order of the search results, as on Kakao Map. Searches split into map areas past 500 places are saved area by area.

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

Open each place's page to add opening hours, break times, menu with prices, facilities, parking, payments, nearest subway, KakaoTalk channel, all phone numbers and links, review keywords and photo counts.

## `maxReviews` (type: `integer`):

Number of Kakao Map reviews (star rating, text, date) to add to each place. Needs Scrape place details. 0 = no reviews.

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

Which reviews to take first.

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

Kakao Map works without a proxy, so none is used by default. If Kakao starts refusing requests, the Actor switches to Apify datacenter proxy and then Korean residential proxy by itself.

## Actor input object example

```json
{
  "searchQueries": [
    "강남역 카페"
  ],
  "startUrls": [],
  "maxItems": 30,
  "sortBy": "accuracy",
  "includeDetails": true,
  "maxReviews": 3,
  "reviewSort": "recommended",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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": [
        "강남역 카페"
    ],
    "startUrls": [],
    "maxItems": 30,
    "includeDetails": true,
    "maxReviews": 3,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/kakao-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": ["강남역 카페"],
    "startUrls": [],
    "maxItems": 30,
    "includeDetails": True,
    "maxReviews": 3,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/kakao-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": [
    "강남역 카페"
  ],
  "startUrls": [],
  "maxItems": 30,
  "includeDetails": true,
  "maxReviews": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call parsebird/kakao-map-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/kakao-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/r2puULRhpSffBDga4/builds/4rHQrJbweiKvT5WbB/openapi.json
