# Kakao Map Scraper - Korea Local Businesses & Reviews (`haketa/kakao-map-scraper`) Actor

Kakao Map scraper & data API for South Korea local businesses: search any category or keyword by area and export name, category, phone, address, GPS, rating, reviews, business hours, amenities, homepage & photos. Korea local business data, lead generation & market research — fast, no login.

- **URL**: https://apify.com/haketa/kakao-map-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Lead generation, Social media
- **Stats:** 24 total users, 8 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Kakao Map Scraper — Korea Local Businesses, Ratings & Reviews

Extract **South Korean local business data** from Kakao Map at scale. Search any area and category — cafés, restaurants, salons, hospitals, hotels, shops — and export clean, structured data: **name, category, phone, address, GPS, rating, review count and review text, business hours, amenities, homepage and photos**.

No login. No API key. Just give it a Korean search term and get back a ready-to-use dataset in JSON, CSV, Excel, or via API.

> Built for local-SEO and lead-gen agencies, market researchers, and anyone who needs Korean local business data in bulk. The perfect companion to a Naver Place scraper for full Korean local coverage.

***

### 🧭 Table of contents

- [What this scraper does](#what-this-scraper-does)
- [Why use it](#why-use-it)
- [Who it's for](#who-its-for)
- [What data you get](#what-data-you-get)
- [Input options](#input-options)
- [Input examples](#input-examples)
- [Output example](#output-example)
- [How to use (step by step)](#how-to-use-step-by-step)
- [Tips for best results](#tips-for-best-results)
- [Use cases](#use-cases)
- [Integrations & export](#integrations--export)
- [Pricing](#pricing)
- [FAQ](#faq)

***

### What this scraper does

Kakao Map is one of South Korea's most-used map and local-discovery platforms. This actor turns its place listings into structured data you can analyze.

Give it natural Korean search terms that combine an **area** and a **category or keyword** — for example `강남 카페` (Gangnam cafés), `역삼동 미용실` (Yeoksam salons), or `제주 맛집` (Jeju restaurants). The actor searches, paginates through the results, and returns a rich record for every place — optionally enriched with business hours, recent reviews, homepage/social links, and facilities.

***

### Why use it

- ⚡ **Fast & efficient** — pulls structured data directly, no slow browser rendering.
- 🇰🇷 **Korea-native** — understands Korean categories, addresses (jibun and road), and place types.
- ⭐ **Ratings & reviews** — average rating, review count, and recent review text per place.
- 📞 **Contact & web** — phone numbers and homepage/social links for outreach and lead generation.
- 🕒 **Business hours & amenities** — opening hours plus parking, wifi, pet, delivery, and more.
- 🗺️ **Geo-ready** — every place includes latitude/longitude for mapping and spatial analysis.
- 📦 **Export anywhere** — JSON, CSV, Excel, HTML table, or RSS, plus a full REST API and integrations.

***

### Who it's for

- **Local-SEO & marketing agencies** building business lists by city and category.
- **Lead-generation teams** that want phone numbers, homepages, and social links at scale.
- **Market researchers** analyzing categories, ratings, and competition across Korean districts.
- **Franchises & retailers** monitoring competitors and locations.
- **Data & AI teams** that need fresh, structured Korean local data.

***

### What data you get

Each place includes (when available):

| Field | Description |
| --- | --- |
| `placeId` | Unique Kakao place ID |
| `name` | Business name |
| `placeUrl` | Link to the Kakao place page |
| `category` | Primary category |
| `categoryPath` | Full category hierarchy |
| `phone` | Phone number |
| `address` | Jibun (lot) address |
| `roadAddress` | Road-name address |
| `lat` / `lon` | GPS coordinates |
| `ratingAverage` | Average star rating |
| `ratingCount` | Number of ratings |
| `reviewCount` | Number of reviews |
| `homepage` | Homepage / social URL |
| `image` | Representative photo |
| `brand` | Brand name (for franchises) |
| `amenities` | Parking, wifi, pet, delivery, package, smoking room, nursery, accessibility, reservations |
| **With details enabled:** | |
| `businessHoursStatus` | Open / closed status text |
| `businessHours` | Business-hours summary |
| `businessHoursWeek` | Per-day opening hours |
| `homepages` | All homepage / social links |
| `facilities` | Facility flags (e.g. parking) |
| `kakaoTalkChannelFriends` | KakaoTalk channel follower count |
| `photoCount` | Number of photos |
| `reviews` | Recent reviews: `{ rating, text, photoCount, date }` |
| `scrapedAt` | When the record was scraped |

***

### Input options

| Option | Type | Description |
| --- | --- | --- |
| `searchQueries` | array | Korean search terms (area + category/keyword). |
| `includeDetails` | boolean | Add business hours, reviews, homepage and facilities (default: true). |
| `maxReviewsPerPlace` | integer | Max recent reviews per place (default: 5). |
| `maxItems` | integer | Maximum places to save (0 = no limit). |
| `maxConcurrency` | integer | Parallel detail requests (default: 8). |
| `proxyConfiguration` | object | Proxy settings (recommended for larger runs). |

***

### Input examples

#### 1. Cafés in an area

```json
{
  "searchQueries": ["강남 카페"],
  "includeDetails": true,
  "maxItems": 200
}
```

#### 2. Multiple areas and categories

```json
{
  "searchQueries": ["역삼동 미용실", "홍대 술집", "제주 맛집"],
  "includeDetails": true,
  "maxReviewsPerPlace": 10,
  "maxItems": 1000,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

#### 3. Fast list without details

```json
{
  "searchQueries": ["부산 호텔"],
  "includeDetails": false,
  "maxItems": 500
}
```

***

### Output example

```json
{
  "placeId": "1466542951",
  "name": "셀렉티드닉스",
  "placeUrl": "https://place.map.kakao.com/1466542951",
  "category": "카페",
  "categoryPath": "음식점 > 카페",
  "phone": "070-5176-7947",
  "address": "서울 강남구 역삼동 827-13",
  "roadAddress": "서울 강남구 강남대로 ...",
  "lat": 37.49622235,
  "lon": 127.03083799,
  "ratingAverage": 4.0,
  "reviewCount": 264,
  "homepage": "https://www.instagram.com/sltdnicks",
  "amenities": { "parking": true, "wifi": false, "pet": false, "delivery": false },
  "businessHoursStatus": "영업 중",
  "businessHours": "주중 17:00~24:00",
  "reviews": [
    { "rating": 5, "text": "공간이 넓고 좌석이 많아서 편하게 이용했어요...", "photoCount": 1, "date": "2026-05-20" }
  ],
  "scrapedAt": "2026-06-09T10:00:00.000Z"
}
```

***

### How to use (step by step)

1. Open the actor and click **Try for free**.
2. In **Search queries**, add Korean terms that combine an area and a category, e.g. `강남 카페`.
3. Toggle **Include details** for hours, reviews, and homepage links.
4. Set **Max items** to control dataset size.
5. Click **Save & Start**.
6. When the run finishes, open the **Dataset** tab and export to JSON, CSV, or Excel, or pull it via API.

***

### Tips for best results

- **Write queries in Korean.** Combine an area with a category — `강남 카페`, `제주 맛집`, `역삼동 병원`.
- **Be specific.** A neighborhood (동) + category yields tighter, more relevant results than a whole city.
- **Details cost extra requests.** Disable `includeDetails` for the fastest, cheapest runs when you only need core listing data.
- **Use a proxy** for large runs to keep throughput stable.
- **Pair with a Naver Place scraper** for complete Korean local coverage across both major platforms.

***

### Use cases

- 🧲 **Lead generation** — build contact lists (phone, homepage, social) of businesses by category and area.
- 📊 **Market & competitor research** — analyze ratings, review counts, and density across districts.
- 📍 **Local SEO** — audit listings and categories for clients across Korea.
- 🍴 **F\&B and retail intelligence** — track cafés, restaurants, and shops by neighborhood.
- 🤖 **AI & data products** — feed fresh, structured Korean local data into apps and assistants.

***

### Integrations & export

Export as **JSON, CSV, Excel, HTML table, or RSS**, or fetch results through the **API**. Connect to **Make, Zapier, n8n, Google Sheets, Slack, GitHub**, and more, or schedule runs to keep your dataset fresh.

***

### Pricing

This actor runs on a simple pay-per-result model — you only pay for the places you collect. Start small with the free tier and scale up as needed.

***

### FAQ

**What should I type as a search query?**
Korean terms that combine an area and a category or keyword, such as `강남 카페`, `역삼동 미용실`, or `제주 맛집`.

**Do I get reviews?**
Yes — with details enabled, each place includes its average rating, review count, and recent review text.

**Do I need an account or key?**
No login or API key is required.

**Can I get phone numbers and websites?**
Yes — phone numbers and homepage/social links are included, making this ideal for lead generation.

**How many places can I scrape?**
As many as your queries return — set `maxItems` to `0` for no limit.

**Does it work alongside a Naver Place scraper?**
Absolutely — Kakao Map and Naver Place together give you complete coverage of Korean local businesses.

**Why are some fields empty?**
Not every place exposes every field (e.g. homepage or some amenities). Core fields like name, category, address, and coordinates are almost always present.

***

Need another Korean data source or a custom field? Open an issue on the actor's **Issues** tab — feedback and feature requests are welcome.

### 📅 Changelog & Maintenance

**Last updated:** 2026-07-02 — Actor verified and maintained. Data pipeline tested for quality, structure and freshness; selectors/endpoints confirmed against the live site.

# Actor input Schema

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

Pick one or more popular Korean areas to search. Each area is combined with every category you choose below (for example Gangnam + Cafe). Leave empty to search nationwide popular spots.

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

Pick the types of businesses to collect. Each category is searched inside every area you selected above. Leave empty to let the run use a broad mix of popular categories.

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

Optional. Type your own Korean search terms combining an area and a category or keyword, for example 강남 카페, 역삼동 미용실, 제주 맛집. These are added on top of the areas and categories selected above. One per row.

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

Fetch each place's detail page to add business hours, rating, recent reviews, homepage/social links and facilities.

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

Maximum recent reviews to include per place when details are enabled.

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

Maximum number of places to save across all searches. 0 = no limit.

## `maxConcurrency` (type: `integer`):

Maximum parallel detail requests.

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

Apify Proxy. Datacenter by default (fast, low-cost); automatically escalates to Korea residential if a block is detected.

## Actor input object example

```json
{
  "areas": [
    "강남"
  ],
  "categories": [
    "카페"
  ],
  "searchQueries": [
    "강남 카페",
    "제주 맛집"
  ],
  "includeDetails": true,
  "maxReviewsPerPlace": 5,
  "maxItems": 100,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `places` (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 = {
    "areas": [
        "강남"
    ],
    "categories": [
        "카페"
    ],
    "searchQueries": [],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/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 = {
    "areas": ["강남"],
    "categories": ["카페"],
    "searchQueries": [],
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/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 '{
  "areas": [
    "강남"
  ],
  "categories": [
    "카페"
  ],
  "searchQueries": [],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/kakao-map-scraper --silent --output-dataset

```

## MCP server setup

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