# Kakao Map Reviews Scraper (카카오맵 리뷰 + 블로그 리뷰) (`hgservices/kakao-map-reviews-scraper`) Actor

Scrape Kakao Map (카카오맵) reviews for any Korean restaurant, cafe, hotel or shop: star rating, full text, photos, taste/price/service tags, likes and reviewer stats — plus the place's blog reviews with title, excerpt and link. Sort by newest or most helpful.

- **URL**: https://apify.com/hgservices/kakao-map-reviews-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 $2.00 / 1,000 scraped reviews

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

Scrape **Kakao Map reviews (카카오맵 리뷰)** of any Korean restaurant, cafe, hotel, clinic or shop. Give place links, and get each review's **star rating, full text, photos, date, likes, taste/value/service tags** and **reviewer stats** — plus the place's **blog reviews (블로그 리뷰)** with title, excerpt, photos and a link to the post.

**No Kakao account, login or cookies are needed.** Download the reviews 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 get Kakao Map reviews for you.

### What does Kakao Map Reviews Scraper do?

It opens each Kakao Map place that you give it and saves **one row for each review**. You get two kinds of reviews in one dataset, and the `source` field tells them apart:

- **Kakao Map reviews (후기)** — the star ratings and comments that people write on Kakao Map:
  - **Rating and text:** 1–5 stars and the **full review text**
  - **Photos:** links to the **original-size photos** of the review
  - **Strengths:** what the reviewer liked — 맛 (taste), 가성비 (value), 친절 (service), 분위기 (atmosphere), 주차 (parking)
  - **Engagement:** the like count and the **owner's pick** flag (the business pinned the review)
  - **Dates:** when the review was written and when it was last edited
  - **Reviewer:** nickname, user ID, Kakao Map level, review count, followers and average rating
- **Blog reviews (블로그 리뷰)** — the blog posts that Kakao Map links to the place:
  - **Post:** title, the excerpt that Kakao Map shows, and the **link to the blog post**
  - **Photos:** links to the post's photos
  - **Author and date:** blog author name and publish date

**Every row also has the place's name, ID, link, Kakao Map score and review count**, so you can mix many places in one table.

You can get **every Kakao Map review of a place**, sort by **newest** or **most helpful**, and get only the reviews written **after a date** — for example, the last 30 days.

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

### Why scrape Kakao Map reviews?

Kakao Map (카카오맵) is one of Korea's two main map apps. Koreans use it to find and rate restaurants, cafes, clinics and shops. The official Kakao Local API gives place search results, but no reviews.

- **Reputation monitoring:** get the new reviews of your stores or branches every day, and see low ratings early.
- **Competitor research:** compare the ratings, complaints and praise of competing restaurants, cafes or clinics.
- **Sentiment analysis and NLP:** build Korean review datasets with star ratings, dates and strength tags.
- **Market research for food and retail brands:** see what customers say about a menu, a price or a service across many places.
- **Influencer and blog outreach:** find the bloggers who write about a place or about your competitors.
- **Franchise and multi-location reporting:** put the reviews of all your locations in one sheet.

### How to scrape Kakao Map reviews in Apify Console

1. Open a place on [Kakao Map](https://map.kakao.com) and copy its link, for example `https://place.map.kakao.com/26428654`.
2. Paste one or more links into **Kakao Map places**, one on each line.
3. Choose the **Review sources**, the **Max reviews per place** and the sort order.
4. Optional: set **Reviews from** to get only recent reviews, for example `30 days`.
5. Click **Start** and wait for the run to finish.
6. Open the **Output** tab to see the reviews, or export them as JSON, CSV, Excel, XML or HTML.

### Input

| Field | What it does | Default |
|-------|--------------|---------|
| **Kakao Map places** (`places`) | Place links or place IDs, one on each line | — (required) |
| **Review sources** (`reviewSources`) | `kakaomap` for Kakao Map reviews, `blog` for blog reviews, or both | both |
| **Max reviews per place** (`maxReviewsPerPlace`) | The maximum number of reviews for each place from each source. `0` gets all | `100` |
| **Sort Kakao Map reviews by** (`sortBy`) | `newest` (최신 순) or `helpful` (유용한 순). Blog reviews are always newest first | `newest` |
| **Reviews from** (`dateFrom`) | Only reviews written on or after this date (Korea time). Use a date such as `2026-01-01`, or a period such as `7 days`, `2 weeks`, `6 months` or `1 year` | all dates |

These place formats all work:

- Place links: `https://place.map.kakao.com/26428654` (also the mobile `m.place.map.kakao.com` links)
- Map links: `https://map.kakao.com/?itemId=26428654` and `https://map.kakao.com/link/map/26428654`
- Bare place IDs: `26428654`

Each place is scraped one time, also when two lines in the list point to the same place.

#### Example: the 50 newest Kakao Map reviews of one place

```json
{
  "places": ["https://place.map.kakao.com/26428654"],
  "reviewSources": ["kakaomap"],
  "maxReviewsPerPlace": 50,
  "sortBy": "newest"
}
```

#### Example: all reviews of the last 30 days for many places

```json
{
  "places": [
    "https://place.map.kakao.com/26428654",
    "https://map.kakao.com/?itemId=1737095608"
  ],
  "reviewSources": ["kakaomap", "blog"],
  "maxReviewsPerPlace": 0,
  "dateFrom": "30 days"
}
```

#### Example: every Kakao Map review, most helpful first

```json
{
  "places": ["26428654"],
  "reviewSources": ["kakaomap"],
  "maxReviewsPerPlace": 0,
  "sortBy": "helpful"
}
```

### Output

You get one row for each review. Here is a Kakao Map review from a real run:

```json
{
  "source": "kakaomap",
  "placeId": "26428654",
  "placeName": "하동관 코엑스몰직영점",
  "placeUrl": "https://place.map.kakao.com/26428654",
  "placeRating": 3.3,
  "placeReviewCount": 207,
  "reviewId": "16815499",
  "rating": 4,
  "title": null,
  "text": "하동관. 오랜만에 방문하였습니다.\n코엑스 스타필드몰에도 입점해 있네요. 11시쯤 방문하니 대기없이 들어올수 있었어요. 진한 곰탕에 밥이 말아져 있어서 깔끔하기 먹기 너무 좋은것 같아요. 요런 깊은 맛은 역시 하동관이 최고이죠!!! 가격은 물론 조금 비싸요.",
  "url": null,
  "publishedAt": "2026-10-20T23:20:09+09:00",
  "updatedAt": "2026-10-20T23:20:09+09:00",
  "photoCount": 2,
  "photos": [
    "https://t1.kakaocdn.net/local/kakaomapPhoto/review/e7f26f1bb3e53f3c1e49c27896f4fd445365a810?original",
    "https://t1.kakaocdn.net/local/kakaomapPhoto/review/14caa859c427ea8b077665e35a2f33ffee69f0bd?original"
  ],
  "strengths": ["맛", "친절"],
  "likeCount": 0,
  "isOwnerPick": false,
  "authorName": "Jerry Chung",
  "authorId": "325707546",
  "authorLevel": 36,
  "authorReviewCount": 108,
  "authorFollowerCount": 35,
  "authorAverageRating": 4,
  "scrapedAt": "2026-10-21T05:48:44.864Z"
}
```

And here is a blog review of the same place (the `text` and the `photos` list are shortened):

```json
{
  "source": "blog",
  "placeId": "26428654",
  "placeName": "하동관 코엑스몰직영점",
  "placeUrl": "https://place.map.kakao.com/26428654",
  "placeRating": 3.3,
  "placeReviewCount": 207,
  "reviewId": "102836457",
  "rating": null,
  "title": "80년의 시간으로 우려낸 진한 곰탕 하동관 코엑스몰 직영점",
  "text": "26년 1월. 여전히 추운날씨다. 이러한 추운 날씨에는 따뜻한 국물이 생각나는 법이다. 유독 오늘은 국물 요리 중에서도, 맑은 국에 깔끔하면서도 깊은 맛이 있는 탕을 먹고 싶었고 고민끝에 선택한 곳은 하동관. …",
  "url": "https://blog.naver.com/2425j/224151131686",
  "publishedAt": "2026-01-18T21:11:00+09:00",
  "updatedAt": null,
  "photoCount": 14,
  "photos": [
    "https://postfiles.pstatic.net/MjAyNjAxMThfMzMg/MDAxNzY4NzM1OTA1NzY4.N0ENj4HBp1CND-UkjEPj8Cs9sFn5QusE8cLUOJEO0Dcg.Q2DNE9E54FVLnP0Ma3ad2aEXMTYGgh0w-bi0hKDla5Ig.JPEG/5.jpg?type=w466"
  ],
  "strengths": [],
  "likeCount": null,
  "isOwnerPick": false,
  "authorName": "앤써니라이프",
  "authorId": null,
  "authorLevel": null,
  "authorReviewCount": null,
  "authorFollowerCount": null,
  "authorAverageRating": null,
  "scrapedAt": "2026-10-21T05:30:29.774Z"
}
```

The **Output** tab shows the reviews in a table with the place, source, stars, title, text, publish date, strengths, photo count, author and blog post link. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data fields

| Field | Kakao Map review | Blog review |
|-------|------------------|-------------|
| `source` | `kakaomap` | `blog` |
| `placeId`, `placeName`, `placeUrl` | ✅ | ✅ |
| `placeRating` | The place's Kakao Map score out of 5 | ✅ (same) |
| `placeReviewCount` | The number of Kakao Map reviews of the place | ✅ (same) |
| `reviewId` | ✅ | ✅ |
| `rating` | 1–5 stars | `null` |
| `title` | `null` | The blog post title |
| `text` | The full review text | The excerpt that Kakao Map shows |
| `url` | `null` | The link to the blog post |
| `publishedAt` | When the review was written | When the post was published |
| `updatedAt` | When the review was last edited | `null` |
| `photos`, `photoCount` | ✅ | ✅ |
| `strengths` | 맛, 가성비, 친절, 분위기, 주차 | `[]` |
| `likeCount` | ✅ | `null` |
| `isOwnerPick` | `true` when the business pinned the review | `false` |
| `authorName` | Kakao Map nickname | Blog author name |
| `authorId`, `authorLevel`, `authorReviewCount`, `authorFollowerCount`, `authorAverageRating` | ✅ | `null` |
| `scrapedAt` | When your run collected the row (UTC) | ✅ |

All review dates are in Korea time, ISO 8601 (`+09:00`).

### How to use Kakao Map Reviews Scraper

#### In Apify Console

1. Open the Actor, fill in the **Input** tab and click **Start**.
2. Watch the run's progress in the log, then open the **Output** tab.
3. Click **Save as a new task** to run the same setup again with one click. On the task, add a **Schedule** and set **Reviews from** to `1 day` to get the new reviews of your places every day.

#### 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-reviews-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"places": ["https://place.map.kakao.com/26428654"], "maxReviewsPerPlace": 20}'
```

Add `&format=csv` or `&format=xlsx` to the URL to get CSV or Excel instead of JSON. For long runs, start the run with `POST /v2/acts/hgservices~kakao-map-reviews-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-reviews-scraper').call({
    places: [
        'https://place.map.kakao.com/26428654',
        'https://place.map.kakao.com/1737095608',
    ],
    reviewSources: ['kakaomap', 'blog'],
    maxReviewsPerPlace: 50,
    dateFrom: '30 days',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const review of items) {
    console.log(review.placeName, review.source, review.rating, review.publishedAt, review.text);
}
```

#### 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-reviews-scraper").call(
    run_input={
        "places": [
            "https://place.map.kakao.com/26428654",
            "https://place.map.kakao.com/1737095608",
        ],
        "reviewSources": ["kakaomap"],
        "maxReviewsPerPlace": 0,
        "sortBy": "newest",
        "dateFrom": "2026-01-01",
    }
)
if run is None:
    raise RuntimeError("The run was not found.")

for review in client.dataset(run.default_dataset_id).iterate_items():
    print(review["placeName"], review["rating"], review["publishedAt"], review["strengths"])
    print("    ", review["text"])
```

#### 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 reviews. To give the assistant this Actor as a tool, use this server URL:

```
https://mcp.apify.com?tools=hgservices/kakao-map-reviews-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-reviews-scraper"`.
- **Apify CLI:** run `apify mcp install claude-code --tools hgservices/kakao-map-reviews-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.

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

- *"Get the Kakao Map reviews of https://place.map.kakao.com/26428654 from the last 3 months and summarize the complaints in English."*
- *"Compare the ratings and the most common strengths of these two Kakao Map places."*
- *"Get the blog reviews of this restaurant on Kakao Map and list the bloggers with links to their posts."*

#### 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, get the new reviews of all your branches every morning, and send each review with 1 or 2 stars to a Slack channel.

### Tips

- **Get all Kakao Map reviews.** Set **Max reviews per place** to `0`. The Actor then gets every Kakao Map review of the place.
- **Track only new reviews.** Schedule a task with **Reviews from** set to `1 day` or `7 days`, and keep the sort order on **Newest first**.
- **Find the places first.** Use **Kakao Map Search Scraper** to search Kakao Map by keyword and get place links, or **Kakao Map Building Directory** to list every business in a building or mall. Then give those links to this Actor.
- **Translate or analyze the text.** The review text is in Korean. Connect the Actor to an AI assistant through MCP to translate, summarize or classify the reviews.

### Limits

- **Blog reviews stop at 100 for each place.** Kakao Map shows only the newest 100 blog reviews of a place, also when it counts more.
- **Blog reviews have an excerpt, not the full post.** Use the `url` field to open the full post.
- **"Newest first" sorts by the last change.** A review that someone edited recently can come before newer reviews. The `publishedAt` field is always the date when the review was first written, and **Reviews from** uses that date.
- **Unknown places are skipped.** When no Kakao Map place has an ID, the run log tells you, and that place gives no rows.

### Related Actors

- **Kakao Map Search Scraper** searches Kakao Map by keyword and gets the places to give to this Actor.
- **Kakao Map Building Directory** lists every business inside a building, shopping mall or office tower.

### FAQ, disclaimers and support

**Do I need a Kakao account 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 all the reviews of a place?**
Yes, for Kakao Map reviews. Set **Max reviews per place** to `0`. In a test run, the Actor got all 207 Kakao Map reviews of a place that shows 207. For blog reviews, Kakao Map shows only the newest 100.

**How fast is it?**
A run with two places and 462 reviews (Kakao Map and blog) took about 30 seconds.

**Which places does it support?**
Any place that has a page on Kakao Map: restaurants (맛집), cafes, bars, hotels, hospitals and clinics, beauty salons, academies, shops and more.

**Is it legal to scrape Kakao Map reviews?**
The Actor collects only reviews that Kakao Map shows publicly without a login. Reviews and photos are written by Kakao Map users and bloggers, and their nicknames are personal data, which is protected by laws such as Korea's Personal Information Protection Act (PIPA) and the GDPR. You are responsible for using the data in line with Kakao's terms of service, copyright and these laws. 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

## `places` (type: `array`):

One per line: a Kakao Map place URL (https://place.map.kakao.com/26428654) or a place ID (26428654).

## `reviewSources` (type: `array`):

Kakao Map reviews are the star ratings and comments people write on Kakao Map. Blog reviews are blog posts Kakao Map links to the place (Kakao shows the newest 100 for each place).

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

The most reviews to get for each place from each source. Set to 0 for all. You are billed per review, so use this to control cost.

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

'Newest' lists the latest new or edited reviews first (최신 순). 'Most helpful' uses Kakao's ranking (유용한 순). Blog reviews are always newest first.

## `dateFrom` (type: `string`):

Only reviews written on or after this date (Korea time). Use a date like 2026-01-01, or a relative period like '30 days' or '6 months' to count back from today. Leave empty for all dates.

## Actor input object example

```json
{
  "places": [
    "https://place.map.kakao.com/26428654"
  ],
  "reviewSources": [
    "kakaomap",
    "blog"
  ],
  "maxReviewsPerPlace": 100,
  "sortBy": "newest"
}
```

# 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 = {
    "places": [
        "https://place.map.kakao.com/26428654"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/kakao-map-reviews-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 = { "places": ["https://place.map.kakao.com/26428654"] }

# Run the Actor and wait for it to finish
run = client.actor("hgservices/kakao-map-reviews-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 '{
  "places": [
    "https://place.map.kakao.com/26428654"
  ]
}' |
apify call hgservices/kakao-map-reviews-scraper --silent --output-dataset

```

## MCP server setup

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