{
  "openapi": "3.0.1",
  "info": {
    "title": "Kakao Map (카카오맵) Scraper - All Reviews, Places, Hours, Menus",
    "description": "Extract Korean businesses from Kakao Map (카카오맵) with every review a place has, plus phone, address, GPS, opening hours, menus, hourly footfall, live fuel prices against the regional average, EV charger availability and hotel nightly rates. 카카오맵 리뷰·맛집·주유소·호텔 데이터 전체 수집. 한국어·영어 검색.",
    "version": "0.0",
    "x-build-id": "W4qLsyuH3py0DR3bv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zen-studio~kakao-map-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zen-studio-kakao-map-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/zen-studio~kakao-map-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zen-studio-kakao-map-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/zen-studio~kakao-map-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zen-studio-kakao-map-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "title": "🔍 검색어 / Search terms",
            "type": "array",
            "description": "카카오맵에서 찾을 키워드입니다. 한 줄에 하나씩 입력하세요.<br>한국어와 영어 모두 됩니다. <b>카페</b>, <b>맛집</b>, <b>편의점</b>, <b>스타벅스</b> 처럼 업종명이나 브랜드명을 그대로 넣으면 됩니다. 검색어마다 별도로 실행되며, 각각 <b>장소 수</b> 만큼 수집합니다.<br><br>What to look for. Each term runs its own search and returns up to <b>Max places</b> results. English works as well as Korean: <code>cafe</code>, <code>hotel</code>, <code>convenience store</code> and <code>starbucks</code> all resolve.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "📍 지역 / Location",
            "type": "string",
            "description": "검색할 지역입니다. 시·도, 구·군, 동 이름 모두 됩니다. 예: <code>서울</code>, <code>강남구</code>, <code>부산 해운대</code>. 비워 두면 전국을 검색합니다.<br>지역을 지정하면 넓게 수집할 때도 그 지역 밖으로 넘어가지 않습니다.<br><br>City, district or neighbourhood to search in, for example <code>Seoul</code>, <code>Gangnam</code> or <code>Busan Haeundae</code>. Leave empty to search the whole country. Setting a location also keeps deep sweeps inside that area."
          },
          "maxResults": {
            "title": "🔢 검색어당 장소 수 / Max places per term",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "검색어 하나당 수집할 장소 수입니다. 검색어 3개에 200을 넣으면 최대 600곳입니다.<br>해당 업종의 장소가 그보다 적으면 있는 만큼만 수집하고 종료합니다.<br><br>How many places to return for <b>each</b> search term. Three terms with 200 here returns up to 600 places. If fewer places of that type exist, you get all of them and the run stops."
          },
          "includeDetails": {
            "title": "🕒 영업시간·메뉴·방문자 수 추가 / Add hours, menus & footfall",
            "type": "boolean",
            "description": "각 장소의 상세 정보를 함께 가져옵니다. <b>영업시간</b>(브레이크타임·라스트오더 포함), <b>메뉴와 가격</b>, <b>요일별 시간대 방문자 수</b>, 가격대, 리뷰 본문, 사진, 가까운 지하철 출구까지 포함됩니다.<br><br>Fetches a detail page for every place and adds <b>opening hours</b> (with breaks and last orders), <b>menu items with prices</b>, <b>hourly visitor footfall for each weekday</b>, price level, review text, photo galleries and the nearest subway exit.<br><br>장소당 요청이 한 번 더 필요하므로 수천 곳을 한 번에 처리하기보다 수백 곳 단위가 적합합니다. This is one extra fetch per place, so it suits hundreds of places rather than many thousands in a single run. The run log reports how many places were enriched, and you are only billed for those.",
            "default": false
          },
          "placeUrls": {
            "title": "🔗 장소 링크 / Place links",
            "type": "array",
            "description": "특정 장소만 수집하려면 카카오맵 장소 링크를 붙여 넣으세요. 검색은 건너뜁니다. 전체 링크, 지도 링크, 장소 ID 숫자 모두 인식합니다.<br>링크로 넣은 장소는 항상 상세 정보까지 함께 수집됩니다.<br><br>Paste Kakao Map place links to scrape exactly those places, skipping search entirely. Full links, map links or bare place ids all work, and every place is always fully enriched.",
            "items": {
              "type": "string"
            }
          },
          "maxReviews": {
            "title": "💬 장소당 리뷰 수 / Reviews per place",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "각 장소에서 가져올 리뷰 수입니다. <b>0이면 상세 정보에 포함된 미리보기만</b> 제공됩니다.<br><br><b>카카오맵 방문자 리뷰는 상한이 없습니다.</b> 넉넉한 값을 넣으면 그 장소의 리뷰를 전부 수집합니다. 별점, 본문, 사진, 작성일이 포함됩니다.<br><b>블로그 후기는 장소당 100개까지만</b> 제공됩니다. 이는 카카오맵 자체 제한이며, 그 이상은 가져올 수 없습니다.<br><br>How many reviews to collect for each place.<br><b>Kakao Map visitor reviews have no depth limit:</b> set this high and you get every one the place has, with star rating, full text, photos and dates.<br><b>Korean blog write-ups stop at 100 per place.</b> That is Kakao's own ceiling, not ours, and no amount of paging gets past it.<br><br><b>상세 정보에 포함된 미리보기 분은 과금되지 않습니다.</b> The few reviews that enrichment already includes are not billed; only reviews beyond those are.",
            "default": 0
          },
          "maxPhotos": {
            "title": "📷 장소당 사진 수 (30장 무료) / Photos per place (first 30 free)",
            "minimum": 0,
            "maximum": 3000,
            "type": "integer",
            "description": "각 장소에서 가져올 사진 URL 수입니다. 최신순이며, <b>0이면 사진을 수집하지 않습니다.</b><br><br><b>처음 30장은 과금되지 않습니다.</b> 위의 <i>영업시간·메뉴·방문자 수 추가</i>를 켜면 장소당 사진 30장이 이미 포함되어 있어, 30 이하로 설정하면 추가 요청도 추가 요금도 없습니다. 30장을 넘는 사진만 과금됩니다. (상세 정보를 끄면 무료 제공분이 없어 전부 과금됩니다.)<br><br><b>You are not billed for the first 30.</b> With <i>Add hours, menus &amp; footfall</i> on, 30 photos per place are already included, so anything up to 30 here costs nothing extra and makes no extra requests. Only photos beyond those 30 are billed. With enrichment off there is no free allowance, so every photo is billed.<br><br><b>한 장소의 사진을 전부 받으려면 3000을 넣으세요.</b> 명소도 2,100장 정도가 최대라 3000이면 전부 수집되고, 실제 존재하는 만큼만 과금됩니다. <b>To take every photo a place has, set 3000.</b> Galleries top out at roughly 2,100 even for landmarks.<br><br><b>30장을 넘으면 수가 빠르게 늘어납니다.</b> 500곳에 250장씩이면 과금 대상은 250장이 아니라 110,000장입니다. <b>Above 30 it multiplies:</b> 250 photos across 500 enriched places is 110,000 billable photos, not 250.",
            "default": 0
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}