Kakao Map Scraper (KakaoMap Place Search) avatar

Kakao Map Scraper (KakaoMap Place Search)

Pricing

from $1.00 / 1,000 places

Go to Apify Store
Kakao Map Scraper (KakaoMap Place Search)

Kakao Map Scraper (KakaoMap Place Search)

Search Kakao Map (KakaoMap) by keyword and get Korean business listings: restaurants, cafes, clinics and shops in Seoul and all of South Korea, with name, category, address, phone, coordinates, rating and review counts. Same output fields as our Naver Map Scraper.

Pricing

from $1.00 / 1,000 places

Rating

0.0

(0)

Developer

SUNGHWAN CHO

SUNGHWAN CHO

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Categories

Share

Kakao Map Place Search Scraper

Enter a Korean search keyword such as 강남 맛집 (Gangnam restaurants) and get up to 500 Kakao Map places per query: name, category, address, phone, coordinates, rating and review counts, with optional opening hours and menu prices. Restaurants, cafes, clinics, salons, shops and any other local business in South Korea.

Kakao Map is one of Korea's two major map services, alongside Naver Map. Each keeps its own ratings, review counts and ranking, so checking both gives a fuller picture of a local market. This Actor returns the same input and the same field names, in the same order, as Naver Place Search Scraper, including source (kakao here, naver there). Run both with the same keywords and append the two datasets into one table, with no field mapping.

What you get

For each search query, up to 500 places in Kakao's own ranking order:

  • Name, category, full category path and business type
  • Road address, lot-number address, district and postal code
  • Phone number and homepage
  • Latitude and longitude (WGS84)
  • Kakao rating (out of 5), rating count, blog review count
  • Booking availability, Kakao Talk channel, new-opening flag
  • Amenities (parking, Wi-Fi, takeout, delivery, pets, …) and keyword tags
  • Image URLs and photo count
  • Direct Kakao Map URL

With includeDetails turned on, each place also gets:

  • Open status right now, opening hours by day, days off
  • Menu items with prices in KRW
  • Review keyword counts (taste, kindness, mood, value, parking)
  • Kakao Talk channel URL

No login, no API key and no browser needed.

Use cases

  • Complete Korean local data — combine with Naver Place Search Scraper to cover both Korean maps in one schema
  • Lead generation — build lists of Korean businesses by area and category, with phone numbers, homepages and addresses
  • Market research — count and compare competitors in a neighborhood, including menu prices, before entering the Korean market
  • Local SEO — check where a business ranks on Kakao Map for a keyword, next to its Naver rank
  • Location data for AI agents and apps — feed Korean place data with coordinates into your own pipeline

Input

FieldDescription
queriesSearch keywords, one per line. Combine an area with a category in Korean: 강남 맛집 (Gangnam restaurants), 성수 카페 (Seongsu cafes), 해운대 맛집 (Haeundae restaurants), 홍대 미용실 (Hongdae hair salons).
maxPlacesPerQueryMaximum places per query (1–500). Default 50.
includeDetailsAdd opening hours, days off, menu with prices, review keyword counts and Kakao Talk channel URL. One extra request per place, about 4 times slower. Default false.
proxyConfigurationProxy settings. Keep the Apify Proxy enabled; the default datacenter proxy is enough.
{
"queries": ["강남 맛집", "성수 카페"],
"maxPlacesPerQuery": 100,
"includeDetails": false
}

The input is the same as Naver Place Search Scraper's (queries, maxPlacesPerQuery, proxyConfiguration), so you can send the same JSON to both Actors. includeDetails is Kakao only.

Output

One dataset item per place. Example from a real run (imageUrls shortened here; a run returns up to 10):

{
"source": "kakao",
"query": "홍대 카페",
"rank": 1,
"id": "27194461",
"name": "제비다방",
"category": "테마카페",
"businessType": "음식점",
"roadAddress": "서울 마포구 와우산로 24",
"address": "서울 마포구 상수동 330-12 지하1층, 1층",
"district": "서울 마포구 상수동",
"phone": "02-325-1969",
"latitude": 37.54661695,
"longitude": 126.92310099,
"visitorReviewScore": 4.5,
"visitorReviewCount": 145,
"blogCafeReviewCount": 184,
"bookingReviewCount": null,
"hasBooking": false,
"hasNaverPay": null,
"talktalkUrl": null,
"amenities": ["주차", "무선 인터넷", "포장"],
"promotion": null,
"isNewOpening": false,
"imageUrl": "https://t1.kakaocdn.net/local/kakaomapPhoto/review/7e53b0990cdebfd4c17b08481babb1fdd97a3b72?original",
"imageUrls": [
"https://t1.kakaocdn.net/local/kakaomapPhoto/review/7e53b0990cdebfd4c17b08481babb1fdd97a3b72?original",
"https://t1.kakaocdn.net/local/kakaomapPhoto/review/a80a954c441d67b725c37e701c1aacbf8d35c89b?original"
],
"imageCount": 1021,
"url": "https://place.map.kakao.com/27194461",
"categoryPath": "음식점 > 카페 > 테마카페",
"keywords": ["라이브공연", "라이브바"],
"homepage": "https://www.ctrplus.com/jebi",
"zipCode": "04075",
"hasKakaoChannel": false,
"openStatus": null,
"openingHours": null,
"daysOff": null,
"menu": null,
"keywordStrengths": null,
"kakaoChannelUrl": null,
"detailsStatus": "notRequested",
"detailsErrorCode": null,
"scrapedAt": "2026-10-01T10:00:20.443Z",
"schemaVersion": 2
}

With includeDetails: true, the detail fields are filled. From a real run (을지로 맛집, Euljiro restaurants):

{
"name": "문경식당",
"openStatus": "OPEN",
"openingHours": ["월 11:00 ~ 21:30", "화 11:00 ~ 21:30", "수 11:00 ~ 21:30", "목 11:00 ~ 21:30", "금 11:00 ~ 21:30"],
"daysOff": "매주 토요일, 일요일, 26/10/5 개천절 대체공휴일, 공휴일",
"menu": [
{ "name": "하이포크 삼겹살 (180g)", "price": 17000 },
{ "name": "고등어백반", "price": 10000 },
{ "name": "삼치백반", "price": 10000 },
{ "name": "굴비백반", "price": 10000 },
{ "name": "비빔밥", "price": 10000 }
],
"keywordStrengths": { "taste": 10, "kindness": 7, "value": 5, "mood": 5 },
"kakaoChannelUrl": "https://pf.kakao.com/_cvjxan",
"detailsStatus": "ok",
"detailsErrorCode": null
}

detailsStatus tells why detail fields are null:

detailsStatusMeaningBilled for details
notRequestedincludeDetails was offNo
okDetail page loaded; a null detail field means the business did not publish itYes
notAvailableDetail page loaded but had no hours, menu, keyword counts or channelNo
failedDetail page could not be loaded after retries; detailsErrorCode says why (e.g. HTTP_403, EMPTY_BODY, ETIMEDOUT)No

Every row has every field, always in this order. A value Kakao did not provide is null, never a missing key. For visitorReviewCount and blogCafeReviewCount, 0 means Kakao reports zero and null means Kakao did not provide the count. schemaVersion changes when fields are added or their meaning changes (version 2, 2026-10-01: added detailsStatus, detailsErrorCode and schemaVersion; missing counts are now null instead of 0).

Export the dataset as JSON, CSV or Excel, or read it through the Apify API.

Field compatibility with Naver Place Search Scraper

Fields
Same name, same meaning, filled from Kakaoquery, rank, id, name, category, businessType, roadAddress, address, district, phone, latitude, longitude, visitorReviewScore, visitorReviewCount, blogCafeReviewCount, hasBooking, amenities, isNewOpening, imageUrl, imageUrls, imageCount, url, scrapedAt
Naver only, always null herebookingReviewCount, hasNaverPay, talktalkUrl, promotion
In both Actorssource ("kakao" here, "naver" there), schemaVersion
Added in this ActorcategoryPath, keywords, homepage, zipCode, hasKakaoChannel, the six detail fields, detailsStatus, detailsErrorCode

Differences to keep in mind when merging:

  • businessType is a Korean top-level category here (for example 음식점 = food and drink, which includes cafes; the finer type is in category and categoryPath), while Naver returns an English code (cafe).
  • roadAddress includes the city and district here (서울 마포구 와우산로 24); Naver starts at the street name.
  • visitorReviewScore and visitorReviewCount are Kakao's own star ratings, not Naver's visitor reviews.
  • Use source + id as the row key. id is the Kakao place ID; Naver and Kakao IDs are separate systems, so the same number can mean different places. (Naver rows from runs before 2026-10-01 have no source; treat an empty source as naver.)
  • Decide that two rows are the same business by phone number, address and coordinates, not by name. Many different businesses share a name (chains, common names like 스타벅스 or 김밥천국). If phone, address and coordinates do not agree, keep the rows separate.

Run summary: did every query finish?

Each run saves a free summary in the key-value store as RUN_SUMMARY (the Run summary link on the Output tab, or GET https://api.apify.com/v2/key-value-stores/{defaultKeyValueStoreId}/records/RUN_SUMMARY). It is not a dataset row, so it is not billed. One entry per query, in the same format as Naver Place Search Scraper, plus detail counts:

{
"query": "을지로 맛집",
"status": "completed",
"stopReason": "maxPlacesReached",
"reportedTotal": 1203,
"returnedCount": 30,
"coverageLimit": 30,
"errorMessage": null,
"detailsOk": 29,
"detailsNotAvailable": 0,
"detailsFailed": 1
}
  • status: completed, partial (some places saved, then Kakao kept rejecting requests), failed (nothing saved for this query), budgetLimited (your "Maximum cost per run" was reached).
  • stopReason: maxPlacesReached, endOfResults, noResults, coverageLimitReached (Kakao's limit of 500 places per query), requestFailed, chargeLimitReached, notStartedChargeLimit.

The run fails only when every query failed. If some queries fail, the other results are kept and the run succeeds; check RUN_SUMMARY to re-run just the failed ones.

Tips

  • Put an area name in every query. Without one (맛집 alone), Kakao ranks results around central Seoul.
  • Go beyond 500 places by splitting an area into smaller ones: instead of 서울 카페, search 성수 카페, 연남 카페, 한남 카페, and so on. Use the id field to remove duplicates.
  • Turn on includeDetails only when you need hours or menus. It adds one request per place and is billed per place with details; places whose detail page fails to load are saved without details (detailsStatus: "failed") and are not billed for it.
  • Detail fields depend on what the business published. In a test run of 90 restaurants, opening hours, menu and keyword counts were present for all 90, a Kakao Talk channel URL for 38 and days off for 16. Missing values are null.
  • Sponsored listings are excluded; rank reflects the organic order.
  • Text fields such as names, categories, amenities and opening hours are returned in Korean, as shown on Kakao Map.
  • Some businesses do not publish a phone number, homepage or rating; those fields are null.

Reviews

Kakao place IDs do not work in Naver Place Reviews Scraper. To get reviews, run Naver Place Search Scraper with the same keywords and pass its id values as places, e.g. {"places": ["1922651675"], "maxReviewsPerPlace": 100}. Its README has a step-by-step example.

Notes

This Actor collects only publicly visible business listing data. It reads aggregate ratings and keyword counts only; it does not collect review texts, reviewer nicknames, user IDs or profile images, and it does not log in to any account.

Kakao Map has no public API with ratings, so this Actor uses the same JSON endpoints the Kakao Map website calls. If Kakao changes them, the Actor may stop working until it is updated.