# Kakao Map Search Scraper (카카오맵 장소 검색) (`hgservices/kakao-map-search-scraper`) Actor

Search Kakao Map (카카오맵) by keyword, like 강남 맛집 or 제주 카페, and get every matching Korean place: name, category, phone, address, postal code, GPS, rating, review counts, amenities and photo. Goes past the 500-result cap for lead lists.

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

## Pricing

from $1.00 / 1,000 scraped 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

Search **Kakao Map (카카오맵)** by keyword, as you do in the Kakao Map app, and get **every matching Korean place**: restaurants (맛집), cafes, clinics, academies, shops, hotels and more. For each place you get the **name, category, phone number, homepage, road and lot address, postal code, GPS coordinates, rating, rating count, blog review count, amenities, payment options and photo**.

**Kakao Map shows only 500 places for one search. This Actor goes past that limit**, so you can get thousands of places for one keyword — for example, all the cafes in Seongsu-dong (성수동 카페) or every 맛집 around Gangnam. No Kakao account, login, cookies or API key is needed.

Download the places as JSON, CSV or Excel, run the Actor from the API on a schedule, or ask an AI assistant such as Claude or ChatGPT to search Kakao Map for you.

> 카카오맵 장소 검색 크롤러: 키워드(예: 강남 맛집, 판교 치과)로 카카오맵을 검색하고, 장소명·업종·전화번호·주소·좌표·별점·리뷰 수를 엑셀, CSV 또는 JSON으로 내려받으세요. 검색 결과 500개 제한 없이 모든 장소를 수집합니다.

### What does Kakao Map Search Scraper do?

It searches Kakao Map for each keyword that you give it and saves **one row for each place** that Kakao Map finds:

- **Business data:** name, category (e.g. 커피전문점), full category path, phone number and homepage
- **Location:** road-name address (도로명), lot-number address (지번), postal code, floor, latitude and longitude
- **Reputation:** Kakao Map rating out of 5, rating count and blog review count
- **Details:** amenities (parking, Wi-Fi, delivery, takeout, reservation, pets, wheelchair access and more), keyword tags, payment options (카카오페이, 제로페이, local currency) and a "newly opened" flag
- **Photo:** the main photo of the place
- **Link:** the Kakao Map place page, ready for [Kakao Map Reviews Scraper](https://apify.com/hgservices/kakao-map-reviews-scraper) or [Kakao Map Building Directory](https://apify.com/hgservices/kakao-map-building-directory)

A keyword with a place name in it, such as **강남 맛집**, **판교 치과** or **제주 카페**, searches that area the same way the Kakao Map app does. A keyword without a place name, such as **커피**, searches all of South Korea.

Because it runs on the Apify platform, you also get API access, scheduling, integrations and run monitoring.

### Why scrape Kakao Map search results?

Kakao Map (카카오맵) is one of Korea's two main map apps, and it lists millions of Korean businesses. The official Kakao Local API returns at most 45 places for one keyword search, and the Kakao Map website shows at most 500.

- **B2B lead generation:** build lists of clinics, academies, restaurants or salons in an area, with phone numbers and addresses.
- **Market and location research:** count the competitors in a neighborhood and compare their ratings and review counts.
- **Franchise and site selection:** map every store of a brand or a category before you open a new location.
- **Local SEO and listing audits:** check how your business and your competitors appear on Kakao Map.
- **Datasets for maps and apps:** get categorized Korean places with GPS coordinates for your own map, CRM or analysis.

### How to scrape Kakao Map search results

1. Type your keywords into **Search keywords**, one on each line — for example `강남 맛집` or `판교 치과`.
2. Set **Max places per keyword**. Use `0` to get all places.
3. Click **Start** and wait for the run to finish.
4. Open the **Output** tab to see the places, or export them as JSON, CSV, Excel, XML or HTML.

### Input

| Field                                             | What it does                                                | Default      |
| ------------------------------------------------- | ----------------------------------------------------------- | ------------ |
| **Search keywords** (`searchQueries`)             | Keywords, one on each line, as you type them in Kakao Map   | — (required) |
| **Max places per keyword** (`maxResultsPerQuery`) | The maximum number of places for each keyword. `0` gets all | `100`        |

#### Example: the top 100 restaurants in Gangnam

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

#### Example: all the dentists in three areas

```json
{
    "searchQueries": ["판교 치과", "분당 치과", "수지 치과"],
    "maxResultsPerQuery": 0
}
```

### Output

You get one row for each place. Here is a row from a real run:

```json
{
    "query": "판교 치과",
    "rank": 1,
    "placeId": "1404885757",
    "name": "밸런스치과병원",
    "url": "https://place.map.kakao.com/1404885757",
    "category": "치과",
    "categoryPath": "의료,건강 > 병원 > 치과",
    "phone": "031-8039-7527",
    "homepage": "https://balancedental.co.kr",
    "address": "경기 성남시 분당구 분당내곡로 117",
    "jibunAddress": "경기 성남시 분당구 백현동 535 그레이츠판교 3층",
    "postalCode": "13529",
    "floor": "3",
    "latitude": 37.3940969,
    "longitude": 127.11252488,
    "rating": null,
    "ratingCount": 0,
    "blogReviewCount": 982,
    "keywords": ["임플란트", "치아교정", "투명교정", "야간진료", "사랑니발치"],
    "payments": ["카카오페이", "제로페이"],
    "amenities": {
        "parking": true,
        "wifi": true,
        "delivery": null,
        "takeout": null,
        "reservation": true,
        "pets": false,
        "wheelchairAccess": false,
        "nursingRoom": null,
        "smokingRoom": null
    },
    "isNewOpen": false,
    "imageUrl": "https://t1.kakaocdn.net/mystore/D715EC03585C4D86A5E39CF8F0D9352B",
    "scrapedAt": "2026-10-23T03:19:49.438Z"
}
```

The `keywords` list is shortened here. The **Output** tab shows the places in a table with the keyword, rank, name, category, phone, address, rating, rating count, blog review count and Kakao Map link.

#### Data fields

| Field                                   | Description                                                                                                                                            |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `query`                                 | The keyword that found the place                                                                                                                       |
| `rank`                                  | The position of the place in the keyword's results (see **Limits** for more than 500)                                                                  |
| `placeId`, `url`                        | Kakao Map place ID and place page link                                                                                                                 |
| `name`                                  | Place name                                                                                                                                             |
| `category`, `categoryPath`              | The category that Kakao Map shows, and the full category chain                                                                                         |
| `phone`, `homepage`                     | Phone number and website or social media link                                                                                                          |
| `address`, `jibunAddress`, `postalCode` | Road-name address, lot-number address (often with the floor) and postal code                                                                           |
| `floor`                                 | Floor in the building (`1`, `2`, `B1` and so on), when Kakao Map has it                                                                                |
| `latitude`, `longitude`                 | GPS coordinates (WGS84)                                                                                                                                |
| `rating`, `ratingCount`                 | Kakao Map score out of 5 and the number of ratings. `rating` is `null` when the place has no ratings                                                   |
| `blogReviewCount`                       | The number of blog reviews that Kakao Map links to the place                                                                                           |
| `keywords`                              | Tags that Kakao Map shows for the place                                                                                                                |
| `payments`                              | Payment options: 카카오페이, 제로페이 or a local currency such as 경기지역화폐                                                                         |
| `amenities`                             | `parking`, `wifi`, `delivery`, `takeout`, `reservation`, `pets`, `wheelchairAccess`, `nursingRoom`, `smokingRoom`: `true`, `false` or `null` (unknown) |
| `isNewOpen`                             | `true` when Kakao Map marks the place as newly opened                                                                                                  |
| `imageUrl`                              | The main photo of the place                                                                                                                            |
| `scrapedAt`                             | When your run collected the row (UTC)                                                                                                                  |

When Kakao Map does not have a value, the field is `null` (or an empty list).

### How to use Kakao Map Search Scraper

You can run the Actor in Apify Console, from your own code through the Apify API, or from an AI assistant. Every example below searches Kakao Map and gives the same rows.

#### In Apify Console

1. Open the Actor, type `강남 맛집` into **Search keywords** and set **Max places per keyword** to `50`.
2. Click **Start**. Watch the progress in the **Log** tab.
3. Open the **Output** tab when the run finishes, and click **Export** to download CSV, Excel or JSON.
4. Click **Save as a new task** to run the same search again with one click. Add a **Schedule** to the task to track new places every week or month.

#### With the Apify API (HTTP)

Run the Actor and get its results in one request. Replace `YOUR_API_TOKEN` with your token from **Settings → API & Integrations** in Apify Console.

```bash
curl -X POST "https://api.apify.com/v2/acts/hgservices~kakao-map-search-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["강남 맛집"], "maxResultsPerQuery": 50}'
```

Add `&format=csv` or `&format=xlsx` to the URL to get CSV or Excel instead of JSON. This request waits up to 5 minutes. For larger runs, start the run with `POST https://api.apify.com/v2/acts/hgservices~kakao-map-search-scraper/runs`, and then read the items of the run's default dataset when it finishes.

#### With the JavaScript client

Install the client with `npm install apify-client`, then run:

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('hgservices/kakao-map-search-scraper').call({
    searchQueries: ['강남 맛집', '성수동 카페'],
    maxResultsPerQuery: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const place of items) {
    console.log(place.query, place.name, place.category, place.phone, place.address, place.rating);
}
```

#### With the Python client

Install the client with `pip install apify-client` (version 3.0 or later), then run:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("hgservices/kakao-map-search-scraper").call(
    run_input={
        "searchQueries": ["판교 치과", "분당 치과"],
        "maxResultsPerQuery": 0,
    }
)
if run is None:
    raise RuntimeError("The run was not found.")

for place in client.dataset(run.default_dataset_id).iterate_items():
    print(place["name"], place["phone"], place["address"], place["rating"], place["ratingCount"])
```

#### With Claude, ChatGPT and other AI assistants (MCP)

Connect your AI assistant to the **Apify MCP server**. The assistant can then run this Actor for you and answer from the places. To give the assistant this Actor as a tool, use this server URL:

```
https://mcp.apify.com?tools=hgservices/kakao-map-search-scraper
```

- **Claude (claude.ai or Claude Desktop):** open **Settings → Connectors**, click **Add custom connector** and paste the URL.
- **Claude Code:** run `claude mcp add --transport http apify "https://mcp.apify.com?tools=hgservices/kakao-map-search-scraper"`.
- **Apify CLI:** run `apify mcp install claude-code --tools hgservices/kakao-map-search-scraper` (also works for `cursor`, `vscode` and `codex`).
- **ChatGPT:** in **Settings → Apps & Connectors**, turn on developer mode, create a connector and paste the URL.
- **Cursor, VS Code and other MCP clients:** add the URL as a remote (HTTP) MCP server. The [Apify MCP configurator](https://mcp.apify.com/) writes the configuration for your client.

Sign in with your Apify account when asked. Then ask in plain language, for example:

- *"Find the 50 best-rated cafes in Seongsu-dong on Kakao Map and list them with their phone numbers."*
- *"How many dentists does Kakao Map list in Pangyo, and which have more than 100 blog reviews?"*
- *"Get the pharmacies near Gangnam station from Kakao Map as a table with addresses and phone numbers."*

#### With integrations

Send the results to **Google Sheets, Slack, email, Zapier, Make, n8n, Airbyte** or any **webhook** from the Actor's **Integrations** tab. For example, put a fresh list of the clinics in your area into a Google Sheet every month.

### Tips

- **Add a place name to search one area.** `강남 맛집` searches around Gangnam, as in the Kakao Map app. Kakao Map also includes the places near the edge of the area, so you can see some rows from the next district.
- **Use more specific keywords for better lead lists.** `판교 소아과` gives a more exact list than `판교 병원`.
- **Use many keywords in one run.** Each keyword gets its own rows, and the `query` field tells them apart. A place that two keywords find appears once for each keyword.
- **Get the reviews.** Give the `url` values to [Kakao Map Reviews Scraper](https://apify.com/hgservices/kakao-map-reviews-scraper) to get the Kakao Map reviews and blog reviews of each place.
- **Give a large run more memory.** The default is 1,024 MB. More memory makes a run with thousands of places faster.
- **Translate or analyze the data.** Names and addresses are in Korean. Connect the Actor to an AI assistant through MCP to translate, summarize or classify the places.

### Limits

- **More than 500 places come in map order.** Kakao Map ranks only the first 500 places of a search. To get more, the Actor searches the map area by area. Then `rank` is the order in which the Actor found the places, not Kakao Map's ranking. Up to 500 places, `rank` is Kakao Map's own order.
- **A very dense spot can hide some places.** When more than 500 places of one keyword share a spot of about 100 × 100 metres, Kakao Map shows only 500 of them, and the run log tells you.
- **Very broad keywords are very large.** `커피` alone matches more than 150,000 places across Korea. Use **Max places per keyword** to control the size of the run.
- **Ratings need reviews.** `rating` is `null` until a place has Kakao Map ratings.

### Related Actors

- [Kakao Map Reviews Scraper](https://apify.com/hgservices/kakao-map-reviews-scraper) gets the Kakao Map reviews and blog reviews of the places that this Actor finds.
- [Kakao Map Building Directory](https://apify.com/hgservices/kakao-map-building-directory) lists every business inside a building, shopping mall or office tower, floor by floor.

### FAQ, disclaimers and support

**Do I need a Kakao account, an API key or cookies?**
No. The Actor reads only what Kakao Map shows to any visitor. It never logs in, so your account is never at risk.

**Do I need a proxy?**
No. You do not need to set up a proxy.

**Can I get more than 500 places for one keyword?**
Yes. Set **Max places per keyword** to `0` or to a number above 500. In a test run, the Actor got all 2,106 cafes that Kakao Map counts for `성수동 카페`, where the Kakao Map website stops at 500.

**How fast is it?**
In a test run with the default 1,024 MB of memory, the Actor got all 2,106 places for `성수동 카페` in less than 7 minutes.

**Which places does it find?**
Any place that the Kakao Map app finds for the same keyword: restaurants, cafes, bars, hospitals and clinics, pharmacies, beauty salons, academies, hotels, shops, offices and more.

**Is it legal to scrape Kakao Map?**
The Actor collects only business information that Kakao Map shows publicly without a login. You are responsible for using the data in line with Kakao's terms of service and with laws such as Korea's Personal Information Protection Act (PIPA) and the GDPR. Scrape only what you have a legitimate reason to use.

**I found a problem or need a feature.**
Open an issue on the **Issues** tab, and we will look into it. Custom solutions for Kakao Map and other Korean websites are available on request.

# Actor input Schema

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

One keyword on each line, as you type it in Kakao Map. Add a place name to search one area, e.g. 강남 맛집, 판교 치과 or 제주 카페. A keyword without a place name searches all of Korea.

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

The most places to get for each keyword. Set to 0 for all. Kakao Map shows 500 places for one search; above 500, the Actor splits the map into small areas to get more.

## Actor input object example

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

# 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": [
        "강남 맛집"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/kakao-map-search-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": ["강남 맛집"] }

# Run the Actor and wait for it to finish
run = client.actor("hgservices/kakao-map-search-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": [
    "강남 맛집"
  ]
}' |
apify call hgservices/kakao-map-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hgservices/kakao-map-search-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/rlDn9OAutYPQHmq19/builds/BzFSNOzg5A2fAbeoC/openapi.json
